我试图设计一个查询,但我不知道从哪里开始。
我会输入我想要它的功能。
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))"
答案 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))