2015-09-12 2 views
0

У меня есть стол 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?

+0

В основном, поскольку я понимаю ваше требование, если пользователь содержит какой-либо элемент, чем он будет «favourite», так что вам определенно нужно получить шарнир от пользователя или элемента. потому что pivot содержит user_id и item_id ... если у вас есть кто-то ... вы можете легко получить сводные данные, вызвав '$ user = User :: find();' than '$ user-> pivot-> item_id' .. .. –

+0

или '$ item = Item :: find (1);' then' $ item-> pivot-> user_id' –

ответ

1

Насколько я понимаю ваше требование .. его можно решить, добавив столбец в сводную таблицу.

Во-первых, включают «любимый» на сводном вызова Артикул:

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

Примечание: наоборот можно также определить, но не проверял этот вариант.

Затем проверить погоду «любимый» или нет:

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

Но в этом случае вам также необходимо организовать структурировать отношения, как пользователь имеет много элементов. Если у вас еще есть вопрос, чтобы понять мой подход, пожалуйста, дайте мне знать.

Смежные вопросы