Laravel与扩展模型的雄辩关系

Chu*_*utt 5 php polymorphism laravel eloquent

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

class Asset extends Model {

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

class Video extends Asset {

}
Run Code Online (Sandbox Code Playgroud)

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

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

Asu*_*sur 2

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

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

例如,如果您声明 protected $table = 'foo',子级也将采用该变量来执行其查询,或者您可以在子级上覆盖它以查询与父级不同的表。

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

如果您想声明多态关系(这是在 SQL 中实现多重继承的一种非常常见的方法),Laravel 可以为您提供支持,具有特定的Eloquent 关系迁移命令,例如$table->morphs('asset');.

希望这对您有帮助。