Laravel WhereIn 或 Wherein 与 Where

Laravel WhereIn or Wheren with where

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

我会输入我想要的功能。

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

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

基本上我想要这个的 eloquent 版本...

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

你会想做这样的事情:

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

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

$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 将比较数组的每个索引。