Nikolay
ну и конкретно
Nikolay
TryParse
Рома
симфони предлагает состовлять сырые dql запросы?
Nikolay
Вот теперь с чистой совестью могу идти дальше. Статьи, куски кода, все привел:)
Nikolay
Сорри, что мог потревожить сложившиеся устои:)
Михаил
Причем к этому и приходишь через какое-то время
Павел
Слушай я думаю в твоём примере это было бы как $editDTO->createEditCommand(); Как итог - твоя команда ничего не знает про валидацию и реквест.
Кстати немного дополню. В вашем случае editDto dto то и не является. Вы его никуда не передаете. Это автомаппер реквеста и фабрика команды. Так что в целом даже валидно, кроме того что это не дто ни по названию ни по его назначению
Nikolay
симфони предлагает состовлять сырые dql запросы?
с помощью напильника можешь Eloquent попробовать прикрутить
Павел
Рома
'SELECT category FROM App\Entity\Category as category' емае и зачем?
Михаил
'SELECT category FROM App\Entity\Category as category' емае и зачем?
Давай-давай - ты же хочешь стать симфонистом
Рома
ясно воспользуюсь билдером)
Nikolay
Не ну серьезно парень, почитай сначала документацию
Михаил
с помощью напильника можешь Eloquent попробовать прикрутить
Забавно, Laralisы обычно наоборот с Eloquent на доктрину съезжают, потому что насиловать бд это не айс
Nikolay
Хотя доктрина да, это ужас:)
Nikolay
'SELECT category FROM App\Entity\Category as category' емае и зачем?
Такой запрос лучше через репозиторий делать, findoneby
Михаил
Такой запрос лучше через репозиторий делать, findoneby
нее, не правильно. Прям в контроллере
Рома
https://symfonycasts.com/screencast/doctrine-queries/dql
Nikolay
Забавно, Laralisы обычно наоборот с Eloquent на доктрину съезжают, потому что насиловать бд это не айс
да вроде пользуются. Я сам перешел чисто на кверибилдеры и нативные sql, а ответы гидратором маплю
Михаил
Вообще не понимаю от куда ты там пример DQL нашёл Обычно если хотят сырой запрос то используют rsm <?php use Doctrine\ORM\Query\ResultSetMapping; $rsm = new ResultSetMapping(); // build rsm here $query = $entityManager->createNativeQuery('SELECT id, name, discr FROM users WHERE name = ?', $rsm); $query->setParameter(1, 'romanb'); $users = $query->getResult();
Михаил
RSM Чем хорош - он добавляет сущность в UnitOfWork и дальше с ней можно работать через EM
Рома
я просто думал есть что то удобнее кверибилдера а доки по DQL даже нет
Nikolay
нативный-нативный? То connection^)
Nikolay
PDO
Михаил
<?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();
Михаил
Вообще ResultSetMapping может делать такое
Михаил
то есть ты можешь создать пользака нативным запросом
Михаил
но если пользак уже есть - то просто обновить и не отлететь в Entity Manager Is Closed
Михаил
и плюс к тому пользак добавится в Entity Manager где дальше ты можешь с ним нормально работать
Михаил
каеф
Михаил
ларка сосат
Рома
ну понятно в общем ещё и выбирать между DQL и билдером который медленее собирает тот же DQL
Рома
а вот верный подход $qb = $entityManager->createQueryBuilder(); $qb->select('u')->from('User', 'u');
Михаил
Пацаны мы же не будем ему говорить про? $this->getOneBy(['status' => $status, 'createdAt' => $createdAt], ['id' => 'DESC']);
Рома
а если не one?
Михаил
$qb = $entityManager->createQueryBuilder(); это синоним $qb = $entityManager->createQueryBuilder(); $qb->select('u')->from('User', 'u'); но только если ты вызываешь в контексте репозитория
Рома
Required parameter '$alias' missing
Михаил
Михаил
ну или findAll
Михаил
у репозитория ещё есть matching которий criteria принимает
Рома
не то что-то
Nikolay
не то что-то
Что не то?
Михаил
не то что-то
ну а как ты думаешь что не так?
Nikolay
Такое чувство, что код в блокноте пишется, и подсказок никаких нет
Рома
о да спасибо
Рома
public function search(?string $status, ?string $createdAt, ?string $updatedAt) { return $this->findBy(['status' => $status]); }
Рома
есть польза от ServiceEntityRepository такое бы в лару)
Рома
а like как вставить?
Михаил
Циклом потом пройдись и найди
Рома
$qb = $em->getRepository("Orders")->createQueryBuilder('o'); $result = $qb->where('o.OrderEmail = :email') ->andWhere($qb->expr()->like('o.Product', ':product')) ->setParameter('email', 'some@mail.com') ->setParameter('product', 'My Products%') ->getQuery() ->getResult(); нашел правильный синтаксис
Рома
xpressionBuilder = Criteria::expr(); $expression = $expressionBuilder->contains('fieldName', 'value'); $collection->matching(new Criteria($expression)); ещё такое есть что за Criteria
Михаил
Во
Я тебе его нашёл 1 дисскуссию назад
Михаил
Как коллекций в бд, так и объектов коллекций
Рома
public function search(?string $status, ?string $created_at, ?string $updated_at) { $qb = $this->createQueryBuilder('s')->select('stmt'); if ($status) { $qb->andWhere('s.status = :status') ->setParameter('status', $status); } return $qb->getQuery(); } "detail": "[Semantical Error] line 0, col 7 near 'stmt FROM App\\Entity\\Stmt': Error: 'stmt' is not defined.", "class": "Doctrine\\ORM\\Query\\QueryException", уже бомбит)
Павел
https://blog.ploeh.dk/2022/09/12/coalescing-dtos/
Не понятно что такое reservation сушность или что. Если сущность вопрос с зависимостями остаётся открыт. Если нет, то она создаёт команду или что. Опять же правила валидации, а если они более сложные. Копипастить логику сложную логику валилации между дто? Опять же если это дто, куда оно передавалось и зачем это делать сборку именно в дто? В общем хз, рандомная статья без профита. Для чего все это? Если валидация еще возможно ок, тип объект проверяет свою сборку на типы, хотя спорно тоже для дто,то сборка сущности - херня какая то без ответов про зависимости
Рома
$qb = $this->createQueryBuilder('s') ->select('stmt') ->from('stmt', 's'); if ($status) { $qb->andWhere('s.status = :status') ->setParameter('status', $status); } return $qb->getQuery(); подскажите что не так "detail": "[Semantical Error] line 0, col 36 near 'stmt s WHERE': Error: Class 'stmt' is not defined.", "class": "Doctrine\\ORM\\Query\\QueryException",
Рома
тоже самое
Рома
https://www.youtube.com/playlist?list=PLd-N2eP0f6v4S12e1W52lcWcBObMpZeAs ладно продолжу смотреть курс)
Nikolay
А те кому реально было интересно узнать, думаю поняли, что расширять её можно
Павел
Ок. Как я сказал гораздо выше, можно все
Nikolay
Статья, Книга. Вопрос был можно расширять? Можно. Есть статьи? Есть. Есть книги? Есть. Даже аспектное программирование и им расширили дто. Все ос альное техническая реалищация
Павел
Статья, Книга. Вопрос был можно расширять? Можно. Есть статьи? Есть. Есть книги? Есть. Даже аспектное программирование и им расширили дто. Все ос альное техническая реалищация
Вопрос в том, расширить на что. То что можно сделать сборку, разборку я писал и сам выше. Например toArray fromArray. Минимальную валилацию при этих операциях. Какой нить from Request. Потому что это не лезет в изменение апликейшена, а затрагивает только дто, чтобы не делать на каждую дто ещё фабрики . Но создание сущности внутри дто это уже другой уровень. Опять же что с зависимостями? Почему вы пропускаете этот вопрос?
Nikolay
С какими зависимостями?
Павел
Когда вы пихаете логику в дто суть больше чем нихера, то это влечёт риск того что не сможете её расширить или же в дто пихать зависимости что дичь. А если не сможете расширить и пропихнуть зависимости, то выходит надо выносить из дто. И зачем иметь этот риск и рефакторинг если можно не иметь.
Павел
С какими зависимостями?
Если в reservation нужна другая сущность из бд
Павел
Например reservationCategory
Nikolay
То есть нужны тебе зависимости ну проинжекть. Ещё раз метод parse создает из менее структурированной сущности более структурировпнную. Не хочешь инжектить не используя этот способ и все
Павел
Ну ок
Nikolay
Хочешь - инжекть. Он остаётся сериализуемыи? Да. Вот есть у меня задача, сделать User, я использую parse. Это не значит, что это единственно возможный подход. Вы же предоагаете мне делать вообще все в ней
Nikolay
Ну расширяй своё дто, чем метод Parse потарадает?
Nikolay
А то уже началось. И побочные методы добавляем и все что в голову вбредет. Чем Parse будет отличаться от toArray?