2015-06-05 6 views
0

Я хочу, чтобы мое возвращение объект выглядит следующим образом:Добавить конкретное свойство от belongsTo отношений

{ 
    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(); 

я получил ошибку «Вызов неопределенного метода Осветите \ Database \ Query \ Builder :: имя()».

Вот моя установка модели (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() 

ответ

1

Вы должны указать, что в вашем отборном заявлении. Если предположить, что Category и MenuType таблицы categories и menutypes, соответственно:

Category::select('categories.*', 'menutypes.name') 
    ->join('menutypes', 'categories.id', '=', 'menutypes.id') 
    ->with('menutype') 
    ->get(); 
2

В вашей категории модели добавить аксессора для названия пункта меню.

public function getMenutypeNameAttribute($value) { 
    return $this->menutype->name; 
} 

Затем вы можете загрузить категории и получить доступ к названию типа.

Чтобы добавить это к json, добавьте следующее.

protected $appends = array('menutype_name'); 
Смежные вопросы