Михаил
$query = $query->where('status = :status')->setParameter('status', $status );
Павел
Для создания сущностей сложных фабрики, на то они и фабрики
Nikolay
Тогда для чего может быть в DTO метод Parse?
Павел
Тогда для чего может быть в DTO метод Parse?
Он даже называется не create а parse
Михаил
или вроде как $query->where($query->expr()->eq('status', $status));
Павел
C каких пор мы создаем объекты методом parse? Тем более сущности домена
Павел
Опять же вопрос по зависимые объекты, остается открытым
Рома
а так? query->andWhere('status', $status)->getQuery();
Рома
а тоесть нельзя собрать из кусков что-ли в симфони?
Юра
разве, там же flued interface?
Нет смысла переприсваивать query
Рома
это же билдер вроде
Nikolay
Может он Java разработчик и у них там это принято. Причем в книге он использует create^) а в конце главы пишет, что лично в проектах использует PArse. Так как он считает, что DTO когда строит объект это не фабрика а анализ DTO и перевод в более Стройную структуру
Юра
это же билдер вроде
Да сорян. Не проснулся )
Михаил
$qb = $this->createQueryBuilder('stmt'); if ($status) { $qb->andWhere($qb->expr()->eq('status', $status)); } if ($created_at) { $qb->andWhere(($qb->expr()-like('created_at', $created_at.'%')); } if ($updated_at) { $qb->andWhere(($qb->expr()-like('updated_at', $updated_at.'%')); } return $qb->getQuery()->getResult();
Михаил
Вроде как то так
Nikolay
Nikolay
Извиняюсь, там C#, сейчас пролистал ее:)
Рома
подскажи что такое expr()->eq
Михаил
подскажи что такое expr()->eq
хз, все используют и я использую
Павел
Судя по тому что написано, то это не в самой дто. Написано, что validate(который стоило бы переименовать в parse) принимает dto
Рома
"detail": "Attempted to call function \"like\" from namespace \"App\\Repository\".",
Михаил
Ну ты блин не в тупую копируй
Михаил
я забыл добавит >
Павел
Так будет наверное полегче на первых парах
Рома
а вообще сильно параметризованные запросы не очень
а я читал, наоборот так лучше защита от sql иньекций
Павел
Я вообще не особо понимаю его смысл, кроме как в сложных билдерах
Павел
Ну и возможно для абстракций под другие БД, что почти нереальный кейс
Михаил
возможно like нет в Criteria
Рома
[Semantical Error] line 0, col 44 near 'status = Res': Error: 'status' is not defined
Михаил
упс, провалю все собесы из-за того что симфони - жопа полна огурцов и всё везде намешанно
Рома
че за
Nikolay
А like зачем для дат
Михаил
А like зачем для дат
ну надо человеку
Рома
[Semantical Error] line 0, col 58 near 'Resolved': Error: 'Resolved' is not defined уже ближе
Михаил
может у нешл даты строки
Павел
У вас в qb обявлен альяс сущности, stmt. К полям обращаются через альяс
Nikolay
может у нешл даты строки
Тогда сочувствую ему
Павел
this->createQueryBuilder('stmt') Вот тут альяс объявлен
Рома
public function search(?string $status, ?string $created_at, ?string $updated_at) { $qb = $this->createQueryBuilder('stmt'); if ($status) { $qb->andWhere($qb->expr()->eq('stmt.status', $status)); } return $qb->getQuery()->getResult(); }
Михаил
Павел
что такое альянс?
Альяс. Это как обращаться к сущность в dql
Nikolay
stmt не надо называть, лучше по имени таблицы
Михаил
SELECT FROM users as u <—— алиас
Павел
Что то новенькое
Рома
типо название таблицы в бд? как DB::table('stmt')
Михаил
stmt не надо называть, лучше по имени таблицы
так так так, а если у меня подзапросы на той же таблице?
Михаил
а стой. у тебя же таблица и называется stmt?
Павел
this->createQueryBuilder('stmt') stmt - это любой литерал, т.е. можно написать проcто s. this->createQueryBuilder('s') Тогда условия писать через s.status, s.createdAt Еще момент, вы пишите в DQL, это doctrine query language. Там вы работаете с ПРОПЕРТЯМИ а не с колонками
Михаил
просто s или st
Рома
лан почитаю доку https://www.doctrine-project.org/projects/doctrine-orm/en/3.1/reference/query-builder.html
Павел
А еще лучше перестать тероризировать чат и почитать доку и симфони каст))
Павел
Можете чат гпт помучать
Павел
Он скорее всего норм ответит на простые кейсы и вопросы
Павел
и купить подписку на симфони каст
Ну текстовый доступен бесплатно был, но можно и подписку если надо)
Павел
Текстовый даже быстрее пробежаться
Рома
QueryBuilder - это не абстракция DQL, а всего лишь инструмент для его динамической сборки. Вам все равно следует использовать обычный DQL, когда вы можете, поскольку он проще и читабельнее.
Владимир
и купить подписку на симфони каст
На рутрекере есть дамб за 2022 год) Не очень актуально, но... Бесплатно 🏴‍☠️
Михаил
Во
Рома
это DQL? class CategoryRepository extends ServiceEntityRepository { // ... lines 19 - 26 public function findAllOrdered(): array { $dql = 'SELECT category FROM App\Entity\Category as category'; $query = $this->getEntityManager()->createQuery($dql); return $query->getResult(); } // ... lines 34 - 76 }
Михаил
https://www.blackbox.ai/share/0fe53393-2e3a-40e6-bc62-fe34acfd1bc7
Михаил
составь любой запрос а потом сделай $qb->getDQL()
Михаил
Ну ты и редачер
Михаил
Да, вот это dql