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 从多个表中获取数据

Laravel如何通过ajax按名称或ID搜索在前端仅显示用户帐户的附加患者

Laravel:高级搜索表单查询

Laravel:按位置排序

laravel 搜索多个以空格分隔的单词