【发布时间】: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