【发布时间】:2016-05-26 06:34:28
【问题描述】:
我有两个模型,使命和项目。 在这两个模型中都有一个 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 ...
【问题讨论】: