首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel没有按照收集的目的工作

Laravel没有按照收集的目的工作
EN

Stack Overflow用户
提问于 2018-08-16 11:21:30
回答 1查看 2.6K关注 0票数 1

我有一个收集,这是一个雄辩的质疑。

一列中,我希望用另一个值替换该值。

我正在使用transform函数来完成这个任务,但是它并没有按预期工作。

下面是控制器中的查询

代码语言:javascript
复制
    $articles = KnowledgeBaseArticle::getArticlesByDepartment($department)
        ->get()
        ->transform(function ($article) {
          $article->category_id = KnowledgeBaseCategory::find($article->category_id)->name;
        });

和来自模型getArticlesByDepartment 查询。

代码语言:javascript
复制
    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。

我哪里出问题了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-16 11:26:15

Transform与map不同,它需要您返回集合的修改项,因为这将替换现有项。

代码语言:javascript
复制
transform(function ($article) {
    $article->category_id = KnowledgeBaseCategory::find($article->category_id)->name;
    return $article;
});

由于对象是可变的,并且是通过引用传递的,所以只需在each()闭包中这样做就可以保存一行:

代码语言:javascript
复制
each(function ($article) {
    $article->category_id = KnowledgeBaseCategory::find($article->category_id)->name;
});

不过,你真的应该为类别建立一种关系。没有理由在控制器中执行这个查找逻辑。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51875839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档