Apxat
https://www.youtube.com/watch?v=Soqxx-CejhE
Павел
Квери билдеры нынче не в почете... Бида.
Да не, в целом где что удобно, то и юзать. Я единственное не понимаю когда пишут DQL без квери билдера. Типа прям запрос в котором пути к сущностям
Kirill
квери билдеры нужны для того, чтобы строить запросы, верно?
Kirill
а запросы строить требуется ровно в одном случае, когда есть какое-то условие, в зависимости от которого запрос может быть перестроен
Kirill
в противном случае смысла никакого в квери билдере не только нет, но он ещё и скорее мешает
Kirill
а почему я не понял -)
ответ простой: потому что ниасилили)
Павел
а запросы строить требуется ровно в одном случае, когда есть какое-то условие, в зависимости от которого запрос может быть перестроен
А если нет такого условия, то берется репозиторий и всё )) Не вижу смысла писать такое руками select u from App/Entity/User u where u.id = $1
Павел
Опять же если брать qb, то будет быстрее с учетом автокомплита
Kirill
для этого и квери билдер не нужен
Павел
@SerafimArts ты пишешь в стиле пример которого я написал?
Kirill
Ну вот запрос тебе, перепиши его на qb
Kirill
$query = $this->dql(<<<'DQL' SELECT lobby FROM App\Domain\Lobby\Lobby lobby WHERE SIZE(lobby.players) = 0 DQL);
Kirill
причём запрос довольно простой
Kirill
я полностью согласился бы с тобой, если б dql не автокомплитился и там не было бы рефакторинга или подсказок
Павел
$query = $this->dql(<<<'DQL' SELECT lobby FROM App\Domain\Lobby\Lobby lobby WHERE SIZE(lobby.players) = 0 DQL);
$qb->from(Lobby::class, 'l')->where('SIZE(l.players) = :s')->setParameter('s'), 0)
The Ant
а запросы строить требуется ровно в одном случае, когда есть какое-то условие, в зависимости от которого запрос может быть перестроен
Или когда куча подзапросов, которые через юнион объединяются в один. М.б. даже в цикле. Или ещё что-то такое сложное, которое бьётся на части. Да мало ли. Удобней код читать кусками, а не сам запрос в несколько экранов простыней.
Kirill
ээээ, так нельзя же так вроде
Kirill
SIZE - это функция DQL
Павел
SIZE - это функция DQL
qb строит dql запрос по параметрам.
Kirill
а, ну мб, почти не пользуюсь qb
Павел
$query = $this->dql(<<<'DQL' SELECT lobby FROM App\Domain\Lobby\Lobby lobby WHERE SIZE(lobby.players) = 0 DQL);
Адок конечно такое писать. А если сущность поменяет свое расположение?
Kirill
шторм поправит сам всё
Павел
и в чём проблема?
Ну надо запрос переписывать, или искать по вхождению полного пути?
Kirill
не надо ничего переписывать
Kirill
это же встроенный язык
Павел
шторм поправит сам всё
Так у тебя текст просто, а не fqn
Павел
так это dql
Тип шторм понимает отдельный такой контекст here doca ?
Kirill
ну конечно
Kirill
Павел
Жуть)
The Ant
Тип шторм понимает отдельный такой контекст here doca ?
Просто у Кирилла стоит галочка "заменять в тексте" 😄
Павел
Просто у Кирилла стоит галочка "заменять в тексте" 😄
Ну про это тоже думал. Но все равно не вижу вообще никакого профита
Павел
qb тоже подсвечивается
Kirill
ну так это-то понятно
Kirill
и функции зареганные в доктрине подсвечиваются все
Kirill
в любом случае видеть сразу запрос, если он длиннее тупого файнда по id - проще так
Павел
Короче я понял, что люди так пишут, встречаю не первый раз, не понимаю зачем ну да ладно )) Но теперь уже 2 версии: - экономия ресурсов на qb - автокомплит шторма по контексту HERE DOC (хотя я в принципе ниразу не обламывался)
Kirill
ну типа у меня позиция: для каждой задачи свой инструмент, доктрина благо предоставляет их 5 штук на все случаи жизни)))
Kirill
1) нативные квери 2) dql 3) квери билдер 4) спеки 5) хелперы findX/getX в репах
The Ant
У тебя кстати инфраструктура в домене, почему так?
Kirill
У тебя кстати инфраструктура в домене, почему так?
с какого фига аггрегат рут - это инфра?
The Ant
Потому что сущности дохтрины
The Ant
Они инфраструктурые
Kirill
а каким боком сущности связаны с доктриной?
The Ant
Это персистенс слой вообще
Kirill
персистенс - это репы
The Ant
Репы это доктрина, и ее сущности
Kirill
ещё раз спрашиваю, почему энтити, ака аггрегаты - это инфра
The Ant
Потому что доктрина, вот почему, и персистенс
Kirill
ещё раз, причём тут доктрина?
Kirill
как вообще сущности связаны с доктииной?
The Ant
Что она у тебя в домене делает?
Kirill
кто?
The Ant
Доктрина
Kirill
там ни строчки доктрины нет
Павел
Они инфраструктурые
Проголосую против
The Ant
А сущности есть. И даже dql доктриновских юзаешь
The Ant
Как так-то?
Kirill
ну конечно есть, потому что сущности - часть ддд)
Kirill
и часть домена
The Ant
И дэкуэл тоже часть домена ) ладно, я понял )
Kirill
где?
The Ant
На скрине выше
Kirill
чо? там ни на одном скрине нет неймспейса
The Ant
Догадаться несложно 🤷
Kirill
пиздец...
The Ant
Я тож так думаю )
Павел
@theantt Сущности доктрины это просто классики с логикой. На них ты прописываешь аспектами (аттрибутами) маппинг на бд, но ты можешь это сделать через xml. При этом остальной код у тебя не изменится. Далее репо. Интерфейс прописывается в домене Реализация с dql и прочим - в инфре. Но опять же это если разделять на интерфейс и реализацию, зачастую бесполнезный дроч
Kirill
ты охуенные выводы делаешь, конечно
The Ant
ты охуенные выводы делаешь, конечно
Так ты ж в домене этот репо дергаешь?
Павел
Но опять же, если не разделять на интерфейсРепо и РеализациюРепо, то репо бы я засунул в домен и не парился, потому что это доменный контракт, всегда можно вычленить его в интерфейс потом без смены путей и логики
The Ant
сфигали?
Ну там вопрос