2014-10-30 108 views
0

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

说,这种模式有一个名为Property AProperty B的数据库列。

当我做get请求调用我的模型,即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

Model使用一个accessor。要连接A和B,例如:

public function getPropertyCAttribute() 
{ 
    return $this->attributes['property_a'] . ' ' . $this->attributes['property_b']; 
} 

然后你就可以访问​​。

如果您希望属性被自动包含模型的结果数组中(例如,如果你发送的Model::all()Model::get()作为JSON的结果,例如),添加一个$appends声明模型的顶部:

protected $appends = array('PropertyC'); 

如果函数是什么,可以在数据库中进行(如串联,总和,等等),你还可以添加一个DB::raw命令来查询,如:

Model::select(*, DB::raw('CONCAT(PropertyA, " ", PropertyA) AS PropertyC'))->... 
+0

当我调用'Model :: all()'时应该出现'propertyC'? – iamyojimbo 2014-10-30 18:17:43

+0

是的,一旦你遍历结果访问单个行。所以,如果你调用'$ model = Model :: all()',那么你可以在'foreach($ model ad $ m){var_dump($ m-> propertyC)};'内访问'propertyC'。另外,请确保'$ this-> attributes ['']'中的值是数据库中的实际字段名称;它是区分大小写的,因此,如果您的列被称为'property_a',存取应引用'$这个 - >属性[“property_a”];' – damiani 2014-10-30 18:33:29

+0

说我有这个功能:'公共功能getFooAttribute(){ 回报 “goooglelelgoo”; '那么我应该总是有一个名为Foo的财产返回? – iamyojimbo 2014-10-30 18:34:15