Kirill
Kirill
Почему?)
Null
Null
Почему?)
Ну а нафига, если есть сериалайзер?
Null
Его, обычно, за глаза хватает.
Null
Null
Вот да. Начинаю наконец-то понимать, когда двунаправленность оправданная.
И вот конкретно в ситуации коммент-его лайки вполне себе может быть оправданной.
Null
Тут главное на вопрос себе правильно ответить, является ли дочерняя сущность неотъемлимой частью родителя.
Павел
Дело как раз не в сериалайзере, а что часто нужно будет в 1 запросе получить данные сквозь 3, 4 сущности. И получается что модель надо будет как раз перегружать и теми же бидиректами ( п.с. я например особо не парюсь по поводу этого), и другим.
Null
Да я начитался НЕрекоммендации доктрины делать двунаправленки и везде так делал.
Щас наконец-то начало доходить.
Юзер - его комменты - разрывные сущности. Юзер имеет смысл без комментов.
Коммент - его аттачменты, лайки и прочее - вполне себе неразрывные и можно делать двушку.
Null
И еще вопрос.
Есть эти самые лайки-дизлайки.
Роут получения списка комментов.
Мне надо отдавать, какую именно оценку какому комменту поставил конкретно данный юзер.
Это вот в нормалайзере наверное не имеет смысла юзать? Или в контексте как раз логично передать текущего юзера?
Павел
Null
Ну да. Либо получить текущего из SEcutiry, но попахивает дурно. Лучше явно передавать, в КОНТЕКСТЕ какого юзера мы рассматриваем нормализацию.
Sanan
извините, а вы какую проблему тут решаете
Sanan
я только чат открыл чет нет сил перечитывать
Sanan
нужен пользователя как то определить или что?
Павел
Но надо копать и смотреть более точно, но что то такое есть
Sanan
для чего?
Sanan
в рамках какой задачи?
Sanan
я просто пробежал чуток по тексту выше, там чет про пользователя текущего и как его опредлить вроде
Null
Ну вот, для примера. Сущность комментария.
Нормализуется нормально.
Но в 3 роутах, допустим, стало необходимо добавить к списку комментов кол-во лайков под каждым комментом.
Null
А про юзера - это что комментам еще налепить надо, какие именно лайки-дизлайки ставил сам пользователь.
Null
И да, передавать раздельно комменты, отдельно карту лайков - типа отметаем. Допустим, фронт ендер упёрся и хочет "матрешки" в ответе.
Sanan
аа, ну смотри, для начала ты должен знать что за пользователь к тебе пришел смотреть ту или иную информацию, ну тут легко его определить. ну это чтобы понять он свои комменты хочет смотреть или чужие и какие у него права над комментами. Потом в сущности коммента я думаю у тебя наверняка есть подключенные коллекции с лайками и дизлайками. и и вот их можно как раз выдавать вместе с комментом в разных ситуациях по разному. например, если с фронта запрашивается один конкретный коммент, можно к нему одну инфу загрузить, а если запрашивается эта сущность коммента в другом запросе, как список комментов - то другую инфу подгрузить. т.е можно как ты хочешь и небольшой объект на фронт вернуть, и матрешку с кучей вложенной инфы
Павел
Null
XD как будто монологовский лог ошибки почитал.
Вы делаете то-то, вот до сюда.
Sanan
мне че сюда код написать чтоли
Sanan
или неясно как это делать
Sanan
или что
Null
Вопрос был просто не о том, что ты тут описал )
Жизненный цикл запроса, получение юзера, форматы ответа и так было понятно.
Мы тут нормалайзер и его снабжение доп. инфой обсуждаем.
Павел
мне че сюда код написать чтоли
Тут уже написали несколько способ включая самого ТС. Вопрос не как сделать, чтобы работало, а как сделать правильно, чтобы потом самому не блеватронить и другие разрабы не запинали, кто в этом разбирается
Sanan
Sanan
они и позволят снабжать доп инфой все что тебе надо
Sanan
и в нужном объеме
Sanan
Sanan
а конкретные запросы без лишнего
Sanan
ну это можно назвать наверное небольшой либой, где под капотом у тебя может быть какая то бизнес логика, которая влияет на генерацию самого запроса и выдачу ответа - разную, в зависимости и от потребности на фронте (разных кейсов)
Sanan
а ответить на вопрос как сделать правильно - ну это холивар
Sanan
один тебе скажет так правильно, другой сяк
Sanan
и можно часами спорить
Dmitriy
))
Sanan
ну и в конце, ты можешь написать какое то решение, и потом отрефакторить его по феншую
Sanan
и никто пинать не будет
Сергей
Вообще, для представления данных, собирать запросы через связи доктрины и запихивать их в нормалайзер, это крайне не экономично, прb 10+ комментариев, у вас на выборку и сериализацию отсчет времени на секунды пойдет.
Такие задачи лучше решать через один sql запрос, с последующей пост обработкой.
У нас например есть решение когда мы в sql собираем данные по смежным сущностям в поле в виде JSON, дальше парсим в ДТО (своими методами без сарилизатора) и отдаем на фронт, работает быстро на больших объемах и всего один запрос к БД.
UserId|UserTitle|EnotherUserFields....|Comments
234441|UserName.|OtherFieldsData......|[{id: 0, comment: 'Hello', likes: [{user_id: 123344, positive: true, time_stamp:'2022-02-02'}]]
Sanan
ну вот, уже псевдо код пошел в ход)))
Sanan
ну так решение сюда может написать сразу
Sanan
Вообще, для представления данных, собирать запросы через связи доктрины и запихивать их в нормалайзер, это крайне не экономично, прb 10+ комментариев, у вас на выборку и сериализацию отсчет времени на секунды пойдет.
Такие задачи лучше решать через один sql запрос, с последующей пост обработкой.
У нас например есть решение когда мы в sql собираем данные по смежным сущностям в поле в виде JSON, дальше парсим в ДТО (своими методами без сарилизатора) и отдаем на фронт, работает быстро на больших объемах и всего один запрос к БД.
UserId|UserTitle|EnotherUserFields....|Comments
234441|UserName.|OtherFieldsData......|[{id: 0, comment: 'Hello', likes: [{user_id: 123344, positive: true, time_stamp:'2022-02-02'}]]
ну вот я про это выше написал, что у меня мини либа, отличается от вашего тем, что там не конкретный sql запрос, а именно билдер, это чтобы он был более функциональным и можно было использовать под несколько схожих задач, для их решения. и в моем случае тоже всего один запрос в итоге получается. а далее - то что ответ можно запихать в дтошки - ну это классика, все так делают.. а эту же мысль услышать еще от одного чела в инете чтобы сделать то же самое... смысл?
Павел
Павел
Какой то сюр...
Sanan
ахахахах
Sanan
ну да
Nikolay
Sanan
другой вопрос если эта "динамика" просто подставляет пару вариантов в формирование конечного sql
Sanan
и ты точно знаешь какие там могут быть запросы на выходе, и все их вариации
Dmitriy
если простой запрос то хоть dql, хоть билдер без проблем заходит, потом результаты в дто через NEW
если что-то сложнее то нативный sql через dbal и маппинг в дто,
что тут еще придумывать
Сергей
Сергей
Dmitriy
да вообще пофиг, каждый извращается как хочет с формированием дто, хоть через серилайзер
Юра
Кастом нормалайзер напиши и добавь что надо
Юра
Проверь тип сущности и в нормалазй метоже волен делать что угодно
Юра
А если тип сущности не подходит делегируешь стандартному нормалайзеру
Юра
Точнее в твоём случае ты вызовешь дефолт нормалайзер и добавишь туда инфу
Юра
Только там нужен будет хак с контекстом чтобы избежать рекурсии
Dmitriy
Как мило
Иван
да отдавайте уже просто дто с публичными полями
пыха их самостоятельно в джейсон гонит
Юра
Кто-то использовал? https://spiral.dev/
Юра
Это же получается какой-то идеальный фоеймворк. Пхп. Скорость. Нормальная ОРМ. Сервис контейнер
Pavel
Юра
Ну чтобы понять надо попробовать, но выглядит как спасение из этого застоя
Юра
И заодно становится понятно зачем jit