我正在尝试以下方法:
我有两个模型:Pub和User,由一个名为'recommended_pubs'的中间表相关联,用户将某个pub设置为“recommended”。
关系是NxN如下:
公布
/**
* @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');
}
recommended_pubs表包含以下字段: ID | USER_ID |的pub_id
我想从其他功能($ pubs)收到一些某些酒吧,然后按照用户推荐酒吧的次数订购它们。
我尝试了以下内容并且有效:
$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时遇到了一些问题...
非常感谢!!
答案 0 :(得分:0)
使用withCount()
:
Pub::withCount('recommendedUsers')
->orderBy('recommended_users_count', 'desc')
->get();