Laravel在子查询中

时间:2015-04-27 17:23:25

标签: laravel subquery eloquent where-clause

假设我有这些表:userslanguageslanguage_user。最后一个是带有附加字段rating的数据透视表,用于定义用户对该特定语言的能力等级(母语,好,不好,......)。 我知道如何让所有能够说出至少一种特定语言的用户:

$query->whereHas('languages', function($qry){                           
    $qry->whereIn("languages.id", [1, 8, 999]);                             
});     

但是,如果我还想根据rating为每种语言进行过滤,该怎么办?所以我希望用户能够使用rating为5的语言1,或者rating至少为3的语言8?

我尝试使用whereIn闭包内的循环迭代所有值并添加where子查询以匹配特定值,但它不起作用。

1 个答案:

答案 0 :(得分:0)

你必须包装你的内部查询:

$query->whereHas('languages', function($query)
{    
    foreach ([1 => 5, 8 => 3] as $language => $rating)
    {
        $query->where(function($query) use ($language, $rating)
        {
            $query->where('languages.id', $language)
                  ->where('languages.rating', '>=' $rating);
        });
    }
});