【问题标题】:Laravel - Get belongsTo relationship without id using EloquentLaravel - 使用 Eloquent 获取没有 id 的 belongsTo 关系
【发布时间】:2021-04-05 04:42:36
【问题描述】:

我正在使用laravel 7.30,我有一个帖子模型链接到具有 belongsTo 关系的用户模型,我想检索所有带有用户属性的帖子,该用户属性仅包含用户名称以用于 api 目的。

到目前为止我已经尝试过。

public function index()
{
    return Post::with('user:id,name')->get();
}

但是这段代码的结果是一个嵌套对象“用户”,它在每个帖子上都有 2 个字段 id 和名称,我只想要一个包含名为 user 的帖子字段的字段,它只有名称,而不是 api 的嵌套对象目的。

我已经使用数据库查询生成器完成了,但我正在寻找一种使用 Eloquent 的方法

提前致谢

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    您可以将此添加到您的 Post 模型中:

    protected $appends = [
        "author_name"
    ];
    
    public function getAuthorNameAttribute()
    {
        return $this->user->name;
    }
    

    这将确保每次调用Post 对象时都将用户名附加到它。

    然后从您的控制器中,您可以轻松地做到这一点:

    public function index()
    {
        return Post::get();
    }
    

    【讨论】:

    • 正是我想要的,但仍然包含用户对象,所以我不得不使用帖子模型上的隐藏数组来隐藏它,谢谢
    • 我很高兴能为 Zakaria Benali 提供帮助。请点赞我的回答?
    • 完成! , 这种方法适用于嵌套关系吗?例如用 cmets 发帖,你可以用相同的方法获得用户名的评论
    • 是的,它也适用于嵌套关系,您只需在 Comment 模型上添加相同的 getAuthorNameAttribute()。您还没有投票...请使用指向答案的箭头进行投票
    • 我确实投了赞成票,但似乎我必须达到 15 个声望才能在帖子上显示,我收到这条消息“感谢您的反馈!声望低于 15 的人的投票已记录,但不要更改公开显示的帖子分数。”
    猜你喜欢
    • 2020-12-24
    • 2013-12-14
    • 2018-08-06
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 2019-02-15
    • 2020-11-26
    • 2014-10-29
    相关资源
    最近更新 更多