雄辩的关系:只返回一个值而不是整行

Posted

技术标签:

【中文标题】雄辩的关系:只返回一个值而不是整行【英文标题】:Eloquent relationship: return just one value not entire row 【发布时间】:2020-09-28 13:43:03 【问题描述】:

在我的 laravel 项目中,我建立了一个评论部分,并希望在他们的评论旁边显示评论的人的姓名。

最初我只有用户 ID,所以我建立了一个关系 (hasOne) 将 comment 表 (comment & authorID) 链接到 users 表 (id (authorID)和用户名)

Comment.php(模型)是:

[..]
        public function author()
        
            return $this->hasOne(User::class, 'id', 'Author');
        

User.php 模型是:

<?php

[..]
        public function author()
        
            return $this->hasMany(Comment::class, 'Author', 'id');
        

在控制器中,我通过以下方式获取数据:

$comments= Comments::where('LinkID', (string) $id)->with('author')->orderBy('updated_at', 'ASC')->get()->all();

这行得通,但它给了我每条评论的用户的整行。出于安全原因,我只想返回行(用户名)的“名称”字段,而不返回其余部分(电子邮件、时间戳等)。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

请尝试:

$comments= Comments::where('LinkID', (string) $id)->with(['author' => function ($q) 
                $q = $q->select('name', 'id');
                return $q;

])->orderBy('updated_at', 'ASC')->get()->all();

或其他方式:

$comments= Comments::where('LinkID', (string) $id)->with('author:id,name')->orderBy('updated_at', 'ASC')->get()->all();

查看预加载(部分预加载特定列)

https://laravel.com/docs/7.x/eloquent-relationships#eager-loading

请注意,包含“id”是必要的,因为它负责关系

【讨论】:

以上是关于雄辩的关系:只返回一个值而不是整行的主要内容,如果未能解决你的问题,请参考以下文章

雄辩的查询以返回按二级关系排序的项目

Laravel 和雄辩的返回结果来自多对多关系

XQuery:返回元素的值而不是元素本身

为啥 laravel 雄辩的关系返回空数组

Spring MongoDB 在结果中只获取值而不是 key:value

laravel 雄辩的关系一对多返回 null