我正在使用Laravel Eloquent模型,并且陷入了继承问题。PHP Laravel父母继承儿童的动态静态参数
我有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
静态参数中,并由其他模型继承。因此,如果我将关系ip设置为PageModel
,然后实例化一个EventModel
,它也会得到相同的关系,这是不正确的。
我该如何使关系存储在子类中而不被其他类继承?即需要在方法被调用的类上存储$dynamicRelations
的副本,所以所有的孩子都不会共享相同的关系?
谢谢!
,如果你想要的东西,动态为什么不使用变身? – jycr753
@ jycr753请问您可以扩展一下吗?我有一个结构,我需要允许模块更改其他模块,因此称为“PageBanners”的模块可以向“Page”模型添加动态关系,而不实际更改“Page”模型中的代码。 – Giedrius
这不应该发生。在你的例子中,'EventModel'不应该获得'PageModel'的关系,它们是两个不同的实例。 – user3158900