2016-02-15 5 views
3

У меня есть две модели, миссия и проекты. В обоих моделях есть функция belongsToMany (п: т) Когда я выбираю все миссии, я буду готов загружать все проекты тоже:laravel 5 - получить связанные значения модели

$missions = Mission::with('projects')->get(); 

Теперь я хочу, чтобы все соответствующие проекты от каждой миссии а как отдельный результат.

Я имею в виду, если у меня есть 3 миссии, и все миссии принадлежат к ОДНОМ проекту, я хочу это имя проекта в массиве.

Но если миссия 1 принадлежит к проекту 1 и миссия 2 принадлежит к проекту 2, я хочу получить массив имен проекта 1 и 2.

Но как я могу это сделать? Я стараюсь это, но не везет:

$array = $missions->toArray(); 
$projectNames = array_pluck($array, 'projects.name'); 

Также я стараюсь это:

$missionIDs = $missions->pluck('id'); 

дать мне все корочки миссий .. но я стараюсь, чтобы получить соответствующие названия проекта (belongsToMany), так Я тоже пробую это:

$projects = $missions->pluck('projects')->unique(); 

дает мне проекты .. но не уникальные .. это странно. И это не работает, я получаю пустую коллекцию, если я пытаюсь выбрать только projectnames:

$projectNames = $missions->pluck('projects.names')->unique()); 

Я думаю, что проблема является п: м соотношения между проектом и миссией, но я не уверен.

EDIT Наконец я получил его:

$projectNames = $missions->pluck('projects.*.name')->unique(); 

Хитрость заключается в том, чтобы использовать *, потому что это belongsToMany ...

ответ

0
$projectNames = $missions->lists('projects.name')->unique(); 

Это возвращает объект Collection.

+0

Я получаю пустую коллекцию, если я использую ваш код после моих $ mission = Mission :: with ('projects') -> get(); : Коллекция {# 488 #items: массив: 1 [ 0 => нулевой ] } – goldlife

+0

Можно ли вставить весь код? –

+0

Весь соответствующий код: $ mission = Mission :: with ('projects') -> get(); Это дает мне результат во многих миссиях, связанных с проектами в «проектах». И я хочу только уникальные имена проектов всех миссий ... Я пытаюсь это с помощью -> pluck ('projects.name') -> unique(); но я получаю только пустую коллекцию. с -> pluck ('projects'); Я получаю проекты, но не уникальные, а не только имена проектов. – goldlife

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