denbeke/orm

PHP 简单的 ORM 实现

dev-master 2016-02-02 21:40 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:53:42 UTC


README

Build Status

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 的表,字段为 idnamecity
如您所注意到的,表名是从类名(不带命名空间并转换为小写!)派生的,列名只是 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 类有字段 idnamecity。因此,您可以调用以下函数

  • Person::getById($id);
  • Person::getByName($name);
  • Person::getByCity($city);

这些静态函数将返回一个包含 Person 元素的数组,其中输入参数与表列匹配。

选项

进行中

您可以为 get()getBy*() 方法提供选项。选项参数是一个关联数组。

$options = [
    'option1' => '...',
    'option2' => '...'
];
limit
$persons = Person::get(['limit' => 4]);
orderBy

您可以通过提供 orderBy 选项来对结果进行排序。 orderBy 应该是一个数组,包含用于排序的数据库列/字段,以及一个可选的方向(ASCDESC,默认为 ASC)。

例如,如果您在数据库中有 BobJohnAlice,下面的操作将返回 AliceBobJohn

$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