Vlad
гоняешь джосны туды сюды
Павел
На симфони касте есть урок
Dmitry
кстати, странно что до сих пор нет встроенного json serializer
Dmitry
Свой сериалайзер (в рамках мессенджера, а не компонента сериалайзер), чтобы работать через json чистый
Буду признателен за ссылку, а то чет не то https://symfonycasts.com/screencast/messenger/sending-json https://symfonycasts.com/screencast/messenger/serializer-headers-options
Dmitry
а ок https://symfonycasts.com/screencast/messenger/transport-serializer
Виктор
Добрый день! Есть ли в Doctrine встроенный способ найти всех потомков сущности? Например, у меня есть фотоальбом, в котором находятся фотографии и фотоальбомы, в которых находятся фотографии и фотоальбомы и т.д. Если конкретнее, то мне нужно вывести последние добавленные в данный фотоальбом и его потомков фотографии.
Михаил
Короче у тебя есть альбом A который хранит альбом B который хранит альбом C который хранит фотографии И тебе нужно узнать есть последние фотографии в альбоме A или его предках Для этого нужно выполнить рекурсивные запросы. Сначала вытащить фотографии а потом их отсортировать и вытянуть крайние
Михаил
бласкбох говорит что примерно так Но так как ты не делишься своей структурой -импровизируй https://www.blackbox.ai/share/2f443e11-b986-4361-967b-1de848e9c037
Виктор
Ну да, в самописной версии приложения, которую я переписываю, у меня был как раз рекурсивный запрос на WITH. Я получал им альбомы, а затем из каждого тащил фотографии отдельным запросом и с ними уже работал. Ну в принципе так же, как по ссылке. Сам запрос был вот таким: WITH children (child) AS ( SELECT id FROM album WHERE parent = :id UNION ALL SELECT a.id FROM children c JOIN album a ON c.child = a.parent ) SELECT * FROM children ORDER BY child;
Михаил
Один из вполне нестремных споосбов - это сделать сложный запрос на raw sql а потом findByIds уже сущности
Зачем findById просто выполняешь запрос и всё, сущности у тебя в кармане
Виктор
а проблема то в чём
Ни в чём) Я думал, есть какой-то встроенный в Доктрину способ, который я не смог нагуглить. Всё же это, наверное, довольно распространённая задача. Но, похоже, что такого способа нет.
Павел
Зачем findById просто выполняешь запрос и всё, сущности у тебя в кармане
Raw sql не даст сущности, а только массив, только если делать ResultSetMapping что вполне гемор
Михаил
$rsm = new ResultSetMapping(); // build rsm here $query = $entityManager->createNativeQuery(" WITH children (child) AS ( SELECT id FROM album WHERE parent = :id UNION ALL SELECT a.id FROM children c JOIN album a ON c.child = a.parent ) SELECT * FROM children ORDER BY child ", $rsm); $query->setParameter('id', $id); $users = $query->getResult();
Виктор
Всем спасибо, значит воспользуюсь старым запросом)
Михаил
а делать миллион запросов к бд не гемор
Павел
прям гемор да?
Это что то не то))
Павел
Там надо минмиум промапить каждое поле из бд на поле из сущности
Михаил
Виталий
Там надо минмиум промапить каждое поле из бд на поле из сущности
если поля совпадают с полями сущности, то автоматом смаппится
Михаил
щас долго до реально проекта тянуться - проще попробовать
Михаил
https://www.doctrine-project.org/projects/doctrine-orm/en/3.1/reference/native-sql.html
Михаил
вот вкурите - рсм это магия которая упрощает всё в тысячу раз
Михаил
я вот скидывал пример, работает как магия <?php use Doctrine\ORM\Query\ResultSetMapping; $rsm = new ResultSetMapping(); $sql = " INSERT INTO users (...) ON CONFLICT hui_pizda DO UPDATE set ... RETURNING users.* " $query = $entityManager->createNativeQuery($sql', $rsm); $query->setParameters($data); $user = $query->getResult();
Михаил
вставил (если уже есть то обновил) и всё добавилось в EdentityMap
Павел
Вообще написано, что надо rsm строить а не пустой запускать
Павел
Хз мб и с путсым работает, не тестил
Павел
$rsm = new ResultSetMapping(); // build rsm here
Михаил
вроде как условие - внутри репозитория дёргай $entityManager->createNativeQuery тогда автоматом смапится
Михаил
$rsm = new ResultSetMapping(); // build rsm here
А если ниже пролистать $rsm = new ResultSetMappingBuilder($entityManager); $rsm->addRootEntityFromClassMetadata('MyProject\User', 'u'); $rsm->addJoinedEntityFromClassMetadata('MyProject\Address', 'a', 'u', 'address', array('id' => 'address_id'));
Павел
Но когда другие штуки читал, там вроде все поля были. Ну ок, если можно, то оч круто, спасибо за наводку
Павел
ну гемор гемором? ))
Больше смайлов))))))))))))))))))))))))
Михаил
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Михаил
Да, вот эта штука автоматом маппит
да, щас в свой проект залез - во так вот и надо
Михаил
Ага, реально работает
Михаил
Только нужно помнить что если вы используете jsonb оператор '?|' то его нужно писать как '??|' иначе парсер воспринимает это как незаданный параметр
Вадим
привет! Подскажите пожалуйста можно ли с помощью ApiPlatform\Metadata\Link создать связь через третью сущность? Есть такие сущности: Project <-> ProjectUserRoles <-> Users В Api Platform хочу создать такой ресурс /project/{projectId}/users
Вадим
привет! подскажите по доктрине. Я вручную создал связь ManyToMany, используя табицу третьей сущности как промежуточную. Теперь доктрина хочет создавать эту таблицу, а она уже же есть. Как ей сказать чтобы она этого не делала?
kakoi-to-noob
Тогда это уже не many to many связь, а через отдельную сущность
kakoi-to-noob
Как бы она, но реализация другая
Юра
Ну чтобы она не пыталась создать таблицу которая уже есть
Юра
Создаст новую
Вадим
Ну чтобы она не пыталась создать таблицу которая уже есть
это классно. А как она работать будет через ту что мне надо?
Юра
Ты хочешь натянуть орм на существующую таблицу?
Павел
это классно. А как она работать будет через ту что мне надо?
Это требование не отвечает маппингу и орм. Можно попробовать заблокировать таблицу, возможно поможет. Но вообще флоу для доктрины неверный
Юра
Можешь конечно поиграться с названиями столбцов и т.д. но доктрина будет всегда пытаться синхронизировать свою модель с таблицами в базе
Павел
Ты хочешь натянуть орм на существующую таблицу?
Я так понимаю у ТС есть некая таблица для сущности, допустим из 10 столбцов, и он создал m-to-m у других сущностей с помощью настройки связи используя 2 стобца из 10
Юра
Вроде есть параметр а консоль можно передать чтобы доктрина не удаляла ничего
Viktor
это классно. А как она работать будет через ту что мне надо?
https://www.doctrine-project.org/projects/doctrine-orm/en/3.1/reference/association-mapping.html#many-to-many-unidirectional Вот тут есть атрибуты, как и сказал @zim_it , которые позволяют задать вручную параметры для pivot таблицы
Павел
Только натравил на существующую таблицу
Viktor
Не очень понял. И что, это не работает? При создании миграции все равно генерируется код на создание таблицы, которая уже есть в Бд?
Павел
И в целом это верно, потому что этот флоу работает только на чтение
Павел
На запись он работать не может
Вадим
На запись он работать не может
бог с ним, запись не нужна
Павел
бог с ним, запись не нужна
Да я сам так делал)) но это плохой путь имхо
Павел
Зачем вам вообще такое?
Вадим
Да я сам так делал)) но это плохой путь имхо
так-так, вот тут пож попоробнее
Павел
так-так, вот тут пож попоробнее
Ну делал как вы и потом забивал на автогенерацию))
Вадим
Вадим
бля
Вадим
не