Laravel 框架使用 whereIn 查询 SQL 时数据出错记录

Laravel框架使用whereIn查询SQL时数据出错

在laravel里面执行SQL查询,SQL里面的 in查询:

select * from `users` where id in (1,2,3,4,5,6); 

在laravel里面可以这样写:

<?php
DB::table('users')->whereIn('id', [1,2,3,4,5,6])->get()->toArray();

//或者
User::whereIn('id', [1,2,3,4,5,6])->get()->toArray();

这样写查询很方便没有问题的,也是可以查询出来的。如果后面再加一个where查询:

<?php
DB::table('users')->whereIn('id', [1,2,3,4,5,6])
->where('name', 'liyi')
->get()->toArray();

//或者
User::whereIn('id', [1,2,3,4,5,6])
->where('name', 'liyi')
->get()->toArray();

这样写的时候也是没有问题的。现在我们把whereIn的数组改变一下:

<?php
DB::table('users')->whereIn('id', [[2],[12],[2],[3],[4]])
->where('name', 'liyi')
->get()->toArray();

//或者
User::whereIn('id', [[2],[12],[2],[3],[4]])
->where('name', 'liyi')
->get()->toArray();

这个时候,查询得到的结果还是没有问题的。还是一个正确的结果,那么再改变一下呢:

<?php
DB::table('users')->whereIn('id', [[2,1],[12,2],[2],[3],[4]])
->where('name', 'liyi')
->get()->toArray();

//或者
User::whereIn('id', [[2,1],[12,2],[2],[3],[4]])
->where('name', 'liyi')
->get()->toArray();

这个时候它得到的结果就是一个空,why?

实际例子:

<?php
CategoryDetail::whereIn('category_id', [[2,1],[12],[2],[3],[4]])->where('languages_id', 1)->get();

//SQL
select * from `category_details` where `category_id` in (2, 1, 12, 2, 3) and `languages_id` = 4;

所以遇到这个情况的时候,暂时可以的办法就是

  1. whereIN的查询放在最后面,这样就可以保证,它的参数绑定的时候不会把正确的参数替换为In查询的参数了

  2. 对自己的In查询的数组,自己先做一个处理,要么保证是一个一维数组,这样肯定没问题,二位数组的话,保证二位数组里每个一维数组都是和子元素个数相同,但\
    是这样也不现实,所以呢。。。有兴趣的可以自己尝试哦

本作品采用《CC 协议》,转载必须注明作者和本文链接
LIYi ---- github地址
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!