2017-06-20 35 views
5

我正在扩展模型的网站上工作,例如。Laravel与扩展模型的雄辩关系

class Asset extends Model { 

    public function project() { 
    return $this->belongsTo(Project::class); 
    } 
} 

class Video extends Asset { 

} 

我需要建立与扩展类相同belongsTo雄辩的关系,或通过具有它的父类的,会Laravel做休息?

此外,是否有任何文档详细介绍如何构建这种关系(即在控制器方面)?我在Laracasts的网站上找不到任何东西。

+1

如果您不重写项目,那么它将按原样从父项继承。 – apokryfos

+0

看看这篇文章:https://stackoverflow.com/questions/4961906/when-to-implement-and-extend –

回答

2

您不需要实例化扩展方法两次,除非您想用不同的行为覆盖它。

我个人在我的应用程序中使用了很多继承,它的工作方式与您所期望的一样,每个关系都使用父级默认值或您声明的特定受保护变量继续工作和查询。例如,如果声明受保护的$table = 'foo',那么子项也将接受该变量以执行其查询,或者您可以在子项上覆盖该子项以从父项查询不同的表。

在文档方面,你没有找到很多信息的原因我认为这是因为这是PHP和OOP问题,而不是框架特定的问题。

如果你想声明多态性关系,这是实现您的SQL多重继承一个非常常见的方式,Laravel有你的背部,具体Eloquent relationsmigration commands,像$table->morphs('asset');

希望这有助于你。