【问题标题】:Laravel Eloquent find returning nullLaravel Eloquent 发现返回 null
【发布时间】:2013-02-25 21:28:42
【问题描述】:

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

我在 Laravel 中使用以下内容:

$support = Support::find(02155);

然后直接在数据库下面:

SELECT * FROM support WHERE id = 02155;

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

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

【问题讨论】:

  • 由于该列是 int ,因此 id 的实际值是 2155 而不是 02155。这应该不是问题,但也许您应该尝试不使用该零?
  • 你是对的!我从来没有想到过。非常感谢,我很感激:)。
  • 您可以为您的问题提供答案并接受它以帮助遇到它的其他人,并帮助我们了解哪些关于 laravel 的问题尚未解决:)。它也将计入您的 SO 声誉和徽章。

标签: php mysql laravel eloquent


【解决方案1】:

这是因为以 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');

【讨论】:

  • 很高兴看到你听从了我的建议。对此表示赞同并给出了详细的答案:)
【解决方案2】:

可能还有其他问题。

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

【讨论】:

    猜你喜欢
    • 2014-07-30
    • 2016-04-27
    • 1970-01-01
    • 2014-11-26
    • 2014-11-29
    • 2016-08-13
    • 1970-01-01
    • 2018-05-10
    • 2022-01-21
    相关资源
    最近更新 更多