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

How to always append attributes to Laravel Eloquent model?

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

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

 protected $appends = ['user'];

Update: If the attribute exists in the database you can just use protected $with= ['user']; according to David Barker's comment below

然后创建一个访问器为:

public function getUserAttribute()
{

    return $this->user();

}

这样一来,您将始终拥有每个 post 可用的用户对象:

{
    id: 1
    title: "My Post Title"
    body: "Some text"
    created_at: "2-28-2016"
    user:{
            id: 1,
            name: "john smith",
            email: "example@mail.com"
         }
}

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

它接受第一个字符并转换为大写,即 Id 和下划线后的字母转换为大写,即 Hash.

Laravel 本身添加 getAttribute 组合在一起它给出 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!";
    }