【问题标题】:Exception thrown in production, but not development (pluck() on null)生产中抛出异常,但开发中没有(pluck() on null)
【发布时间】:2018-07-05 19:38:21
【问题描述】:

我遇到了一个让我摸不着头脑的奇怪错误。

我正在使用一个将元信息存储在元表中的包。所以我的模型有一个元关系。该包使用这种简单的方法来检索元数据。

public function getAllMeta()
{
    return collect($this->meta->pluck('value', 'key'));
}

那么,如果存在的话,您会期望元数据集合,是一个空集合,对吧?这就是它在我的本地开发服务器上显示的内容。据我了解,当尝试从关系中检索数据时,如果没有相关记录,它将返回 null。

但是,在生产中,如果没有元关系(没有数据),就会返回这个异常:Call to a member function pluck() on null

我不知道为什么会这样。

  • prod 和 dev 都在使用 Laravel 5.6.26
  • composer.json 两个文件相同。我使用差异检查器进行验证。
  • prod 和 dev 都运行了 composer update 以确保所有依赖项相同

那么,我错过了什么?同样的代码在 dev 中返回一个空集合,在 prod 中抛出异常?

【问题讨论】:

  • 我假设 prod 正在使用真实数据运行。 dev 中的数据与现实世界的距离有多近?
  • 元是什么关系类型?
  • @cHao dev 和 prod 的元表中的数据是相同的。 @Devon 关系类型为morphTo,在包中设置。 (github.com/appstract/laravel-meta)
  • 看起来meta 后面应该有括号。没有解释为什么您会在两种环境中看到差异,但它可能有助于解决眼前的问题。您已经检查了两台机器上的 PHP 设置以确保它们也相同?包括版本、php.ini、扩展...?
  • @Mark morphTo 不应返回集合。它将返回 null 或模型。

标签: laravel exception collections laravel-5.6


【解决方案1】:

看起来meta 在那个方法后面应该有括号。 (metaMetable 特征中的方法,而不是字段。)

并没有真正解释为什么您会在两种环境中看到差异,但它可能有助于解决眼前的问题。

【讨论】:

    猜你喜欢
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多