为啥在 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_id
、start_roll
和 end_roll
的表单
我有一个查询,我使用whereBetween
方法获取学生信息
$studentData = Student::where('teacher_id',$request->teacher_id)->whereBetween('roll_number',[$request->start_roll,$request->end_roll])->get();
其中start_roll
的值为1
和end_roll
的值为10
和teacher_id
的值为1
但奇怪的是它只返回两个数组值,其中id 为1
和10
仅
如果我再次搜索 start_roll
值是 5 和 end_roll
值是 10
和 teacher_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 7:为啥我的会话 cookie 没有在浏览器中设置?