У меня есть связь 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 ).
Есть ли хороший, аккуратный метод / конвейер сбора, который я могу использовать для объединения данных и получения доступа к полям отношений?