我有一个 users
表,一个 items
表和一个数据透视表 item_user
.
我可以使用 belongsToMany
关系获得所有用户项目的列表或所有项目用户的列表 .
$item->users;
$user->items;
但是我把它当作一种“最爱”的关系 .
因此,如果我在我的网站上显示所有项目而不管用户,我想知道用户在数据透视表中哪些项目是“最喜欢的” .
到目前为止我有这个:
// Item Model
public function favorites()
{
return $this->belongsToMany('App\Models\User')->withPivot('user_id')->where('user_id', @\Auth::user()->id);
}
它工作正常,但它运行的查询是这样的:
select `users`.*, `item_user`.`item_id` as `pivot_item_id`, `item_user`.`user_id` as `pivot_user_id` from `users` inner join `item_user` on `users`.`id` = `item_user`.`user_id` where `user_id` = '1' and `item_user`.`item_id` in ('282', '10', '826', '632', '896', '604', '8', '990', '175', '979', '7', '805', '665', '263', '507', '327', '397', '208', '762', '926', '474', '389', '433', '742', '613', '689', '782', '435', '898', '518')
我不需要 users
表中的数据,我只需要数据透视数据:
SELECT user_id, item_id FROM item_user WHERE user_id = 1 AND item_id IN (1, 2, 3, 4, 5, 6, 282);
无论如何在Laravel中运行更高效的版本?
1 回答
尽管我理解你的要求..可以通过向数据透视表添加一列来解决它 .
首先在您对项目模型的透视调用中包含“收藏夹”:
注意:反之亦然,也可以定义但不测试该选项 .
然后检查它最喜欢的天气:
但在这种情况下,您还需要组织关系结构,因为用户有很多项目 . 如果您仍然有任何问题需要了解我的方法,请告诉我 .