PHP Laravel Parents从子

时间:2016-11-28 17:20:39

标签: php laravel oop inheritance

我正在使用Laravel Eloquent模型并且已经陷入了遗产问题。

我有BaseModel类,其中包含protected static $dynamicRelations = [];参数,以及一些可以使用它的方法。

然后我有多个其他类,扩展BaseModel,对于这个例子,我们说PageModelEventModel

如果我在页面模型上创建动态关系,就像PageModel::setDynamicRelation那样,它将它放在静态变量中:

    public static function setDynamicRelation($key, $callback)
    {
        static::$dynamicRelations[$key] = $callback;
    }

这样,我可以为模型添加动态关系。因此,如果我执行PageModel::setDynamicRelation('banners', ...),那么在PageModel的实例上,我可以调用PageModel->banners来检索关系值。

问题是,关系保存在BaseModel静态参数中,并由其他模型继承。因此,如果我在PageModel上设置了relationsip,然后实例化EventModel,那么它也会获得相同的关系,这是不正确的。

如何才能使关系存储在子类中并且不被其他类继承?即需要在调用方法的类上存储$dynamicRelations的副本,这样所有的孩子都不会共享相同的关系吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

你有测试显示这个吗?

所以你说你不想要use Google as an Oauth identity provider

子类中定义的父类的静态属性不会传播到扩展父模型的其他子实例。例如,Illuminate\Database\Eloquent\Model具有protected static $globalScopes = [];属性,但当您向扩展Model的任何模型添加全局范围时,它会将此推送到此数组中,就像您使用$dynamicRelationships一样数组,但这些实例不会反映在扩展Model的类中。

Late Static Bindings