Привет, есть такой вопрос - есть проблема с производительностью доктрины.

Условно у сущности много разных связей и у связей есть связи. При этом эти сущности не всегда нужны.
Может ли доктрина загрузить нужные связи сразу же при получении списка сущностей? Условно я получаю 100 пользователей и хочу получить сразу же их посты, комментарии, лайки, файлы и все остальное?
При этом в большинстве случаев загружать эти связи мне не надо.
Может ли доктрина сделать один запрос в главную таблица, один запрос в таблицу со связями и смапаить это все в сущности?

23 ответов

14 просмотров

fetch="eager"

николай-catman Автор вопроса
Дмитрий Ткаченко
fetch="eager"

Это в аннотации сущности верно? Но оно же будет для всех запросов всегда

read model

У вас проблема с дизайном системы а не с доктриной. Просто когда вам надо это все показывать то делайте запрос в базу и отдавайте массив получившийся

николай catman
Можно поподробнее?

Вам зачем столько данных надо в раз с базы тянуть? Предположу чтобы пользователю показать Ну вам для этого доктрина и объекты и гидрацию не надо просто читаете с базы массив и отдаете его куда вам там надо

николай catman
Можно поподробнее?

подробнее - тебе не надо восстанавливать объекты в памяти, чтобы их обратно сериализовать и показать на фронте. Запрашивай массивами или DTO

николай-catman Автор вопроса
Sergei Baikin
Вам зачем столько данных надо в раз с базы тянуть?...

Ну тут лишь пример, на самом деле. Есть сущность основная, вокруг которой строится предметная область - некий товар. У которого куча всяких свойств, типа различные цены, категории и тд

николай catman
Ну тут лишь пример, на самом деле. Есть сущность о...

так ну и зачем вам все это в раз надо? Зачем вам все эти связи?

николай catman
Ну тут лишь пример, на самом деле. Есть сущность о...

Какая нах предметная область для вывода юзеру на экран?

николай-catman Автор вопроса
николай catman
Чтобы отобразить пользователю

так для отобразить не нужна доктрина!

николай-catman Автор вопроса
Sergei Baikin
так для отобразить не нужна доктрина!

Я понял, использовать чистые (массив) и складывать в модельку

Может, вот решение: https://symfonycasts.com/screencast/doctrine-relations/join-n-plus-one

николай-catman Автор вопроса
Sergei Baikin
зачем вам моделька?

ну чтобы типизировать данные, туда сюда 🤔

николай catman
Я понял, использовать чистые (массив) и складывать...

Вам надо массив в json преобращовать и отправить не нужны никакие модельки

николай catman
ну чтобы типизировать данные, туда сюда 🤔

если только на чтение, зачем их типизировать в обе стороны, если очевидно тут только одна направленность - из БД в морду

николай catman
ну чтобы типизировать данные, туда сюда 🤔

у вас валидатор API (json schema например) может это хэндлить и тесты

николай-catman Автор вопроса
Дмитрий Ткаченко
если только на чтение, зачем их типизировать в обе...

просто всякие кеши есть. Я просто не настоящий симфонист/доктринист, поэтому у меня такие вопросы. Интересно было может ли доктрина делать запросики сразу, с минимум джойнов и тд (просто eloquent может это делать в нужный момент)

николай catman
просто всякие кеши есть. Я просто не настоящий сим...

может конечно, но восстановление объектов в памяти - слишком дорогостоящая операция с учетом заджойненого датасета. Если тебе не нужны объекты в памяти, и ты просто их достаешь и тут же сериализуешь на отдачу - так может сразу доставать в сериализованном или подготовленном под сериализацию виде?

николай-catman Автор вопроса
Дмитрий Ткаченко
может конечно, но восстановление объектов в памяти...

да, выглядит нормально, я запишу этот вариант 🙂

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта