在生产中抛出异常,但在开发中没有抛出(pluck() on null)
Exception thrown in production, but not development (pluck() on null)
我遇到了一个让我摸不着头脑的奇怪错误。
我正在使用一个将元信息存储在元 table 中的包。所以我的模型有元关系。该包使用这种简单的方法来检索元数据。
public function getAllMeta()
{
return collect($this->meta->pluck('value', 'key'));
}
所以,如果元数据存在,您会期望它是一个集合,或是一个空集合,对吧?这就是它在我的本地开发服务器上显示的内容。据我了解,当尝试从关系中检索数据时,如果没有相关记录,它将 return null。
但是,在生产中,如果没有元关系(没有数据),它 return 就是这个异常:Call to a member function pluck() on null
我不明白为什么会这样。
- prod 和 dev 都在使用 Laravel
5.6.26
.
- 两个
composer.json
文件相同。我使用差异检查器来验证。
- 产品和开发都
composer update
运行确保所有依赖关系相同。
那么,我错过了什么?同样的代码return在dev中是一个空集合,在prod中抛出异常?
看起来 meta
在那个方法后面应该有括号。 (meta
是 Metable
特征中的方法,而不是字段。)
并没有真正解释为什么您会在两种环境中看到差异,但它可能有助于解决眼前的问题。
我遇到了一个让我摸不着头脑的奇怪错误。
我正在使用一个将元信息存储在元 table 中的包。所以我的模型有元关系。该包使用这种简单的方法来检索元数据。
public function getAllMeta()
{
return collect($this->meta->pluck('value', 'key'));
}
所以,如果元数据存在,您会期望它是一个集合,或是一个空集合,对吧?这就是它在我的本地开发服务器上显示的内容。据我了解,当尝试从关系中检索数据时,如果没有相关记录,它将 return null。
但是,在生产中,如果没有元关系(没有数据),它 return 就是这个异常:Call to a member function pluck() on null
我不明白为什么会这样。
- prod 和 dev 都在使用 Laravel
5.6.26
. - 两个
composer.json
文件相同。我使用差异检查器来验证。 - 产品和开发都
composer update
运行确保所有依赖关系相同。
那么,我错过了什么?同样的代码return在dev中是一个空集合,在prod中抛出异常?
看起来 meta
在那个方法后面应该有括号。 (meta
是 Metable
特征中的方法,而不是字段。)
并没有真正解释为什么您会在两种环境中看到差异,但它可能有助于解决眼前的问题。