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。
我鼓励贡献,即使是在文档中。谢谢,我真的希望您发现这个包很有用。