我正在尝试以下操作:
我有两个模型:pub和user,由一个名为“recommended_pubs”的中间表关联,用户在其中将某个pub设置为“recommended”。
关系如下:
Pub:
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function recommendedUsers()
{
return $this->belongsToMany(User::class, 'recommended_pubs');
}
用户:
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function recommendedPubs()
{
return $this->belongsToMany(Pub::class, 'recommended_pubs');
}
推荐的pubs表包含以下字段:
ID用户ID酒吧ID
我想从其他函数($pubs)接收一组特定的pub,然后按用户推荐pub的次数排序。
我尝试了以下方法,结果成功了:
$pubs = Pub::leftJoin('recommended_pubs', 'recommended_pubs.pub_id', '=', 'pubs.id')
->leftJoin('users', 'recommended_pubs.pub_id', '=', 'users.id')
->groupBy('pubs.id')
->orderBy('users_count','desc')
->selectRaw('pubs.*, count(users.id) as users_count')
->get()
;
有什么想法吗?我试着在foreach中执行,但是修改leftjoins时遇到了一些问题…
谢谢!!