我正在使用Laravel Eloquent模型并且已经陷入了遗产问题。
我有BaseModel
类,其中包含protected static $dynamicRelations = [];
参数,以及一些可以使用它的方法。
然后我有多个其他类,扩展BaseModel
,对于这个例子,我们说PageModel
和EventModel
。
如果我在页面模型上创建动态关系,就像PageModel::setDynamicRelation
那样,它将它放在静态变量中:
public static function setDynamicRelation($key, $callback)
{
static::$dynamicRelations[$key] = $callback;
}
这样,我可以为模型添加动态关系。因此,如果我执行PageModel::setDynamicRelation('banners', ...)
,那么在PageModel
的实例上,我可以调用PageModel->banners
来检索关系值。
问题是,关系保存在BaseModel
静态参数中,并由其他模型继承。因此,如果我在PageModel
上设置了relationsip,然后实例化EventModel
,那么它也会获得相同的关系,这是不正确的。
如何才能使关系存储在子类中并且不被其他类继承?即需要在调用方法的类上存储$dynamicRelations
的副本,这样所有的孩子都不会共享相同的关系吗?
谢谢!
答案 0 :(得分:1)
你有测试显示这个吗?
所以你说你不想要use Google as an Oauth identity provider
子类中定义的父类的静态属性不会传播到扩展父模型的其他子实例。例如,Illuminate\Database\Eloquent\Model
具有protected static $globalScopes = [];
属性,但当您向扩展Model
的任何模型添加全局范围时,它会将此推送到此数组中,就像您使用$dynamicRelationships
一样数组,但这些实例不会反映在扩展Model
的类中。