2 回答
TA贡献2051条经验 获得超10个赞
此行为是由于性能。当你$post->user第一次调用时,Laravel 会从数据库中读取并保存$post->relation[]以备下次使用。所以下次 Laravel 可以从数组中读取它并防止再次执行查询(如果你在多个地方使用它会很有用)。
另外,用户也是一个属性,当你调用或时,Laravel 合并 $attributes并$relations排列在一起$model->toJson()$model->toArray()
Laravel 的模型源代码:
public function toArray()
{
return array_merge($this->attributesToArray(), $this->relationsToArray());
}
public function jsonSerialize()
{
return $this->toArray();
}
TA贡献1804条经验 获得超2个赞
您的第一种方法很好,您只需要将“用户”添加到 $hidden 数组中
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $table = 'posts';
protected $appends = ['author'];
protected $fillable = [
'title',
'description'
];
protected $hidden = [
'user_id',
'created_at',
'updated_at',
'user', // <-- add 'user' here
];
public function user()
{
return $this->belongsTo('App\User', 'user_id');
}
public function getAuthorAttribute()
{
return $this->user->username;
}
}
您得到的模型将是:
{
"id": 2,
"title": "Amazing Post",
"description": "Nice post",
"author": "FooBar"
}
- 2 回答
- 0 关注
- 273 浏览
添加回答
举报