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 不加载关系。
所以我有一个依赖 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 不加载关系。