Rob*_*Rob 1 php laravel eloquent laravel-5
我有一张users桌子、一张items桌子和一个数据透视表item_user。
我可以使用belongsToMany关系很容易地获得所有用户项目的列表或所有用户项目的列表。
$item->users;
$user->items;
Run Code Online (Sandbox Code Playgroud)
但是,我将其用作一种“收藏夹”关系。
因此,如果我不考虑用户而在我的网站上显示所有项目,我想知道用户在数据透视表中将哪些项目作为“收藏夹”。
到目前为止,我有这个:
// Item Model
public function favorites()
{
return $this->belongsToMany('App\Models\User')->withPivot('user_id')->where('user_id', @\Auth::user()->id);
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但它运行的查询是这样的:
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')
Run Code Online (Sandbox Code Playgroud)
我不需要users表中的数据,我只需要数据透视表:
SELECT user_id, item_id FROM item_user WHERE user_id = 1 AND item_id IN (1, 2, 3, 4, 5, 6, 282);
Run Code Online (Sandbox Code Playgroud)
有没有办法在 Laravel 中运行更高效的版本?
据我了解您的要求..可以通过向数据透视表添加一列来解决。
首先在您对项目模型的枢轴调用中包含“收藏夹”:
return $this->belongsToMany('User', 'user_items')
->withPivot('favorite');
Run Code Online (Sandbox Code Playgroud)
注意:反之亦然也可以定义但未测试该选项。
然后检查天气它“最喜欢”与否:
$item = User::with('items')->get()->find(1)->items->find(2)->pivot->favorite;
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下,您还需要组织您的关系结构,因为用户有很多项目。如果您对理解我的方法仍有任何疑问,请告诉我。
| 归档时间: |
|
| 查看次数: |
9765 次 |
| 最近记录: |