Laravel 将连接关系定义为模型关系

Laravel define join relation as a model relation

我有一个场景:

Movie::join('stream_urls', function ($join) {
        $join->on('stream_urls.movie', '=', 'movies.filename');
});

我想将其定义为模型中的函数,因为我希望连接的数据作为 JSON 数组返回。所以我想要这样的东西;

$movie = Movie::where('is_active', 1)
        ->with('urls')
        ->orderBy('movies.id', 'DESC')->get();

如何在模型中定义这个'urls()'函数?

您在 Movie 模型中定义关系。

这看起来像 one to many relationship

如果您坚持命名约定,则只需指定 class

hasMany(Child::class);

但是由于您使用了 stream_url.moviemovie.filename 列,因此您需要将它们指定为可选参数。

hasMany(Child::class, 'foreign_key', 'local_key');

我假设映射 table stream_urls 的模型称为 StreamUrl

class Movie extends Model
{
    public function urls()
    {
        return $this->hasMany(StreamUrl::class, 'movie', 'filename');
    }
}

现在您可以使用 Movie::with('urls').

预先加载此关系