laravel where 查询问题, 字符串被转为 int 了

2019-12-19 11:59:49 +08:00
 hteen

模型写法

User::where('foo', 10)->first();

执行的 sql 语句

select * from `users` where `foo` = 10

foo 字段其实是个 varchar

User::where('foo', '10')->first();

执行的 sql 语句, 参数还是被转为 int 了

select * from `users` where `foo` = 10

如果传递其他字符串

User::where('foo', 'abc')->first();

执行的 sql 语句, 参数就是期望值

select * from `users` where `foo` = 'abc'

laravel5.8

1497 次点击
所在节点    问与答
5 条回复
iyaozhen
2019-12-19 12:24:42 +08:00
MySQL 里面试过吗?我记得不区分 10 还是'10'
hteen
2019-12-19 12:29:51 +08:00
@iyaozhen 分析 SQL 语句, 10 是用不到索引的, '10'才能命中索引
ylsc633
2019-12-19 12:38:23 +08:00
恭喜你 遇到了一个 建立索引,且用了索引字段,但不走索引的情况!

以后可能会被问到! 哈哈哈
chinvo
2019-12-19 14:21:39 +08:00
我记得 laravel 的 ORM 有个强制类型的参数,太就没用过有点记不清
zibber
2019-12-19 19:57:56 +08:00
User::where('foo', Db:raw("'10'"))->first();

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/630463

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX