Laravel 4现在的模型

时间:2014-10-30 17:34:24

标签: php rest laravel

在Laravel 4中,我有一个链接到数据库表的模型。我们称之为Model

假设此模型有一个名为Property AProperty B的数据库列。

当我向我的模型发出请求请求时,即Model::all()Model::find($id),我不想要返回Property AProperty 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();
    }
}

1 个答案:

答案 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'))->...