我想知道如何总是将一些数据附加到Eloquent模型而不需要它,例如在获取Posts表单数据库时我想将每个用户的用户信息附加为:
{
id: 1
title: "My Post Title"
body: "Some text"
created_at: "2-28-2016"
user:{
id: 1,
name: "john smith",
email: "example@mail.com"
}
}
答案 0 :(得分:13)
经过一些搜索,我发现你只需要在你的Eloquent模型中将你想要的属性添加到$appends
数组中:
protected $appends = ['user'];
更新:如果数据库中存在该属性,则可以根据下面的 David Barker's评论使用
protected $with= ['user'];
然后创建一个Accessor:
public function getUserAttribute()
{
return $this->user();
}
通过这种方式,您始终可以将每个帖子的用户对象视为:
{
id: 1
title: "My Post Title"
body: "Some text"
created_at: "2-28-2016"
user:{
id: 1,
name: "john smith",
email: "example@mail.com"
}
}
答案 1 :(得分:0)
我发现这个概念很有趣,我学习并分享了一些东西。 在此示例中,我添加了id_hash变量,然后将其通过此逻辑转换为方法,该变量将使用第一个字符并转换为大写字母(即,id和下划线后转换为大写字母,即哈希)。
Laravel本身添加了 get 和 Attribute 以将所有元素组合在一起,从而得到getIdHashAttribute()
class ProductDetail extends Model
{
protected $fillable = ['product_id','attributes','discount','stock','price','images'];
protected $appends = ['id_hash'];
public function productInfo()
{
return $this->hasOne('App\Product','id','product_id');
}
public function getIdHashAttribute(){
return Crypt::encrypt($this->product_id);
}
}
为简化起见,append变量就是这样
protected $appends = ['id_hash','test_var'];
方法将在像这样的模型中定义
public function getTestVarAttribute(){
return "Hello world!";
}