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.movie
和 movie.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')
.
预先加载此关系
我有一个场景:
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.movie
和 movie.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')
.