Laravel与扩展模型的雄辩关系

时间:2017-06-20 13:32:59

标签: php laravel eloquent polymorphism

我正在开发一个扩展模型的网站,例如

class Asset extends Model {

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

class Video extends Asset {

}

我是否需要与扩展类建立相同的belongsTo雄辩关系,或者凭借拥有它的父类,Laravel会完成其余的工作吗?

此外,是否有任何文档详细说明如何构建此类关系(即控制器方面)?我在Laracasts网站(通常是优秀的)上找不到任何东西。

1 个答案:

答案 0 :(得分:2)

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

我个人在我的应用程序中使用了很多继承,并且它正如您所期望的那样工作,每个关系都使用父默认值或您声明的特定受保护变量继续工作和查询。

例如,如果声明受保护的$table = 'foo',则子项也将使用该变量执行其查询,或者您可以在子项上覆盖它以从父项查询不同的表。

就文档而言,您没有找到我认为的更多信息的原因是因为这更像是PHP和OOP问题,而不是特定于框架的问题。

如果你想声明多态关系,这是在SQL中实现多重继承的一种非常常见的方式,那么Laravel会让你回来,特别是Eloquent relationsmigration commands,如$table->morphs('asset');

希望这会对你有所帮助。