5

我正在尝试使用 Eloquents find 方法从我的数据库中检索记录,但是,它意外地返回 null。如果我在数据库上手动运行查询,那么它会返回预期的记录。

我在 Laravel 中使用以下内容:

$support = Support::find(02155);

并直接在数据库上执行以下操作:

SELECT * FROM support WHERE id = 02155;

主键列名为“id”,类型为 smallint(5),无符号和 zerofill 以及自动增量集。根据 Laravel 应该执行的内容,我将上述“手动”查询基于 Laravel 文档。

没有报告任何错误(我可以看到),如果我将 Eloquent 方法更改为“全部”,那么所有记录都会正确返回。

4

2 回答 2

16

这是因为以 0 开头的数字被 PHP 视为八进制,根据: http: //php.net/manual/en/language.types.integer.php

似乎 PHP 在执行 MySQL 查询之前将数字转换为小数,这意味着查询的数字不正确。

例如:

Support::find(02155);

变成:

'SELECT * FROM mytable WHERE id = 1133'

解决方案

在将它与 Eloquents find 方法一起使用之前,我通过使用 (int) 将数字类型转换为整数来解决这个问题。如果您将数字作为字符串(即引号)传递,它也将起作用,如下所示:

Support::find('02155');
于 2013-03-11T18:02:03.993 回答
0

可能还有另一个问题。

如果您在模型中使用软删除并使用 find 从数据库中查找记录,则可能会返回 null。要解决此问题,您可以从模型中删除软删除。

于 2021-05-08T11:09:09.987 回答