我希望我的返回对象看起来像这样:
{
id: "1",
category_name: "Update Category56945",
menutype_name: 'some name',
menutype: {
name: 'some name',
...
}
}
基本上我想要一个属性(menutype.name)显示在顶层。但无法用这个做到这一点:
$cats = Category::with(['menutype', 'menutype.name as menutype_name'])->get();
我收到错误"调用未定义的方法Illuminate \ Database \ Query \ Builder :: name()"。
以下是我的模型设置(code snippet):
<?php
class MenuType extends Eloquent {
protected $fillable = array('name');
function category() {
return $this->hasMany('Category');
}
}
class Category extends Eloquent {
protected $fillable = array('name','maxitems', 'menutype_id');
function menutype() {
return $this->belongsTo('MenuType');
}
}
/*
* When run this, i want my object looks like this:
*
{
id: "1",
category_name: "Update Category56945",
menutype_name: 'some name',
menutype: {
....
}
}
*/
$cats = Category::with(['menutype', 'menutype.name as menutype_name'])->get();
// get error
// Call to undefined method Illuminate\Database\Query\Builder::name()
答案 0 :(得分:2)
在您的类别模型中添加菜单项名称的访问者。
public function getMenutypeNameAttribute($value) {
return $this->menutype->name;
}
然后您可以加载类别并访问menutype名称。
要将其附加到json,请添加以下内容。
protected $appends = array('menutype_name');
答案 1 :(得分:1)
您需要在select语句中指定它。假设Category
和MenuType
表分别为categories
和menutypes
:
Category::select('categories.*', 'menutypes.name')
->join('menutypes', 'categories.id', '=', 'menutypes.id')
->with('menutype')
->get();