sirmekus / ahia
面向对象数据库 CRUD 操作方式
Requires
- sirmekus/zam: >=2.0
This package is auto-updated.
Last update: 2024-09-10 00:46:19 UTC
README
Ahia 帮助进行数据库 CRUD 操作,以实现更强大和语法化的操作。
安装
要开始使用,您只需
composer require sirmekus/ahia
即可。在伊博语中,Ahia 的意思是 "市场",在上下文中,数据库是一个 "市场",里面有许多 '物品'(数据)。哈哈。
用法
您不再需要在脚本中手动编写复杂的 SQL 查询,使您的代码更易于阅读和清洁。 欢迎来到面向对象的方式。
使用此包需要了解我们的约定(并不多。您根本不需要学习任何新东西。别害怕...#眨眼)。但首先,为了开始使用此功能,您应该在脚本中导入 Model
类,如下所示
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model();
默认情况下,您应该创建一个 .env
(首选)或 env.php
文件,该文件包含您的数据库配置。数据库配置连接将从该文件调用并初始化。您应该复制并将此文件放在您的根目录中(带有确切的密钥)
#(.env) DB_HOST=localhost DB_NAME=your_database_name DB_USER=your_username DB_PASS=your_database_password
或者
//(env.php) define( 'DB_HOST', 'localhost' ); define( 'DB_NAME', 'your_database_name' ); define( 'DB_USER', 'your_username' ); define( 'DB_PASS', 'your_database_password' );
我们鼓励您将核心数据库连接配置存储在上述建议的文件中。但是,您可以选择将这些配置作为参数传递给类,如下所示
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model($DB_HOST, $DB_USER, $DB_NAME, $DB_PASS);
传递表名
当使用此类中的任何 CRUD 方法时,最后一个参数总是数据库表的名称(您很快就会看到以下示例)。这是在运行时始终传递表名的一种方式。
另一种方式是将公共 table
属性设置为表的名称。例如
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->table = "table";
最后,您可以通过扩展 Model
类并将类命名为与表相同的名称来指定要使用的表。默认情况下,如果没有指定上述任何内容,则使用此方法。类的 小写、下划线命名 将成为要使用的数据库表的名称。例如
//Fictious Class => TestTable.php require_once 'path_to_vendor/autoload.php'; namespace YourName\Folder; use Sirmekus\Database\Model; class TestTable extends Model { //The table name is 'test_table'. You don't need to add any property or method (unless you wish to add) }
//Now you can use it like you would with the "Model" class => test.php require_once 'path_to_vendor/autoload.php'; use YourName\Folder\TestTable; $model = new TestTable(); //name of the table will be **"test_table"** and you can use every method defined in the parent class.
如果您不喜欢我们的命名约定,也可以将公共 table
属性设置为表的名称或将其作为参数传递给任何 CRUD 方法。要获取您的表名,只需在 Model
类的实例或任何由此类派生的类上调用 getTable()
方法。
请注意,在调用 CRUD 方法或通过在实例化的类上设置
table
属性时,您应该始终通过传递参数设置表名,或者如果您直接使用Model
类,则通过设置table
属性。
示例
您可以通过使用类的 insert()
方法向表中插入数据。此方法期望第一个参数是多维数组的数据(指定表列和适当的值),第二个参数是可选的 "table" 参数。例如
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->insert([ 'name'=>"Sir Mekus", "country"=>"Nigeria" ]); //or, with name of table $model->insert([ 'name'=>"Sir Mekus", "country"=>"Nigeria" ], $table='developers' );
您还可以通过在运行时指定动态属性,然后调用 save()
方法,将数据插入到表中。例如
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->name = "Sir Mekus"; $model->country = "Nigeria"; $model->save();
它们都有效地完成了相同的工作。您可以选择,而不是始终指定您的表,将 Model
类扩展为您的表名称,然后将实际类名作为名称,然后使用此扩展类运行您的操作。
要更新表,请调用 update()
方法,将一个数据数组(指定表列和适当的值)作为第一个参数,一个可选的 "where" 子句数组作为第二个参数,以及一个可选的 "table name" 作为最后一个参数。例如
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->update([ 'name'=>"Sir Mekus", "country"=>"Nigeria" ]); //or $model->update([ 'name'=>"Sir Mekus", "country"=>"Nigeria" ], [ 'email'=>'mekus600@gmail.com' ] ); //or $model->update([ 'name'=>"Sir Mekus", "country"=>"Nigeria" ], [ 'email'=>'mekus600@gmail.com' ], $table='developers');
有时我们可能需要更新数据库中的记录,如果该记录存在则更新,否则插入。您可以通过调用updateOrCreate()
方法来实现,将指定where子句(列和键,使每个记录唯一的列和键)的键值数组作为第一个参数传递;包含表column-value
的键值数组作为第二个参数(要插入或创建的内容);然后可以可选地传递table
作为最后一个参数。示例
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->updateOrCreate( [ 'email'=>$email ], [ 'name' => $name, 'email' => $email, 'phone' => $tel ] ); or $model->updateOrCreate( [ 'email'=>$email ], [ 'name' => $name, 'email' => $email, 'phone' => $tel ], $table='developers');
它会使用第一个参数在数据库中搜索匹配的记录。如果找到记录,将使用第二个参数中的数据更新表,否则将通过合并第一个和第二个参数创建新记录。
要从表中选择,只需调用select()
方法。此方法接受一个可选的数组作为第一个参数,如上所述,但具有特殊含义的特定键;作为第二个参数的可选键值(表"column=>value")"where"子句的键值数组;以及可选的table
作为最后一个参数。
示例
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->select( [ 'limit'=>20, 'offset'=>3, 'orderBy'=>'email', 'groupBy'=>'location' ], );
或者
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->select( [ 'column'=>'name, email, phone_number, location', 'limit'=>20, 'offset'=>3, 'orderBy'=>'email', 'groupBy'=>'location', 'debug'=>true, ], [ 'location' => 'Nigeria' ] );
第一个参数中期望的数组键是可选的,它们是:
-
column
:包含要选择的列的字符串(多个列应以逗号分隔)。如果未指定,则选择所有列。 -
limit
:包含limit
子句的整数 -
offset
:包含offset
子句的整数 -
orderBy
:包含应使用orderBy
子句对结果进行排序的特定列的名称 -
groupBy
:包含应使用groupBy
子句对结果进行排序的特定列的名称 -
debug
:如果设置或存在,则将在脚本中回显构建的查询以进行检查。
要计数记录,只需使用count()
方法。与上述select()
方法类似,但唯一可能的数组键只是:column
。示例
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->count( [ 'column'=>'name, email, phone_number, location' ] );
在上面的示例中,指定了'column'。这很有用,因为您可以将用于select()
方法调用的相同配置数组传递给count()
方法,以便仅选择column
键(因为它需要所有它需要的)。
您还可以通过方法的第二个参数指定where
子句。示例
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->count( [ 'column'=>'name, email, phone_number, location' ], [ 'email'=>'email@example.com' ] );
如果没有第一个参数,则将是:
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->count( null, [ 'language' => 'php' ] );
请记住,最后一个参数是查询的表名,这是一个可选参数。
要删除记录,只需调用delete()
方法,并将可选的键值数组作为第一个参数传递,如其他情况一样,并将可选的table
参数值作为最后一个参数。示例
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->delete([ 'email'=>'fake@example.com' ]);
注意,如果您已经设置了动态属性,然后调用此方法而不传递第一个参数的动态属性,则添加的动态属性或属性将被视为并用作where
子句。示例
require_once 'path_to_vendor/autoload.php'; use Sirmekus\Database\Model; $model = new Model(); $model->email = 'fake@example.com'; $model->delete();
同时
您可以在LinkedIn上与我联系,以获取有价值的建议,并我们可以共同扩大我们的网络。
在Webloit上支持我们。
并关注我的Twitter。
我鼓励贡献,即使是在文档中。谢谢,我真的希望您发现这个包很有用。