我需要急切加载的对象而不是返回给AJAX的父对象。
我有2张桌子,厨师和位置。我想在地点的城市字段中返回所有拥有特定值的地点的厨师。
我可以成功选择和过滤已加载链接Chefs的地点。但我想要归还厨师,而不是地点。理想情况下,厨师和他们的地点渴望加载将是伟大的。但是,如何根据关系的字段值选择Chef?
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');
}
}
在我的Controller类中我有:
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;
}
}
当然Controller不会返回JSON所以这不起作用,但我想表明我的想法。
答案 0 :(得分:0)
我得到了它的工作,但我正在对数据库进行多次点击。 MySQL能够根据我的标准为找到的集合组成一个Select语句。我仍然希望在Eloquent中找到一种方法。
$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;