2013-07-06 1 views
0

Мне нужен загруженный объект с нетерпением вместо родительского объекта, возвращаемого в AJAX.Возвращает загруженный объект в Laravel4

У меня есть 2 стола, шеф-повар и место. Я хочу вернуть всех поваров, владеющих местоположениями, с определенной ценностью в полях города.

Я могу успешно выбрать и фильтровать местоположения со связанными поварами, загруженными. Но я хочу вернуть шеф-поваров, а не места. В идеале, шеф-повара со своими местами, которые будут загружены, были бы замечательными. Но как выбрать шеф-поваров на основе значения поля отношения?

class Location extends Eloquent { 
    protected $table = 'locations'; 

    public function chef() { 
     return $this->belongsTo('Chef'); 
    } 
} 

class Chef extends Eloquent { 
    protected $table = 'chefs'; 

    public function location() { 
     return $this->hasMany('Location'); 
    } 
} 

и в моем классе контроллера у меня есть:

class DishController extends BaseController { 
    if ($loc_search) { 
     $locations = Location::with('chef')->where('city', 'LIKE', "%$loc_search%"); 
     $chefstemp = array(); 
     foreach ($locations->get() as $loc) { 
      if (strpos($loc->city, $loc_search) !== FALSE) { 
       array_push($chefstemp, $loc->chef); 
      } 
    } 
    return $chefstemp; 
    } 
} 

Конечно контроллер не возвращает JSON, так это не работает, но я хотел показать свое мышление.

+0

Вы можете попробовать, указав Fillable Attributes On Model [link] (http://laravel.com/docs/eloquent#mass-assignment). И вернуть Json [Читать здесь] (http://laravel.com/docs/responses#special-responses) –

+0

Это может помочь: http://stackoverflow.com/a/17302901/1661358 – rmobis

+0

Нет, что не помогло , Я в основном хочу: Места расположения :: где ('city', '=', 'Chicago') -> chef(); –

ответ

0

Я получил его работу, но я делаю несколько обращений к БД. MySQL способен составлять один оператор Select для найденного набора в соответствии с моими критериями. Я все равно хотел бы найти способ сделать это в «Красноречии».

$chef_ids = array(); 

    $chefQuery = Chef::where('name', 'LIKE', "%$chef_search%"); 
    if ($chef_search) { 
     foreach ($chefQuery->get(array('id')) as $chef) { 
      $chef_ids[] = $chef->id; 
     } 
    } 
    if ($loc_search) { 
     $locations = Location::where('city', 'LIKE', "%$loc_search%")->get(array('chef_id')); 
     foreach ($locations as $loc) { 
      $chef_ids[] = $loc->chef_id; 
     } 
    } 
    $dishes = Dish::whereIn('chef_id', $chef_ids)->with(array('chef', 'dishimage', 'chef.location'))->get(); 
    return $dishes;