为啥在 laravel 的 whereBetween 中不起作用

Posted

技术标签:

【中文标题】为啥在 laravel 的 whereBetween 中不起作用【英文标题】:Why does not work whereBetween in laravel为什么在 laravel 的 whereBetween 中不起作用 【发布时间】:2021-12-19 07:09:56 【问题描述】:

我有一个名为 Student 的模型,该模型包含一些字段

id teacher_id roll_number
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
6 1 6
7 1 7
8 1 8
9 1 9
10 1 10
11 2 11
12 2 12
13 2 13

我有一个传递值 teacher_idstart_rollend_roll 的表单

我有一个查询,我使用whereBetween 方法获取学生信息

$studentData = Student::where('teacher_id',$request->teacher_id)->whereBetween('roll_number',[$request->start_roll,$request->end_roll])->get();

其中start_roll 的值为1end_roll 的值为10teacher_id 的值为1 但奇怪的是它只返回两个数组值,其中id 为110

如果我再次搜索 start_roll 值是 5 和 end_roll 值是 10teacher_id 值是 1 但它也很奇怪它返回一个空数组

如果我在搜索时打印上面的查询,它会像下面这样打印

Student::where('teacher_id',1)->whereBetween('roll_number',[5,10])->get();

如果我执行上述硬编码查询(从 5 到 10 手动输入 roll_number),那么它对我来说工作正常,它返回 6 个数组编号,其中 id 开始 5 和结束 10

我不知道为什么我的搜索不起作用。任何建议都非常感谢

【问题讨论】:

你确定 $request->start_roll/end_roll 返回数字吗?尝试同时转换 intval($request->start_roll) ... @AngelDeykov,它返回两个数字,但它们是 string 还是 int 不检查它。谢谢你的好意见 我在评论中打赌,但我明白你明白我的意思。所以这解决了这个问题,因为我真的没有在代码中看到任何错误......? 我无法在我的机器中复制它 @ManojKiranAppathurai,我无法理解您的问题 【参考方案1】:

您应该添加所有请求的值 1,2,3,4,5,6,7,8,9,10。 像这样:

$queryRolls = range($request->start_roll,$request->end_roll);
$studentData = Student::where('teacher_id',$request->teacher_id)->whereIn('roll_number',$queryRolls)->get();

【讨论】:

它不工作。它作为我的输出返回 我很抱歉我的错误。使用 whereIn 而不是 whereBetween.code 已更改。 我已经解决了我的问题,将表格列字段varchar 更改为int。您的解决方案也有效。 whereIn 函数会在您想跳过某些值时对您有所帮助。

以上是关于为啥在 laravel 的 whereBetween 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 laravel 的 whereBetween 中不起作用

为啥即使模型名称在 Laravel 上是复数,它也能工作?

为啥 laravel 中的刀片文件不显示?

Laravel 7:为啥我的会话 cookie 没有在浏览器中设置?

为啥 Auth::attempt 在 Laravel 5.3 中总是返回 false?

为啥 BroadCastEvent 在 Laravel 中排队?如何阻止它?