首页 文章

如何在Laravel中获取特定于用户的数据透视数据?

提问于
浏览
1

我有一个 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 回答

  • 4

    尽管我理解你的要求..可以通过向数据透视表添加一列来解决它 .

    首先在您对项目模型的透视调用中包含“收藏夹”:

    return $this->belongsToMany('User', 'user_items')
                 ->withPivot('favorite');
    

    注意:反之亦然,也可以定义但不测试该选项 .

    然后检查它最喜欢的天气:

    $item = User::with('items')->get()->find(1)->items->find(2)->pivot->favorite;
    

    但在这种情况下,您还需要组织关系结构,因为用户有很多项目 . 如果您仍然有任何问题需要了解我的方法,请告诉我 .

相关问题