我有两个模型,任务和项目。 在这两个模型中都有一个belongsToMany函数(n:m) 当我选择所有任务时,我也会急切地加载所有项目:
$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');
告诉我所有ID的任务......但我尝试获取相关的项目名称(belongsToMany),所以我也尝试了这个:
$projects = $missions->pluck('projects')->unique();
给了我项目..但不是唯一的...它很奇怪。 这不起作用,如果我尝试只选择项目名称,我会得到一个空集合:
$projectNames = $missions->pluck('projects.names')->unique());
我认为问题是项目和任务之间的n:m关系,但我不确定。
编辑最后我明白了:
$projectNames = $missions->pluck('projects.*.name')->unique();
诀窍是使用*因为它是belongsToMany ...
答案 0 :(得分:0)
$projectNames = $missions->lists('projects.name')->unique();
这将返回一个Collection对象。