假设我有这些表:users
,languages
,language_user
。最后一个是带有附加字段rating
的数据透视表,用于定义用户对该特定语言的能力等级(母语,好,不好,......)。
我知道如何让所有能够说出至少一种特定语言的用户:
$query->whereHas('languages', function($qry){
$qry->whereIn("languages.id", [1, 8, 999]);
});
但是,如果我还想根据rating
为每种语言进行过滤,该怎么办?所以我希望用户能够使用rating
为5的语言1,或者rating
至少为3的语言8?
我尝试使用whereIn
闭包内的循环迭代所有值并添加where
子查询以匹配特定值,但它不起作用。
答案 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);
});
}
});