所以我有一个依赖Laravel 5.2 /
PHP 7.0.6的项目,它使用变形金刚来处理API响应.在我们代码中的许多地方,我们使用新的php 7 coalescing(??)运算符.但是,自从我们更新到php 7.0.6以来,我们看到了很多以下内容:
代码:’vip_id’=> $beneficiaryQdro-> beneficiary-> vip_id ?? “”
预期成果:11583(受益关系的贵宾身份)
实际结果: ”
我试过运行这个:dd($beneficiaryQdro-> beneficiary-> vip_id),我得到了正确的vip_id返回.但是,当我添加合并运算符时,它再次返回一个空字符串.这个WAS之前工作.其他人看到这种情况发生在新的PHP发布?
更新:我通过急切加载关系修复了它.关于合并运算符的某些东西不喜欢处理它在运行中填充信息的关系.我不确定这会成为谁的问题.在7.0.6之前,合并运算符正在处理那些并非急切加载的关系,但是这个更新以某种方式打破了它.
最佳答案 这样做:
$beneficiaryQdro->beneficiary->vip_id ?? ''
做法与做:
isset($beneficiaryQdro->beneficiary->vip_id) ? $beneficiaryQdro->beneficiary->vip_id : ''
因此,除非加载受益人关系,否则在进行确认时将始终为假,并导致为”.
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不会加载关系.