我正在尝试使用Eloquents find方法从我的数据库中检索记录,但是,它意外地返回null。如果我在数据库上手动运行查询,则返回预期的记录。
我在Laravel中使用以下内容:
$support = Support::find(02155);
以下直接在数据库上:
SELECT * FROM support WHERE id = 02155;
主键列名为'id',类型为smallint(5),unsigned和zerofill以及自动增量集。我根据Laravel应该执行的内容,在Laravel文档上建立了上述“手动”查询。
没有报告任何错误(我可以看到),如果我将Eloquent方法改为'all',那么所有记录都会被正确返回。
答案 0 :(得分:14)
这是因为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');
答案 1 :(得分:0)
可能还有其他问题。
如果您在模型中使用软删除并使用 find 从数据库中查找记录,则可能会返回 null。 要解决此问题,您可以从模型中删除软删除。