Михаил
$query = $query->where('status = :status')->setParameter('status', $status );
Nikolay
Павел
Для создания сущностей сложных фабрики, на то они и фабрики
Nikolay
Тогда для чего может быть в DTO метод Parse?
Павел
Юра
Михаил
или вроде как
$query->where($query->expr()->eq('status', $status));
Павел
C каких пор мы создаем объекты методом parse? Тем более сущности домена
Михаил
Павел
Опять же вопрос по зависимые объекты, остается открытым
Рома
а так? query->andWhere('status', $status)->getQuery();
Рома
а тоесть нельзя собрать из кусков что-ли в симфони?
Рома
это же билдер вроде
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
Михаил
Павел
Судя по тому что написано, то это не в самой дто. Написано, что validate(который стоило бы переименовать в parse) принимает dto
Михаил
Рома
"detail": "Attempted to call function \"like\" from namespace \"App\\Repository\".",
Михаил
Ну ты блин не в тупую копируй
Михаил
я забыл добавит >
Павел
Павел
Так будет наверное полегче на первых парах
Павел
Я вообще не особо понимаю его смысл, кроме как в сложных билдерах
Павел
Ну и возможно для абстракций под другие БД, что почти нереальный кейс
Михаил
Михаил
возможно like нет в Criteria
Рома
[Semantical Error] line 0, col 44 near 'status = Res': Error: 'status' is not defined
Михаил
упс, провалю все собесы из-за того что симфони - жопа полна огурцов и всё везде намешанно
Рома
че за
Михаил
Nikolay
А 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();
}
Рома
Михаил
Nikolay
stmt не надо называть, лучше по имени таблицы
Михаил
SELECT FROM users as u <—— алиас
Павел
Павел
Что то новенькое
Рома
типо название таблицы в бд? как DB::table('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, когда вы можете, поскольку он проще и читабельнее.
Михаил
Рома
это 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()
Nikolay
Михаил
Ну ты и редачер
Михаил
Да, вот это dql