Laravel - 根据关系查询3个表

时间:2014-11-04 19:34:50

标签: php laravel laravel-4 eloquent

我想一次查询3个单独的表。主要的一个是Criteriahas Many链接的两个criteria_id表格为BedroomsProperties

Criteria可以包含多个Bedrooms和多个Properties

Screenshot

标准模型

public function bedrooms()
{
    return $this->hasMany('Bedroom');
}

public function properties()
{
    return $this->hasMany('Property');
}

我不确定这是否可行,但我想查询这两个表以及Criteria以查看哪些条件具有某个卧室和某个属性类型。请注意,每个criteria_id可能会存储多个卧室和属性。

到目前为止,我的查询是:

$criterias = Criteria::select('id')
        ->where('min', '<=', Input::get('single_value'))
        ->lists('id');

我唯一合乎逻辑的解释是 -

  

获取所有标准,其中Min&lt; = Value和Criteria.Bedrooms = 1和   Criteria.Properties = 5.

好像要循环查看条件是否存在具有该值的卧室/属性。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

尝试Eager Loading关系

$criterias = Criteria::with('bedrooms', 'properties')
            ->where('min', '<=', Input::get('single_value'))
            ->lists('id');

答案 1 :(得分:0)

如果您只查找符合约束条件的条件,则可以在卧室和财产关系中使用whereHas()。然后添加您的where()lists()

$bedroom_id = '1';
$property_id = '5';

$criteria = Criteria::whereHas('bedrooms', function($q) use ($bedroom_id) {
    $q->where('bedroom', $bedroom_id);
})->whereHas('properties', function($q) use ($property_id) {
    $q->where('property', $property_id);
})->where('min', '<=', Input::get('single_value'))->lists('id');

Criteria.Bedrooms = 1 and Criteria.Properties = 5有点模糊,但我把它添加到应该去的地方。我猜你实际上分别是id1的{​​{1}}所以它将获得所有标准同时具有id为1的卧室和id为5的属性。