tschallacka / storm-inherit-relations
WinterCMS Storm 库数据库模型的简单依赖,允许继承父模型中定义的关系
This package is auto-updated.
Last update: 2024-09-19 23:01:42 UTC
README
此插件为基于WinterCMS Storm 库的数据库模型提供了一种行为。
默认情况下,当你扩展基模型时,你将丢失父模型中定义的所有关系。在某些情况下,你不想丢失对这些关系的访问权限,而是想改进它,继续对核心概念进行工作,在继承树向上添加功能时,所需的对象会有所不同。
例如(如果你只想知道如何使用它,请跳过)
在 Magento 中,你有 AttributeValues。每个属性值都有一个与 AttributeName 的关系。
这将是一个基模型,具有 belongsTo 关系,我们将其称为 AttributeValue
。
然后,一个值可以属于不同类型的模型。例如 Product
、Quote
、Customer
等...
属于一种类型的值不能属于另一种类型,我们将其称为 OwnedBy[Type]
。
这将是一个扩展 AttributeValue
的 Model
,向其中添加对“所有者类型”的 $belongsTo
关系
然后有多个不同的数据类型,每个类型都存储在自己的表中(不要问为什么,Magento 选择这种方法)
因此,整数值有自己的表,datetime 值有自己的表,小数有自己的表,等等...
这些值类型将扩展 OwnedBy[Type]
,只更改存储值的表名。
我们将称之为 OwnedBy[Type][ValueType]
。如果你做数学运算,你可以看到这会产生大量的文件来生成和修改。
替代方案
这是一个在整个层中从父关系继承的理想用例。
当然,你可以修改构造函数以从父类中读取数据,并将其添加到当前类中。
这意味着你需要复制粘贴这段代码大约 25 次,这不会很 DRY
我的解决方案
我是一个程序员,我很懒,不喜欢一遍又一遍地复制粘贴相同的内容。我建议有一个可以注入到你认为需要它的类中的实现。
例如,最基础的类 AttributeValue
,这确保了所有子类都有它,而且不需要一遍又一遍地复制粘贴。
使用关系继承。
安装
composer require tschallacka/storm-inherit-relations ^1.0
用法
在你想获取父类中定义的关系的模型中,将此添加到你的 $implements
数组中
public $implement = [\Tschallacka\StormInheritRelations\Behavior\InheritRelations];
模型示例
<?php namespace Tschallacka\Example\Attribute; use Winter\Storm\Database\Model; use Tschallacka\StormInheritRelations\Behavior\InheritRelations; class AttributeValue extends Model { public $primaryKey = 'value_id'; public $implement = [ InheritRelations::class ]; public $belongsTo = [ 'attribute' => AttributeName::class, ]; }