【问题标题】:Laravel 5.4 accessor with relationship returns related model具有关系的 Laravel 5.4 访问器返回相关模型
【发布时间】:2017-07-16 10:02:31
【问题描述】:

我可能错过了一些非常明显的东西,但到目前为止还没有运气。我有两个相关的模型,消息和用户。我试图在检索所有消息时仅附加创建消息的用户的“用户名”。但是,我得到了一个完全序列化的相关用户模型。我知道我可以 $hidden 在我的用户模型中,但想避免这种情况。

在我的消息模型中,我创建了一个关系

public function createdBy()
{
    return $this->belongsTo('App\User', 'created_by');
}

然后我添加了

protected $appends = ['username'];

还有一个自定义属性

public function getUsernameAttribute($value)
{
    $username = null;
    if ($this->createdBy){
        $username = $this->createdBy->username;
    }
    return $username;
}

当我通过其他关系接收消息时,例如

return $channel->messages()->orderBy('id','desc')->get();

我最终得到以下回复:

[{"id":97,"to_id":"12345","message":"这是消息内容","created_at":"2017-02-25 08:58:22","created_by ":{"id":1,"email":"REDACTED","name":"REDACTED","username":"myusername","created_at":"2016-09-26 16:00:00", "created_by":null,"updated_at":"2017-02-20 00:33:06","updated_by":null},"updated_at":"2017-02-25 08:58:22","updated_by" :null,"deleted_at":null,"username":"myusername"}, ...

我做错了什么,还是有更好的方法来完成我想做的事情?

【问题讨论】:

    标签: relationship accessor laravel-5.4 laravel-eloquent


    【解决方案1】:

    我没有意识到我能够隐藏原始模型中的关系。我最终在 Messages 模型中隐藏了 createdBy 关系。

    protected $hidden = [
       'createdBy'
    ];
    

    【讨论】:

    • 很棒的答案,:-)
    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 2021-08-22
    • 1970-01-01
    • 2020-11-15
    • 2015-04-18
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多