如何始终将属性附加到Laravel Eloquent模型?

时间:2016-02-29 14:01:24

标签: php api laravel laravel-5 restful-architecture

我想知道如何总是将一些数据附加到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"
         }
}

2 个答案:

答案 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!";
    }