laravel 5 - 获取相关模型值
Posted
技术标签:
【中文标题】laravel 5 - 获取相关模型值【英文标题】:laravel 5 - get related model values 【发布时间】: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 ...
【问题讨论】:
【参考方案1】:$projectNames = $missions->lists('projects.name')->unique();
这将返回一个 Collection 对象。
【讨论】:
如果我在 $missions = Mission::with('projects')->get(); 之后使用你的代码,我只会得到一个空集合: 集合 #488 #items: array:1 [ 0 => null ] 整个相关代码是这样的: $missions = Mission::with('projects')->get();它为我提供了许多任务的结果,相关项目位于“项目”中。而且我只想要所有任务的唯一项目名称...我尝试使用 ->pluck('projects.name')->unique();但我只得到一个空集合。与->采摘(“项目”);我得到了项目,但不是唯一的,不仅仅是项目名称。 这很可能是一些拼写错误的结果(在列名或表名中)。所以检查'projects.name'
不.. 我明白了。请参阅我的问题。不过还是谢谢你。以上是关于laravel 5 - 获取相关模型值的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 中自动删除相关行(Eloquent ORM)
如何获取与 Bllim Datatable 的另一个表相关的行的数组 - Laravel