Laravel 使用按 id 搜索的查询生成器有线行为
Posted
技术标签:
【中文标题】Laravel 使用按 id 搜索的查询生成器有线行为【英文标题】:Laravel queryBuilder wired behavior using search by id 【发布时间】:2022-01-18 22:04:42 【问题描述】:我正在尝试为这种有线行为寻找答案 所以在数据库中我有 id = 14 的记录 当我添加一些随机字符来查找它的返回记录时,id = 14
User::query()->find('14fdsf')
通常它应该返回 null !任何想法为什么会发生这种情况??
【问题讨论】:
因为14 == (int) '14fdsf'
...类型(字符串)在某个地方被杂耍到一个int;会是我的猜测
对对对,我忘了!!!谢谢
看来这种类型转换发生在数据库级别。我在查询构建器代码中看不到它转换为整数的任何地方。我正在使用的数据库(mysql)确实记录了这个here。我假设您使用的是 mysql 或者您的数据库具有类似的行为。如果你像我一样好奇,你可以通过记录 Laravel 生成的查询来自己验证这一点。您会看到该字符串仍然存在于绑定中。
【参考方案1】:
Laravel 正在将您的字符串转换为整数。
'14fdsf' = (int) 14
在执行 ->find(int) 查询时,您应该只使用整数。
【讨论】:
这里有几个问题。 1) Laravel 不做任何翻译。我很好奇,所以我查了一下。类型强制发生在数据库级别。 2)虽然在大多数情况下很少见且不可取,但您可以拥有一个不是整数的主键。所以最后一条建议并不总是正确的。以上是关于Laravel 使用按 id 搜索的查询生成器有线行为的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 查询生成器按天计算行数 SQL db::raw
如何在 laravel 中使用查询生成器根据 id 从多个表中获取数据