carlosmaiello / sti
CakePHP 3 ORM 的单表继承
dev-master / 1.0.x-dev
2018-09-11 23:24 UTC
Requires (Dev)
- cakephp/cakephp: ~3.0
- cakephp/cakephp-codesniffer: 2.*
- phpunit/phpunit: 4.1.*
This package is not auto-updated.
Last update: 2024-09-20 19:45:27 UTC
README
CakePHP 3 ORM 的单表继承。
[...] 是一种在关系数据库中模拟面向对象继承的方法。在将数据库表映射到面向对象语言中的对象时,数据库中的一个字段标识对象属于层次结构中的哪个类。
(来源: 维基百科)
安装
使用 Composer
composer require muffin/sti:1.0.x-dev
然后需要加载插件。您可以使用以下壳命令
bin/cake plugin load Muffin/Sti
或者手动将下面的语句添加到 bootstrap.php
Plugin::load('Muffin/Sti');
用法
<?php // src/Model/Table/CooksTable.php namespace App\Model\Table; use Cake\ORM\Table; class CooksTable extends Table { public function initialize($config) { $this->table('sti_cooks'); $this->addBehavior('Muffin/Sti.Sti', [ 'typeMap' => [ 'chef' => 'App\Model\Entity\Chef', 'baker' => 'App\Model\Entity\Baker', 'assistant_chef' => 'App\Model\Entity\AssistantChef', ] ]); // Optionally, set the default type. If none is defined, the // first one (i.e. `chef`) will be used. $this->entityClass('App\Model\Entity\AssistantChef'); } }
然后为每种实体类型创建一个类
- 厨师
- 面包师傅
- 副厨师
之前定义的作为 '默认' 的实体需要使用 StiAwareTrait
<?php // src/Model/Entity/AssistantChef.php
namespace App\Model\Entity;
use Cake\ORM\Entity;
use Muffin\Sti\Model\Entity\StiAwareTrait;
class AssistantChef extends Entity
{
use StiAwareTrait;
}
可选地,您可以为扩展父表以封装业务逻辑的表创建类
<?php // src/Model/Table/ChefsTable.php namespace App\Model\Table; class ChefsTable extends CooksTable { // ... }
我说可选的,因为如果您只需要一些额外的验证规则,您可以在父表上定义这些规则。例如,为厨师添加自定义规则
// src/Model/Table/CooksTable.php public function validationChefs(Validator $validator) { // ... return $validator; }
新实体
行为将自动添加创建不同类型实体(即 newChef()
)的辅助方法。创建新实体有多种方式,所有方式都是有效的,具体取决于情况,您可能需要一个或另一个
// using the parent table $cooks->newChef([...]); // or, using the parent table again $cooks->newEntity(['type' => 'chef', ...]); // or, using the child table $chefs->newEntity([...]);
注意
要使上述示例使用 (*chef) 的工作,您需要向 Inflector
添加自定义规则
Cake\Utility\Inflector::rules('plural', ['/chef$/i' => '\1Chefs']);
补丁与功能
- 分支
- 修改、修复
- 测试 - 这很重要,所以它不会意外损坏
- 提交 - 不要修改许可、todo、版本等。(如果您更改了任何内容,请将它们放入自己的提交中,这样我在拉取时可以忽略它们)
- 拉取请求 - 主题分支的加分项
为了确保您的 PR 被上游考虑,您必须遵循 CakePHP 编码标准。
错误与反馈
http://github.com/usemuffin/sti/issues
许可
版权所有 (c) 2015, Use Muffin,许可协议为 MIT 许可证。