Laravel WhereIn或Wheren与哪里

时间:2016-09-04 21:16:59

标签: laravel subquery where-in

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

我会输入我想要它的功能。

    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))"

3 个答案:

答案 0 :(得分:1)

您尝试做的是对语句进行分组: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子句分组。

答案 1 :(得分:1)

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

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

注意:此处将仅与数组的第一个值或仅一个单个值进行比较。而whereIn将比较数组的evey索引。

答案 2 :(得分:-1)

你想要做这样的事情:

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))