仅选择具有关系的行时遇到问题。我尝试了许多不同的解决方案。我有2个表Movies
和Movie_links
。我只想获取具有链接的电影。
型号:
Movie.php
public function links()
{
return $this->hasMany('App\Movie_link', 'movie', 'id');
}
Movie_link.php
public function movie()
{
return $this->belongsTo('App\Movie', 'movie','id')->first();
}
控制器:
我使用此代码来获取所有具有链接的电影,并且此代码有效,但我想要更有效的方法:
Movie::latest()
->select('id', 'title', 'poster', 'rating')
->whereIn('id', Movie_link::select('movie')->distinct()->pluck('movie'))
->wherenotnull('poster')
->limit(14)
->get()
但是我想要更高的性能,所以我想使用以下代码:
Movie::has('links')
->select('id', 'title', 'poster', 'rating')
->withCount('links')
->orderByDesc('id')
->limit(14)
->get()
但是使用此代码请求需要15秒!如果我将DESC
更改为ASC
,那就好。
答案 0 :(得分:0)
如何使用联接:
Movie::query()->from('Movies as M')
->join('Movie_links as L', 'M.id', '=', 'L.movie')
->select('M.id', 'M.title', 'M.rating', 'M.poster', DB::raw('COUNT(L.id) as C'))
->groupBy('M.id')
->having('C', '>', 0)
->orderByDesc('M.id')
->limit(14)
->get();