Многие с кем и где - PullRequest
0 голосов
/ 12 мая 2019

У меня есть связь ManyToMany между моделями AdInterest и AdInterestGroup, в каждой модели есть метод ownToMany (), поэтому я могу использовать динамические свойства:

AdInterest->groups  
AdInterestGroup->interests

Я могу найти все "интересы" в одномгруппа, подобная этой:

$interests = AdInterestGroup::find(1)->interests->pluck('foo');

Мне нужен объединенный дедуплицированный массив связанного поля 'foo' из нескольких групп.
Я думаю, что могу дедуплицировать с помощью ->unique(), но сначала, как и следовало ожидать, это:

AdInterestGroup::whereIn('id',[1,2])->interests->get();

throws:

Свойство [интересов] не существует в экземпляре Eloquent Builder.

Похоже, совет: использовать нетерпеливую загрузку через с () :

AdInterestGroup::with('interests')->whereIn('id',[1,2])->get();

Во-первых, как и следовало ожидать, это дает мнехотя массив из двух значений (по одному для каждого идентификатора).

Кроме того, если я попытаюсь и pluck('foo') снова, он будет искать в неверной таблице базы данных: из таблицы AdInterestGroup , а не из отношения ( AdInterest ).

Есть ли хороший, аккуратный метод / конвейер сбора, который я могу использовать для объединения данных и получения доступа к полям отношений?

1 Ответ

1 голос
/ 12 мая 2019

Использование pluck() и flatten():

$groups = AdInterestGroup::with('interests')->whereIn('id', [1, 2])->get();

$interests = $groups->pluck('interests')->flatten();

$foos = $interests->pluck('foo')->unique();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...