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 - 获取相关模型值的主要内容,如果未能解决你的问题,请参考以下文章

laraver框架学习------工厂模型填充测试数据

Laravel 中自动删除相关行(Eloquent ORM)

如何获取与 Bllim Datatable 的另一个表相关的行的数组 - Laravel

Laravel 的参数获取

LARAVEL 5.3,获取用户名和角色名(使用 Laravel 模型关系)

我想自学laraver,请诸位前辈给一些建议,谢谢