【发布时间】:2018-08-16 19:41:43
【问题描述】:
我有一个雄辩的查询集合。
有一列我想用另一个值替换该值。
我正在使用 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 并在转换中查找查询时,它返回正确的类别名称,只是没有用类别名称替换 category_id 列。
我也尝试了 map 而不是 transform 并得到了相同的结果。
如果重要,我稍后会将此数据转换为 JSON。
我哪里错了?
【问题讨论】:
-
为什么不为类别设置关系,而不是在控制器中的 category_id 上进行查找?
-
因为我试图让这部分工作在我重构为更清晰的代码之前。
标签: php laravel laravel-5 eloquent