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

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

答案 1

经过一些搜索,我发现您只需要将所需的属性添加到Eloquent Model中的数组中:$appends

 protected $appends = ['user'];

更新:如果数据库中存在该属性,则可以根据David Barker在下面的评论使用protected $with= ['user'];

然后创建一个访问器作为:

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"
         }
}

答案 2

我发现这个概念很有趣,我学习和分享东西。在这个例子中,我追加id_hash变量,然后通过这个逻辑将其转换为方法。

它采用第一个字符并转换为大写字母,即 和下划线后的字母到大写,即 .IdHash

Laravel本身添加了get属性,以将其组合在一起,从而给出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);
    }
}

为了简化事情,追加变量会像这样

protected $appends = ['id_hash','test_var'];

该方法将在模型中定义,如下所示

 public function getTestVarAttribute(){
        return "Hello world!";
    }

推荐