zend-db 的对象关系映射器

v1.3.5 2018-02-23 11:05 UTC

README

License Scrutinizer Code Quality Total Downloads Latest Stable Version

O ORM Silk (英文名为seda) 是一个与 Zend Framework 2 结构集成的对象映射系统,旨在实现实用性、轻量级和易于配置。它允许将表转换为对象,然后使用 Zend 的 SQL 查询标准来访问数据。换句话说,它的作用只是在数组级别映射对象。其余的都由 Zend 负责 - 与数据库进行数组事务。

composer require minerva-sistemas/silk-orm

如何工作

配置

  • @configure {"schema":"Cadastro"} - 指定表的 schema,如果为空,则采用默认 schema。
  • @configure {"table":"table_name"} - 指定对象在数据库中的表名。
  • @configure {"primary_key":"idtable"} - 指定表的主键。
属性
  • @configure {"ignore":true} - 在构建查询时忽略对象的属性。
  • @configure {"ignoreIfNull":true} - 仅在为 null 时忽略对象的属性。
  • @configure {"alias":"somecolumn"} - 指定属性在表中的列名。
  • @configure {"type":"\\Garage\\Car"} - 自动实例化可映射对象。

如何使用

实例化

以下示例用于实例化单个对象。可以使用 Zend 的 where 子句,就像在 TableGateways 中使用的那样,因为 Silk 使用 ZF2 的 TableGateway 来构建其结果。

$user = new User(1); // pelo valor da chave primária
$user = new User(["name"=>"lucas"]); // por um where com array
$user = new User(function(Select $select){ /* ... */ }); // Pelo select do zf2

多选

以下示例用于实例化多个对象。为了存储对象集合,我们使用库 easyframework/collections

$collection = User::select(["name"=>"lucas"]);
$collection = User::select(function(Select $select){ /* ... */ });

$collection->map(function(User $user){
   echo $user->getCompany()->getName() . "\n";
});

插入新记录

当对象被实例化且构造函数中没有传递任何参数时,它将被创建为空,即没有任何值,也没有为它定义任何 id。当对象的 id 为 null(《$company->getId() == null》)时,调用 save() 方法将在数据库中插入新记录。如果它已经有一个定义的 id,则将更新记录。

$company = new Company();
$company->setName("Minerva Engenharia de Sistemas");
$company->save();

echo $company->getId(); // 1

更新记录

当对象已经有一个定义的 id,并且调用 save() 方法时,将根据以下示例更新数据库中主键为对象 id 的记录。

通过主键实例化
$company = new Company(1);
$company->setName("Minerva");
$company->save();
通过显式数组实例化
$company = new Company(['idcompany' => 1]);
$company->setName("Minerva");
$company->save();
通过 ZF2 的 where 条件实例化
$company = new Company(function(Select $select){
   $select->where->equalTo('idcompany', '1');
   $select->limit(1);
});
$company->setName("Minerva");
$company->save();
更新多条记录

以下示例将更新所有列名为 'Softwerk' 的记录。

Company::select(['name' => 'Minerva'])->map(function(Company $company){
   $company->setName('Minerva Engenharia de Sistemas');
   $company->save();
});

删除记录

只有当对象的 id 已定义时,它才会被删除,就像在更新操作中一样。要删除数据库中的记录,只需调用对象的 delete() 方法,如下例所示。

$company = new Company(1);
$company->delete();
删除多条记录

以下示例将删除所有列 name 的值为 Softwerk 的对象。

Company::select(['name' => 'Minerva'])->map(function(Company $company){
   $company->delete();
});