relationship - Laravel 5.4 访问器与关系返回相关模型

标签 relationship accessor laravel-5.4 eloquent

我可能错过了一些非常明显的东西,但到目前为止还没有运气。我有两个相关的模型:消息和用户。我试图在检索所有消息时仅附加创建该消息的用户的“用户名”。然而,我得到了一个完全序列化的相关用户模型。我知道我可以 $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":"This is the message content","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"}, ...

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

最佳答案

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

protected $hidden = [
   'createdBy'
];

关于relationship - Laravel 5.4 访问器与关系返回相关模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457832/

相关文章:

php - Laravel 创建表和关系

C++ 访问器——我应该返回一个指向成员变量的指针还是返回实际的成员变量本身?

php - (laravel) 是否可以通过传递 id 以外的字段来使用方法注入(inject)?

laravel - 在 Laravel 5.4 中混合/版本图像?

php - Laravel Eloquent - 保存/更新相关的一对多关系数据

cassandra - cassandra中节点和分区键的关系

java - 无法使用 JSTL 对 session 中的属性使用方法访问器

javascript - typescript 索引签名访问器

javascript - laravel - 提前输入 |输入字段填充 JSON 数据而不是建议

Mysql 查询检索关系表中缺失的组合