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响应。在我们代码中的许多地方,我们使用了新的php7合并(??)运算符。然而,自从我们更新到php7.0.6之后,我们看到了很多以下内容:

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

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

实际结果:"

我已经尝试过运行这个:dd($beneficiaryQdro->beneficiary->vip_id),并且返回了正确的vip_id。然而,当我添加合并运算符时,它再次返回一个空字符串。这以前是有效的。还有人看到php新版本中出现这种情况吗?

更新:我已经通过加载关系修复了它。联合运算符不喜欢处理动态填充信息的关系。我不确定这会成为谁的问题。在7.0.6之前,合并运营商处理的关系并不急于加载,但这次更新不知何故打破了它。

执行:

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

与做相同

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

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

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

具有重写__get()方法的类上的合并运算符

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

空合并运算符和ArrayAccess

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

因此,这可能是Eloquent如何用其神奇的方法处理它的问题。不过,我没有在PHP7下安装来确认这一点。

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

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

总之,isset不加载关系。