sam-it / yii2-singletableinheritance
为 Yii2 实现的单表继承
v2.0.1
2020-05-15 13:44 UTC
Requires
- php: > 7.4
Requires (Dev)
- brainmaestro/composer-git-hooks: ^2.8
- phpunit/phpunit: ^9.1
- squizlabs/php_codesniffer: ^3.5
- dev-master
- v2.0.1
- v2.0.0
- v1.0.1
- v1.0.0
- dev-dependabot/npm_and_yarn/node-fetch-2.6.7
- dev-dependabot/npm_and_yarn/semantic-release-19.0.3
- dev-dependabot/npm_and_yarn/minimist-1.2.6
- dev-dependabot/npm_and_yarn/path-parse-1.0.7
- dev-dependabot/npm_and_yarn/glob-parent-5.1.2
- dev-dependabot/npm_and_yarn/normalize-url-5.3.1
- dev-dependabot/npm_and_yarn/hosted-git-info-2.8.9
- dev-dependabot/npm_and_yarn/handlebars-4.7.7
- dev-dependabot/npm_and_yarn/y18n-4.0.1
- dev-dependabot/npm_and_yarn/ini-1.3.8
This package is auto-updated.
Last update: 2024-08-25 17:31:48 UTC
README
使用 traits 实现的 Yii2 单表继承 (STI)
将此实现为 traits 的原因是为了防止开发者在类层次结构中放入第三方类。此实现使用了两个 traits,一个用于查询类,一个用于模型类。
查询 trait 基于为查询配置的模型类添加过滤器。它实现了 prepare()
函数。如果你在也实现了 prepare()
函数的类上使用此 trait,你必须手动调用我们的,如下所示
class MyQuery extends \yii\db\ActiveQuery { use \SamIT\Yii2\SingleTableInheritance\SingleTableInheritanceQueryTrait; public function prepare($builder) { // Your own code here $this->prepareSingleTableInheritance(); // Your own code here return parent::prepare($builder); } }
模型 trait 稍微复杂一些,但仍然与你的代码有少量交互。它使用 init()
函数,因此如果你在基础 STI 类(你使用 traits 的那个类)中重写了它,你必须调用我们的 init 函数
class Transport extends \yii\db\ActiveRecord { use \SamIT\Yii2\SingleTableInheritance\SingleTableInheritanceTrait; public function init(): void { self::initSingleTableInheritance($this); } }
通过实现一个静态函数来配置你的继承配置
class Transport extends \yii\db\ActiveRecord { use \SamIT\Yii2\SingleTableInheritance\SingleTableInheritanceTrait; private static function inheritanceConfig(): array { return [ 'column' => 'type', 'map' => [ Car::class => 'car', Bike::class => 'bike' ] ]; } }
此函数只调用一次,其结果被缓存。