legomolina/simple-orm

SimpleORM 是一个基于 PHP 的轻量级 ORM

2.0.1 2017-03-22 13:17 UTC

README

SimpleORM 是一个用 PHP 编写的轻量级对象关系映射库。这个 ORM 对我来说非常合适,但可能对你的项目来说太小了,所以你可以 fork 它并改进它,或者给我发送一个 pull request,以便我可以合并更改 :D

安装

SimpleORM 在 packagist 上托管,所以你可以通过 Composer 获取它

composer require legomolina/simple-orm

配置

在您的 index 中要求 Composer 自动加载

require '../vendor/autoload.php';

创建您的第一个模型

use \SimpleORM\Model;

class MyModel extends Model
{
    //Select the table which the model references
    protected static function getTableName()
    {
        return 'my_table';
    }
    //OPTIONAL. Select the id field for the table. Default: 'id'
    protected static function getTableId()
    {
        return 'my_table_id';
    }

    //Custom methods for this model

    //public static function myMethod(my_params) { }
}

从 Model 调用 config 方法以传递 mysqli 连接参数

\SimpleORM\Model::config(array(
    'name' => 'my_database_name',
    'user' => 'my_user',
    'pass' => '*******',
    'host' => 'my_host',
    'charset' => 'charset'
));

然后你就可以使用 SimpleORM 了!

用法

快速访问方法

SimpleORM 有快速选择方法来加速常用查询。如果你想从你的表中选择所有数据,你不需要输入

$result = MyModel::query()->select('*')->execute();

只需使用来自 \SimpleORM\Model::all() 方法

$result = MyModel::all()->execute();

你还可以从 \SimpleORM\Model 中简单地调用 ::getLastValue($field) 来找到你表中任何字段的最后一个值

$result = MyModel::getLastValue('my_field');

这在需要使用非自增时插入新记录时很有用

最后,你可以使用 ::findId($id)\SimpleORM\Model 中检索具有 n id 的记录

$result = MyModel::findId(12);

选择查询(查看快速访问

如果你想从你的表中选择所有数据。

$result = MyModel::query()->select('*')->execute();

如果你想添加条件。这创建了一个简单的 where(WHERE 字段 操作符 值)

$result = MyModel::all()->where()->andFilter("field", "operator", "value")->execute();

如果你想有一些条件,你可以用 AND(WHERE 字段 操作符 值 AND 字段_2 操作符_2 值_2)将它们连接起来。

$result = MyModel::all()->where()->andFilter([["field", "operator", "value"], ["field_2", "operator_2", "value_2"]])->execute();

用 or 连接它们(WHERE 字段 操作符 值 AND 字段_2 操作符_2 值_2)

$result = MyModel::all()->where()->orFilter([["field", "operator", "value"], ["field_2", "operator_2", "value_2"]])->execute();

如果你想结合两者(WHERE(字段 操作符 值 AND 字段_2 操作符_2 值_2)OR(字段_3 操作符_3 值_3))

$result = MyModel::all()->where()->andFilter([["field", "operator", "value"], ["field_2", "operator_2", "value_2"]])->or()->orFilter("field_3", "operator_3", "value_3")->execute();

你还可以检查 NULL 值(WHERE 字段 IS NULL)

$result = MyModel::all()->where()->isNull("field")->execute();

或者你可以否定(WHERE(字段 操作符 值)OR NOT(字段_2 操作符_2 值_2))

$result = MyModel::all()->where()->andFilter("field", "operator", "value")->or()->not()->andFilter("field_2", "operator_2", "value_2")->execute();

如果你不想选择所有字段。

$result = MyModel::query()->select('field_1', 'field_2')->where('field', '=', 'value')->execute();

如果你想按任何字段排序结果。

$result = MyModel::all()->order('field', 'ASC')->execute();
$result = MyModel::all()->order(['field_1', 'field_2'], ['ASC', 'DESC'])->execute();

如果你想限制返回的结果。

$result = MyModel::all()->get(1)->execute(); //get 1 without offset
$result = MyModel::all()->get(1, 2)->execute(); //get 1 with offset 2

数据操作

如果你想插入值。

$insert = array('field' => 'value', 'field' => 'value');
$result = MyModel::query()->insert($insert)->execute();

//$result => true if insertion is correct, false otherwise

如果你想删除项。

$result = MyModel::query()->delete()->where('field', '=', 'value')->execute(); //important use where() with delete()

//$result => true if delete is correct, false otherwise

如果你想更新项。

$update = array('field' => 'value', 'field' => 'value');
$result = MyModel::query()->update($update)->where('field', '=', 'value')->execute(); //important use where() with update()

//$result => true if update is correct, false otherwise

与 ResultSet 一起工作

ResultSet 是选择查询的处理类。它允许你遍历结果,查找值或检查是否存在某些字段。

从结果获取值

做这件事最简单的方法是在 while 循环中使用 ResultSet->loop() 方法。

while($result->loop()) {
    $field_1 = $result->table_field_1;
    $field_2 = $result->table_field_2;
    
    ...
    
    $field_n = $result->table_field_n;
    
    //do something with the values
}

ResultSet->loop() 遍历 ResultSet 中的所有记录,并在每次迭代中加载下一个记录的值。

你还可以执行到 n 个记录

$result->goToRegister(n);

$result->table_field_1;
$result->table_field_2;

或者你可以手动循环

$result->first(); //loads first register
$result->next();  //loads next register if exists, otherwise it will return false
$result->prev();  //loads previous register if exists, otherwise it will return false
$result->last();  //loads last register

你可以手动检查当前记录是否是第一个或最后一个。

$result->isFirst(); //true | false
$result->isLast();  //true | false

搜索值

使用 ResultSet,你可以搜索数据库中的所有结果中的特定值,并返回属于该值的记录。

$result->find('table_field', 'find_this_value'); //returns false if doesn't find anything

你还可以知道字段是否存在。

$result->fieldExists('table_field'); //true if exists, false otherwise

最后,你可以从所有记录中搜索一个值。它将返回第一个找到此值的记录

$result->findValue('find_this_value');

许可证

SimpleORM 在 MIT 许可证下发布。有关更多信息,请参阅许可证文件。