Laravel 5.2 - PHP 7.0.6 合并运算符返回空字符串

Laravel 5.2 - PHP 7.0.6 coalesce operators returning empty strings

所以我有一个依赖 Laravel 5.2 / PHP 7.0.6 的项目,它使用 Transformers 来处理 API 响应。在我们代码的许多地方,我们使用新的 php 7 合并 (??) 运算符。然而,自从我们更新到 php 7.0.6 后,我们看到了很多以下内容:

代码:'vip_id' => $beneficiaryQdro->beneficiary->vip_id ?? ''

预期结果:11583(受益关系vip id)

实际结果:''

我试过 运行 这个:dd($beneficiaryQdro->beneficiary->vip_id) 我得到了正确的 vip_id 返回。但是,当我再次添加合并运算符时 returns 一个空字符串。这以前是有效的。还有其他人看到新的 php 版本发生这种情况吗?

更新:我已经通过预先加载关系修复了它。关于合并运算符的某些事情不喜欢处理动态填充信息的关系。我不确定这会成为谁的问题。在 7.0.6 之前,合并运算符处理的关系不是急切加载的,但这次更新以某种方式破坏了它。

正在做:

$beneficiaryQdro->beneficiary->vip_id ?? ''

等同于:

isset($beneficiaryQdro->beneficiary->vip_id) ? $beneficiaryQdro->beneficiary->vip_id : ''

因此,除非加载 beneficiary 关系,否则在执行 isset 时这将始终为 false 并导致为 ''。

PHP 7.0.6 中修复了 2 个错误,它们看起来与您的行为和您遇到的问题有关:

类 上的合并运算符覆盖了 __get() 方法

https://bugs.php.net/bug.php?id=71359

空合并运算符和 ArrayAccess

https://bugs.php.net/bug.php?id=71731

所以这可能是 Eloquent 如何使用其魔术方法处理它的问题。我没有在 PHP 7 下安装来确认这一点。

看起来这里也有人问过这个问题:https://laracasts.com/discuss/channels/eloquent/eloquent-relation-isset-always-return-false

它看起来不应该在 7.0.6 之前工作。

总而言之,isset 不加载关系。