minerva-sistemas / silk-orm
zend-db 的对象关系映射器
Requires
- easyframework/collections: 7.0.0
- hamboldt/php-doc-reader: >=v1.0.0
- zendframework/zend-db: >=2.5.1
- zendframework/zend-eventmanager: >=2.5.2
This package is not auto-updated.
Last update: 2024-09-22 07:08:28 UTC
README
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(); });