Vlad
гоняешь джосны туды сюды
Павел
Павел
На симфони касте есть урок
Dmitry
кстати, странно что до сих пор нет встроенного json serializer
Dmitry
а ок
https://symfonycasts.com/screencast/messenger/transport-serializer
Павел
Виктор
Добрый день! Есть ли в Doctrine встроенный способ найти всех потомков сущности? Например, у меня есть фотоальбом, в котором находятся фотографии и фотоальбомы, в которых находятся фотографии и фотоальбомы и т.д.
Если конкретнее, то мне нужно вывести последние добавленные в данный фотоальбом и его потомков фотографии.
Михаил
Короче у тебя есть альбом A который хранит альбом B который хранит альбом C который хранит фотографии
И тебе нужно узнать есть последние фотографии в альбоме A или его предках
Для этого нужно выполнить рекурсивные запросы.
Сначала вытащить фотографии а потом их отсортировать и вытянуть крайние
Михаил
бласкбох говорит что примерно так
Но так как ты не делишься своей структурой -импровизируй
https://www.blackbox.ai/share/2f443e11-b986-4361-967b-1de848e9c037
Nikolay
Виктор
Ну да, в самописной версии приложения, которую я переписываю, у меня был как раз рекурсивный запрос на 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;
Михаил
Павел
Михаил
Виктор
а проблема то в чём
Ни в чём) Я думал, есть какой-то встроенный в Доктрину способ, который я не смог нагуглить. Всё же это, наверное, довольно распространённая задача. Но, похоже, что такого способа нет.
Михаил
$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
Как бы она, но реализация другая
Вадим
Юра
Вадим
Юра
Ну чтобы она не пыталась создать таблицу которая уже есть
Юра
Создаст новую
Юра
Ты хочешь натянуть орм на существующую таблицу?
Юра
Можешь конечно поиграться с названиями столбцов и т.д. но доктрина будет всегда пытаться синхронизировать свою модель с таблицами в базе
Вадим
Юра
Вроде есть параметр а консоль можно передать чтобы доктрина не удаляла ничего
Павел
Павел
Только натравил на существующую таблицу
Viktor
Не очень понял. И что, это не работает?
При создании миграции все равно генерируется код на создание таблицы, которая уже есть в Бд?
Павел
Павел
И в целом это верно, потому что этот флоу работает только на чтение
Павел
На запись он работать не может
Вадим
Павел
Зачем вам вообще такое?
Вадим
Вадим
Вадим
Павел
Вадим
бля
Вадим
не