denbeke / orm
PHP 简单的 ORM 实现
Requires
- php: >=5.4.0
- usmanhalalit/pixie: 1.*@dev
This package is not auto-updated.
Last update: 2024-09-14 17:53:42 UTC
README
PHP 简单的 ORM 实现
在处理 SQL 数据库时,总是需要做一些相同的基础工作,例如使用表参数进行选择,将结果放回类中...
ORM (对象关系映射) 解决了这个问题,你只需在类上调用一些方法,使用你在类中定义的属性。
这个实现很简单,但可以节省你大量的时间和工作。
安装
编写查询并不是我总是喜欢做的事情,这个 ORM 包依赖于一个查询构建器: Pixie (由 Muhammad Usman 开发)。
依赖项通过 Composer 安装
$ composer install
当然,你也可以使用 Composer 安装此包
将 "denbeke/orm": "dev-master" 添加到你的要求中,并将以下代码添加到 composer.json 文件的根目录以添加 Github 仓库
"repositories": [ { "type": "vcs", "url": "https://github.com/DenBeke/ORM.git" } ],
用法
配置 & 初始化
在您开始操作之前,您必须调用 \DenBeke\ORM\ORM::init() 函数(您必须在您的应用程序中这样做一次)。如果在未初始化的 ORM 类上调用方法,则会抛出异常。
\DenBeke\ORM\ORM::init() 接收一个关联 PHP 数组作为参数。此数组必须包含一些基本数据库配置。
$db_config = [ 'driver' => 'mysql', // Db driver 'host' => 'localhost', 'database' => 'my_database_name', 'username' => 'root', 'password' => 'root', ]; \DenBeke\ORM\ORM::init($db_config);
$db_config 数组将传递给 Pixie 查询构建器。这意味着您可以使用所有 Pixie 配置选项。
ORM 类
创建一个“ORM-ready”类非常简单,只需继承自 \DenBeke\ORM\ORM。
class Person extends \DenBeke\ORM\ORM { public $id; public $name; public $city; }
编写代码后,您还必须在数据库中添加一个名为 person 的表,字段为 id、name、city。
如您所注意到的,表名是从类名(不带命名空间并转换为小写!)派生的,列名只是 PHP 字段的名称。
ORM 实现了一个默认构造函数,该构造函数接受一个关联数组或一个 stdClass,并将输入的值分配给新对象的字段。
$person = new Person(['name' => 'Bob', 'city' => 'Amsterdam']);
获取方法
一旦类继承自 \DenBeke\ORM\ORM,您就可以访问所有 ORM 方法。从获取方法开始。
get()
预定义的 get() 方法从数据库中获取给定类型的所有记录。
如果我们有 3 条记录在 person 表中,我们可以使用 get() 函数获取所有这些记录
$persons = Person::get();
在这个例子中,$persons 是一个大小为 3 的数组,包含类型为 Person 的对象。
getBy*()
每当一个类有一个字段时,调用者可以通过这些字段从数据库中获取记录。在这个例子中,Person 类有字段 id、name、city。因此,您可以调用以下函数
Person::getById($id);Person::getByName($name);Person::getByCity($city);
这些静态函数将返回一个包含 Person 元素的数组,其中输入参数与表列匹配。
选项
进行中
您可以为 get() 和 getBy*() 方法提供选项。选项参数是一个关联数组。
$options = [ 'option1' => '...', 'option2' => '...' ];
limit
$persons = Person::get(['limit' => 4]);
orderBy
您可以通过提供 orderBy 选项来对结果进行排序。 orderBy 应该是一个数组,包含用于排序的数据库列/字段,以及一个可选的方向(ASC 或 DESC,默认为 ASC)。
例如,如果您在数据库中有 Bob、John、Alice,下面的操作将返回 Alice、Bob、John。
$options = [ 'orderBy' => ['name', 'ASC'], ]; $persons = Person::get($options);
AND
您可以使用 andWhere 选项将 AND 子句添加到 getBy* 方法中。
$options = [ 'andWhere' => [ 'age', '>', 18 ] ]; Person::getByName($name, $options);
OR
您可以使用 orWhere 选项将 OR 子句添加到 getBy* 方法中。
$options = [ 'orWhere' => [ 'city', '=', 'Antwerp' ] ]; Person::getByCity('Brussels', $options);
add()
向数据库添加记录非常简单,只需创建类的实例,并在其上调用 add() 方法。
$person = new Person; $person->name = 'Alice'; $person->city = 'Brussels'; $person->add();
update()
更新记录和添加记录一样简单。
只需更改一个字段,然后调用 update() 方法。
$person = Person::getByName('Bob')[0]; $person->city = 'Brussels'; $person->update();
remove()
可以使用 remove() 方法删除记录。
$person = Person::getById(3)[0]; $person->remove();
许可证
本程序是免费软件:您可以在自由软件基金会发布的GNU通用公共许可证的条款下重新分发和/或修改它,许可证版本为3或更高版本(根据您的选择)。
本程序分发时希望它是有用的,但不提供任何保证;甚至不保证其可销售性或适用于特定用途。有关详细信息,请参阅GNU通用公共许可证。
您应该已经随本程序收到了GNU通用公共许可证的副本。如果没有,请参阅https://gnu.ac.cn/licenses/。
作者
Mathias Beke - denbeke.be