如何始终将属性附加到 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 本身添加 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);
}
}
为了简化附加变量会像这样
protected $appends = ['id_hash','test_var'];
该方法将在模型中这样定义
public function getTestVarAttribute(){
return "Hello world!";
}
我想知道如何始终将一些数据附加到 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 本身添加 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);
}
}
为了简化附加变量会像这样
protected $appends = ['id_hash','test_var'];
该方法将在模型中这样定义
public function getTestVarAttribute(){
return "Hello world!";
}