Обновление Laravel 5.2 до 5.4 и выше вызывает бесконечную рекурсию в Elouquent GuardsAttributes - PullRequest
0 голосов
/ 14 января 2019

Я сейчас нахожусь в процессе обновления проекта Laravel, который я «унаследовал» от некоторых других разработчиков, которых больше нет.

Весь проект построен на Laravel 5.2 и с тех пор не обновлялся, поэтому мы начали процесс.

При достижении Laravel 5.4 мы видим, что почти все наши страницы, которые публикуются, просто попадают в страшный «белый экран смерти PHP» (ошибка HTTP 500) со следующим журналом из PHP:

Allowed memory size of xyz bytes exhausted (tried to allocate abc bytes) in php

Мы пытались значительно увеличить ограничение памяти (2 ГБ) и всегда оказывались в одной и той же ситуации.

Затем я установил Xdebug в наших локальных средах разработки, и теперь вместо этого я вижу эту ошибку:

Symfony\Component\Debug\Exception\FatalThrowableError (E_ERROR)
Maximum function nesting level of '256' reached, aborting!


/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php 174

Что наводит меня на мысль, что что-то не так в моделях базы данных - и нужно проверить чуть более 50 моделей.

Однако я не очень опытный в Laravel и не в его обновлении, поэтому я надеялся, что у некоторых гуру Laravel есть несколько быстрых указателей на то, что проверять, чтобы смягчить эту ошибку?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Оказывается, что к моделям, которые терпят неудачу, прикреплена Черта, которая переопределяет update и create модели, которая use черта.

Как добавлено в руководстве по миграции Laravel для 5.4, они внесли изменения в update и create в чертах, поэтому следует использовать static::query()->create() вместо parent::create().

Ошибка похожа на мою здесь на github с полным объяснением: https://github.com/laravel/framework/issues/17876

0 голосов
/ 14 января 2019

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

Надо сказать, что Debugbar требует дополнительных ресурсов, отслеживая страницы. Поэтому я хотел бы убедиться, что вы устанавливаете в среде разработки, где вы можете полностью изменить настройки до 10. Таким образом, вы не просто вносите новую ошибку в вашу систему с ошибками. :-)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...