【问题标题】:Laravel whereIn subqueryLaravel whereIn 子查询
【发布时间】:2015-07-06 06:52:47
【问题描述】:

假设我有这些表:userslanguageslanguage_user。最后一个是带有附加字段rating 的数据透视表,该字段定义了用户对该特定语言(母语、好、不好……)的能力水平。
我知道如何让所有用户至少会说一组特定语言中的一种:

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

但是,如果我还想针对每种语言根据 rating 进行过滤,该怎么办?所以我想要一个可以说语言 1 的用户,rating 为 5,或者语言 8,rating 至少为 3?

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

【问题讨论】:

    标签: laravel subquery eloquent where-clause


    【解决方案1】:

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

    $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);
            });
        }
    }); 
    

    【讨论】:

    • 谢谢。差不多了!解决方案(几乎与您的相同)已发布在 SO:link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2017-04-13
    • 2017-07-30
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多