2016-02-22 1 views
0

У меня Movie юридического лица, которое имеет ManyToMany связи с такими организациями, как Actor, Director, Producer, company` т.д.Doctrine - память исчерпана на Sonata Admin?

Есть много таких лиц (Актер: 90k, Режиссер: 40k, продюсер: 20k, ООО : 40k) на выбор при редактировании фильма.

При попытке загрузить «редактировать» страницу моего лица в Sonata Admin, я получаю ошибка 500 и PHP журналы говорят Allowed memory size of 134217728 bytes exhausted в одном из следующих файлов:

\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php on line 2577 
\vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\AbstractHydrator.php on line 296 
\vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php on line 529 

Он работал на светильниках, когда это в БД для каждого объекта было как 10 объектов.

В настоящее время я тестирую миграцию, и предположил, что на странице редактирования будет огромный объем данных, и сама страница может работать медленно (будет четыре поля select2, каждый из которых будет иметь множественный выбор, каждый из которых будет иметь тысячи объектов для подключения к редактируемому объекту), но я удивлен, что это происходит на уровне Доктрины. Я надеялся, что Sonata Admin справится с этим, так как у него нет проблем с перечислением огромного количества Actor объектов, разбиение на страницы и т. Д.

Как я могу организовать работу с объектом Movie? Можете ли вы мне что-то посоветовать? Я думаю о changing that CRUD page, поэтому Select2 будет получать данные с Ajax, но я все еще не уверен, что это лучшая идея.

ответ

1

вам нужно подумать о том, как приложение будет использоваться. На панели редактирования вы думаете, что список всех возможных отношений (актеров, режиссеров ...) на вашей сущности будет лучшим UX, я так не думаю.

Ваша сущность получит все зависимости и увлажнит их в объекте. Вы можете увидеть, как это проблема для вашей памяти, даже если вы установили ограничение на 1To.

Я рекомендую использовать автозаполнение. Таким образом, вы не будете загружать тысячи неиспользуемых данных, приложение будет намного быстрее, и пользователь сможет искать то, что он ищет, вместо поиска в бесконечном поле выбора.

Надеюсь, это поможет.

+0

Да, я сейчас работаю над автозаполнением. Я сделал api действие для поиска, единственная проблема - настройка Sonata, которая для меня ада ... EDIT: надеюсь, SONATA_TYPE_MODEL_AUTOCOMPLETE поможет мне. – b174008

+0

Наконец - похоже, что он работает с SONATA_TYPE_MODEL_AUTOCOMPLETE из коробки. Теперь мне нужно только изменить «пользовательскую» сторону - я попробую PUGXAutocompleterBundle, может быть, это будет безболезненно. Благодарю. – b174008

-1

Вы можете увеличить memory_limit, добавив больше php.ini

найти правильный одно место phpInfo(); на верхней части AppKernel.php и поиск «php.ini» на выходе, а затем редактировать ини файл и изменить'memory_limit строки 2G, например

также, если возможно, следует избегать objecthydration (увлажняющее результирующих строк в сущность), который вызывает объем памяти будет исчерпан, вот некоторая информация о abvout что

http://labs.octivi.com/mastering-symfony2-performance-doctrine/