У меня есть стол users
, стол items
и сводная таблица item_user
.Как получить сводные данные, специфичные для пользователя в Laravel?
Я могу получить список всех элементов пользователей или список всех пользователей, которые достаточно легки, используя отношения 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?
В основном, поскольку я понимаю ваше требование, если пользователь содержит какой-либо элемент, чем он будет «favourite», так что вам определенно нужно получить шарнир от пользователя или элемента. потому что pivot содержит user_id и item_id ... если у вас есть кто-то ... вы можете легко получить сводные данные, вызвав '$ user = User :: find();' than '$ user-> pivot-> item_id' .. .. –
или '$ item = Item :: find (1);' then' $ item-> pivot-> user_id' –