在Laravel 4中,我有一个链接到数据库表的模型。我们称之为Model
。
假设此模型有一个名为Property A
和Property B
的数据库列。
当我向我的模型发出请求请求时,即Model::all()
或Model::find($id)
,我不想要返回Property A
或Property B
,但是某种两个函数,在前端看来是某种只读字段,即Property C
。
我是否需要在此处使用演示者库,还是通过覆盖Laravel 4中的模型函数?
我的关键是,当我致电Model::all()
修改
根据我的理解,这应该返回一个名为foo
的属性,其值为"foo"
:
模型
class DiscountLink extends Eloquent {
protected $table = 'discountLinks';
protected $hidden = array('tag');
protected $fillable = array('name', 'currency', 'language', 'price', 'instalments', 'expires', 'active', 'foo');
public function getFooAttribute()
{
return "foo";
}
}
控制器
class DiscountLinkController extends \BaseController {
public function index()
{
return DiscountLink::all();
}
}
答案 0 :(得分:1)
在Model
中使用accessor。要连接A和B,例如:
public function getPropertyCAttribute()
{
return $this->attributes['property_a'] . ' ' . $this->attributes['property_b'];
}
然后您可以访问Model::find($id)->propertyC
。
如果您希望该属性自动包含在模型的结果数组中(例如,如果您要将Model::all()
或Model::get()
的结果作为JSON发送,例如) ,在模型的顶部添加$appends
声明:
protected $appends = array('PropertyC');
如果函数是可以在数据库中完成的(如连接,求和等),您还可以在查询中添加DB::raw
命令,如:
Model::select(*, DB::raw('CONCAT(PropertyA, " ", PropertyA) AS PropertyC'))->...