laravel 5.5 使用whereIn的时候,参数加上变量无法返回结果

我在使用laravel 5.5框架的时候,在使用whereIn中加入获取的变量参数,无法正常返回结果,手动写成数值的时候正常返回。
使用变量:

$ids = '';
        foreach ($menu as $v) {
            if($user[0]['position']==$v['position_id']){
                $ids .= $v['position_id'];
                foreach ($v['child'] as $val) {
                    $ids .= ',' . $val['position_id'];
                }
            }
        }
        $page = $request->page ?: 1;
        $pagesize = $request->pagesize ?: 10;
        $data = $client->leftjoin('industry','client.industry','=','industry.industry_id')
                ->join('client_allot','client.client_id','=','client_allot.client_id')
                ->join('users','client_allot.user_id','=','users.id')
                ->select('client.client_id','company','tacpayer_type',DB::raw('concat(province,city,district) as area'),'industry_name','contact','client.creator','client.created_at')
                ->where('client_type', '=',2)
                ->where('allot_type', '=',1)
                ->whereIn('position',[$ids])
                // ->orderBy(\DB::raw('FIND_IN_SET(position, "' . implode(",", [$ids]) . '"' . ")"))
                ->paginate($pagesize);

使用变量参数

使用手动输入参数:

$data = $client->leftjoin('industry','client.industry','=','industry.industry_id')
                ->join('client_allot','client.client_id','=','client_allot.client_id')
                ->join('users','client_allot.user_id','=','users.id')
                ->select('client.client_id','company','tacpayer_type',DB::raw('concat(province,city,district) as area'),'industry_name','contact','client.creator','client.created_at')
                ->where('client_type', '=',2)
                ->where('allot_type', '=',1)
                ->whereIn('position',[4,5,6])
                // ->orderBy(\DB::raw('FIND_IN_SET(position, "' . implode(",", [$ids]) . '"' . ")"))
                ->paginate($pagesize);

![手动输入数值]

我在网上和论坛上找不到任何信息,我自己也检查了几遍,无法找到问题源

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

结贴,问题已解决,按照站长的提供的逐步打印,发现确实是自己写法的问题,之前用的打印方法没有很仔细的打印出来,导致我自己也以为返回的结果没问题

3年前 评论
讨论数量: 37

你最好看下你的 $ids 是个啥

3年前 评论
LuoH (楼主) 3年前

《提问的智慧》
你是如何检查的?

3年前 评论
LuoH (楼主) 3年前
php_yt (作者) 3年前
LuoH (楼主) 3年前
Summer

把最终生成的 SQL 打出来就知道了。

Wiki:Laravel Eloquent:获取模型查询生成的 SQL 语句 (评论部分也可以参考)

或者直接使用调试工具, API 的调试工具可以看这里: 008. 利用 Clockwork 在 Google Chrome 下调试你的 Laravel APP ——itsgoing...

3年前 评论
LuoH (楼主) 3年前

这很明显。你的变量和手动输入的完全不一样!

3年前 评论
LuoH (楼主) 3年前

file 根据你的写法,很明显你的 [$ids] 的值是 ['4,5,6']whereIn() 中的参数需要 [4,5,6] 这种的。

为什么 $ids 不直接用数组呢???拼接的那不是字符串吗???

['4,5,6'] 不等于 [4,5,6] !!!

3年前 评论
LuoH (楼主) 3年前
Su (作者) 3年前
Su (作者) 3年前
Su (作者) 3年前
LuoH (楼主) 3年前
Su (作者) 3年前
LuoH (楼主) 3年前
alante

$ids获取到的是字符串'4,5,6', 所以whereIn的时候是whereIn('position', ['4,5,6']), 肯定拿不到数据啊, 这个和whereIn('position', [4,5,6])是完全不一样的, 你所说的打印出的sql是一样的, 肯定是你看错了, sql一定是不一样的

3年前 评论
LuoH (楼主) 3年前
颠倒的玉石

你toSql一下

3年前 评论
LuoH (楼主) 3年前

whereIn('position,[4,5,6])打印出的效果 file whereIn('position,[$ids])打印出的效果 file

3年前 评论
我爱大可乐 3年前
LuoH (作者) (楼主) 3年前

第一种是字符串吧

3年前 评论
LuoH (楼主) 3年前

在测试环境(本地)安装mnabialek/laravel-sql-logger包,本地SQL都会记录在logs里,需要的时候查一查就好了

3年前 评论
LuoH (楼主) 3年前
// 如果
$ids = '4,5,6';
// 然后你用 '[]' 中括号括起来
print_r([$ids]);
// Array
// (
//   [0] => 4,5,6
// )
//===================================================
// 如果
$ids = [4,5,6];
// 然后你用 '[]' 中括号括起来
print_r([$ids]);          // 王八顶上盖房子,盖中盖!
// Array
// (
//    [0] => Array
//        (
//            [0] => 4
//            [1] => 5
//            [2] => 6
//        )
// )

:see_no_evil: :see_no_evil: :see_no_evil:

3年前 评论
LuoH (楼主) 3年前

你还是把你数组形式的放出来看看哪错了

3年前 评论
Su 3年前
LuoH (楼主) 3年前

结贴,问题已解决,按照站长的提供的逐步打印,发现确实是自己写法的问题,之前用的打印方法没有很仔细的打印出来,导致我自己也以为返回的结果没问题

3年前 评论

代码质量太差了

3年前 评论
Su 3年前

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