Laravel 5.2 — операторы объединения PHP 7.0.6, возвращающие пустые строки

Итак, у меня есть проект, основанный на Laravel 5.2 / PHP 7.0.6 и использующий Transformers для обработки ответов API. В МНОГИХ местах нашего кода мы используем новые операторы php 7 coalescing (??). Однако с момента нашего обновления до php 7.0.6 мы видим много следующего:

Код: 'vip_id' => $beneficiaryQdro->beneficiary->vip_id ?? ''

ожидаемый результат: 11583 (vip-идентификатор отношений бенефициара)

Фактический результат: »

Я попытался запустить это: dd($beneficiaryQdro->beneficiary->vip_id) и я получаю верный vip_id. Однако, когда я добавляю оператор объединения, он снова возвращает пустую строку. Это работало раньше. Кто-нибудь еще видел, как это случилось с новым релизом php?

ОбновитьЯ исправил это, стремясь загрузить отношения. Что-то в операторе слияния не нравится иметь дело с отношениями, где он заполняет информацию на лету. Я не уверен, чья это проблема. До 7.0.6 операторы объединения работали с отношениями, которые загружались не очень хорошо, но это обновление каким-то образом сломало его.

4

Решение

Выполнение:

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

это то же самое, что делать:

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

Так что если beneficiary отношения загружаются, это всегда будет ложным при выполнении isset и в результате будет ».

В 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 не загружает отношения.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]