我有一个收集,这是一个雄辩的质疑。
在一列中,我希望用另一个值替换该值。
我正在使用transform函数来完成这个任务,但是它并没有按预期工作。
下面是控制器中的查询:
$articles = KnowledgeBaseArticle::getArticlesByDepartment($department)
->get()
->transform(function ($article) {
$article->category_id = KnowledgeBaseCategory::find($article->category_id)->name;
});和来自模型getArticlesByDepartment 的查询。
public function scopeGetArticlesByDepartment($query, $department){
return $query->where('department', $department)
->select('title', 'updated_at', 'department', 'id', 'category_id')
->orderBy('title', 'asc');
}我希望返回它,以便将列category_id的所有行替换为类别名称。您可以看到,通过使用$article->category_id,我正在尝试使用KnowledgeBaseCategory模型上的find来检索它。然而,这一点都不起作用,当我死掉和转储时,我会得到一个满是空的列数组。
当我在转换中死掉并转储了$article->category_id & find查询时,它返回的是正确的类别名称,它只是没有用类别名替换category_id列。
我也尝试了地图而不是变换,得到了同样的结果。
如果这很重要,我将稍后将这些数据转换为JSON。
我哪里出问题了?
发布于 2018-08-16 11:26:15
Transform与map不同,它需要您返回集合的修改项,因为这将替换现有项。
transform(function ($article) {
$article->category_id = KnowledgeBaseCategory::find($article->category_id)->name;
return $article;
});由于对象是可变的,并且是通过引用传递的,所以只需在each()闭包中这样做就可以保存一行:
each(function ($article) {
$article->category_id = KnowledgeBaseCategory::find($article->category_id)->name;
});不过,你真的应该为类别建立一种关系。没有理由在控制器中执行这个查找逻辑。
https://stackoverflow.com/questions/51875839
复制相似问题