【问题标题】:Laravel WhereIn or Wheren with whereLaravel WhereIn 或 Where with where
【发布时间】:2017-01-12 07:00:15
【问题描述】:

我正在尝试设计一个查询,但我不知道从哪里开始。

我会写出我希望它如何工作。

    Items::whereIn('id',$ids)->orWhereIn('id_2',$ids)->where('type','!=',$type)->get();

这就是我希望它工作的方式,但我知道这不会工作,因为它只会忽略 WHERE type=$type 查询,因为 whereIN 已经提取了不符合 Where 查询的记录。

基本上我想要这个雄辩的版本...

  "SELECT * FROM items WHERE type!=$type AND (id IN (1,2,3) OR id_2 IN(1,2,3))"

【问题讨论】:

    标签: laravel subquery where-in


    【解决方案1】:

    $user_id = 2 ; $user_ids = [2,3,4,5,6,7,78,87,88,90] ;

    where('id',$user_id) 与 whereIn('id',$user_ids)

    注意:where 将与数组的第一个值或单个值进行比较。 whereIn 将比较数组的每个索引。

    【讨论】:

    • 这是一个老问题,但我问的是如何做两个链接在一起的 whereIn。
    【解决方案2】:

    你会想做这样的事情:

    Item::where('type','!=','ATypeTest')->where(function ($query) {
        $query->whereIn('id',[1, 2, 3])->orWhereIn('id_2',[1, 2, 3]);
    })->get();
    

    查看 Laravel 文档以了解更多关于分组的信息:https://laravel.com/docs/5.3/queries#parameter-grouping

    这将生成以下 SQL 查询:

    SELECT * FROM "items" WHERE "type" != `ATypeTest` AND ("id" in (1, 2, 3) OR "id_2" in (1, 2, 3))
    

    【讨论】:

      【解决方案3】:

      您尝试做的是将语句分组:https://laravel.com/docs/5.3/queries#parameter-grouping

      你需要做的是让代码变成这样:

      Items::where('type', '!=', $type)
        ->where(function ($query) use ($ids) {
            $query->whereIn('id',$ids)
            ->orWhereIn('id_2',$ids);
        })
        ->get();
      

      这样你就可以对 where in 子句进行分组。

      【讨论】:

        猜你喜欢
        • 2021-03-23
        • 2021-02-11
        • 2017-11-05
        • 1970-01-01
        • 2020-07-09
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        相关资源
        最近更新 更多