0

我需要急切加载的对象而不是返回给 AJAX 的父对象。

我有 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');
    }
}

在我的 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,所以这不起作用,但我想展示我的想法。

4

1 回答 1

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;
于 2013-07-06T20:34:22.497 回答