当将一个参数以整数形式传递时,Laravel返回零而不是实际的单元格值。
当将一个参数以整数形式传递时,Laravel返回零而不是实际的单元格值。
我有一个非常简单的MariaDB视图查询:
SELECT c.amount, c.discount FROM factors_view as c WHERE c.factor_id = 358
当我在HeidiSQL中运行这个查询时,我得到的结果是:amount = 16000,discount = 1200
但是在Laravel 5.7的原始查询中:
$result = \DB::select(" SELECT c.amount,c.discount FROM factors_view as c WHERE c.factor_id = 358" );
结果是:amount = 16000,discount = 0
当我在参数中加上引号时:
$result = \DB::select(" SELECT c.amount,c.discount FROM factors_view as c WHERE c.factor_id = '358'" );
结果是:amount = 16000,discount = 1200
c.factor_id的类型是int(10) unsigned
。
这对我来说非常奇怪;因为差异在查询条件中,而不是选择中!
输出是同一行,但特定列的值为零!
有人知道发生了什么吗?
这是我两个查询的查询日志:
1) query:"select `c`.`amount`, `c`.`discount` from `factors_view` as `c` where `c`.`factor_id` = ?" bindings:[0:358] 2) query:"select `c`.`amount`, `c`.`discount` from `factors_view` as `c` where `c`.`factor_id` = ?" bindings:[0:"358"]
Laravel在将参数作为整数传递时返回零而不是实际的单元格值。这个问题的原因是`factor_id`字段的数据类型不正确,应该是整数类型(INT)而不是字符串类型(VARCHAR)。解决方法是将`factor_id`字段的数据类型更改为整数类型(INT)。
请提供`SHOW CREATE TABLE`的信息以便进一步分析。根据提供的信息,可以看出当参数作为整数传递时,索引可以正常使用,但当参数作为字符串传递时,索引无法使用,需要将字符串转换为整数,这会导致必须检查所有行。所以,正确的解决方法是将`factor_id`字段的数据类型更改为整数类型(INT)。
以下是示例代码:
ALTER TABLE your_table MODIFY factor_id INT;
通过将`factor_id`字段的数据类型更改为整数类型(INT),问题应该得到解决。