Юра
Это так кажется только что да что там делать
Роман
О да. Особенно сейчас, где будут всякие интересности всплывать внезапно
Ну не бездумно же пичкать. Бездумно и в суперзащищенном фреймфорке/цмс можно нахуевертить кучу эксплойтов.
Роман
Это так кажется только что да что там делать
Ну, опять же, все зависит от задачи
Юра
Так магенто это что-то как вордпресс для блогов только в екомерс?
Юра
Или не настолько популярен?
Роман
Это так кажется только что да что там делать
Если цмс для продажи сотни товаров хэндмэйд, то за 2 недели вполне вменяемое что-то получится. Но это есть и другая сторона
Роман
Если цмс для продажи сотни товаров хэндмэйд, то за 2 недели вполне вменяемое что-то получится. Но это есть и другая сторона
Я например, не могу завести свой сайт, т.к. мне вечно что-то не нравится - в итоге, постоянные доработки. Нездоровый перфекционизм такой... (
Юра
А она интегрируется с бухучетом?
Юра
Или там просто экспорт и потом импорты писать куда надо?
Роман
Так магенто это что-то как вордпресс для блогов только в екомерс?
Мадженто - Битрикс примерно аналогично как оперкарт - цскарт.
Alexey
Опять же, может конечные цели битры и магенты схожи, но это небо и земля. Причём битрикс это земля.
Роман
Опять же, может конечные цели битры и магенты схожи, но это небо и земля. Причём битрикс это земля.
Ну я о целях и писал. На них веди ориентируются при выборе. А Битрикс не земля - это дно глубокой ямы. Примерно так: Два мужика на Луну смотрят. — Луна… Она мне напоминает лицо любимой девушки… — А мне дырку в жопе! — Ты что?! Луна — это такое светлое, а дырка в жопе тёмная ! — Да нет, ты не понял - мы как бы внутри...
Роман
Хотя, если дописывать в Битрикс что-то новое на ванильном пыхе, используя готовую систему как неизменяемый изолированный контейнер-хранилище, то терпимо. ))
Alexey
С родным чекаутом битры однозначно.
Alexey
Да и пожалуй со всем, что требует основательной кастомизации
Роман
Да и пожалуй со всем, что требует основательной кастомизации
Основательная кастомизация - это гемор в любой системе с предустановленными функциями/инструментами.
A
коллеги, подскажите, а где лучше реализовать код: мне нужно получить кол-во сущности User, который удовлетворяет определенным критериям. Т.е. произвольный метод, который возвращает результат выполнения агрегированных функций. Такие методы нужно в репозитории сущности писать?
Юра
Угу
A
Угу
а есть какие-то устоявшиеся принципы нейминга таких методов?
A
countNotBanned() или getCountNotBanned() ?)
Иван
findAll(Filter $filter): Paginator
Иван
а Paginator implements Countable
A
а через пагинатор мы не усложняем ?
Иван
а через пагинатор мы не усложняем ?
нет, скорее засовываем в один метод и получение данных и получение количества понятно дело и то и другое должно через ленивки реализовываться
artem
У нас своя цмс
Ну изи же за полгода можно наклепать в однолицо
Pavel
А само апи друпала как? Понятное?
Иван уже исчерпывающе ответил, но я дополню немного) Drupal это cmf с готовой архитектурой, очень большой игрок. С версии 8 переписан на ООП и использует компоненты symfony. API у него очень большое и вот тут встаёт вопрос в том, что нужно получить в итоге. Скажу субъективно при условии прямых рук исполнителя. Если надо сделать среднестатистический сайт, надёжно и быстро - Drupal один из лучших и можно спать спокойно. Если нужно сделать какой то микросервис, Drupal вероятно будет избыточен. В любом случае если знаете symfony, в современном Drupal будете испытывать удовольствие от кода. Хотите берите модуль, хотите пишите сами, что угодно на выбор. Можно сделать сущности через админку, можно сущность захардкодить - все что угодно.
Юра
А работа с бд там через доктрину идет?
Pavel
А работа с бд там через доктрину идет?
Нет, своя реализация, но если говорить про конструктор запросов - очень похоже
Юра
Эх
Pavel
Ну doctrine это и не symfony) отдельный продукт
A
а если у репозитория есть метод findAllWithUser() в каких-то местах, мне нужно получить кол-во записей, которые возвращает вышеописанный метод. на практике лучше использовать count(findAllWithUser()) или лучше отдельным метод дублировать, который будет возвращать сразу скалярку ?
A
есть подозрение, что доктрина не всегда может правильно оптимизировать в таких случаях count(findAllWithUser())
A
Если у вас есть пагинация на странице, то count вернёт количество только этой страницы
нету. мне нужно из репозитория получить кол-во данных для отчета.
A
и не понятно, использовать существующий метод репозитория, который возвращает данные, и обернуть его в count() функцию. или писать новый метод репозитория, который будет возвращать скалярку
Елнур
Если пагинации нет, но у вас очень большое количество элементов, то получив все элементы, будет использоваться много озу
Елнур
Если так и так получаете все элементы, то зачем ещё один запрос? Лучше просто count()
A
а разве доктрина но оптимизирует подобные запросы?
A
т.е. если я не использую данные, то сам запрос не будет срабатывать
A
если не ошибаюсь. возможно и не прав
Иван
Если у вас есть пагинация на странице, то count вернёт количество только этой страницы
зависит от реализации пагинатора каунтабл не обязан возвращать количество элементов итератора или аррай аццеса
Иван
а разве доктрина но оптимизирует подобные запросы?
доктрина нет, может быть база оптимизирует, но от доктрины крайне хреновый запрос приходит по умолчанию если ничего не поменялось за два года
Konstantin
и не понятно, использовать существующий метод репозитория, который возвращает данные, и обернуть его в count() функцию. или писать новый метод репозитория, который будет возвращать скалярку
используйте квери билдер, можно логику запроса инкапсулировать в него (все ваши where/group by etc), а в прикладных методах либо каунт из него селектить, либо резалтсет
Иван
Konstantin
доктрина по умолчанию не генерит подзапросы. похоже на то что ее руками заставили это написать
Konstantin
впрочем, могу заблуждаться, но это не похоже на запрос от орм
Иван
это скрин двухлетней давности из пагинатора доктриновского
Konstantin
это pagerfanta?
Елнур
я раньше использовал knp paginator
Иван
это pagerfanta?
Doctrine\ORM\Tools\Pagination\Paginator
Елнур
коллеги, подскажите, а где лучше реализовать код: мне нужно получить кол-во сущности User, который удовлетворяет определенным критериям. Т.е. произвольный метод, который возвращает результат выполнения агрегированных функций. Такие методы нужно в репозитории сущности писать?
Можно создать отдельный класс, который работает с данным запросом. Внутри две функции - один для получения количества элементов, другой для получения самих элементов. И один приватный метод, который возвращает query builder
Елнур
$qb = $this->em ->createQueryBuilder() ->from(Entity::class, 'e') // ->where('') other stuff ; $count = $qb ->select('COUNT(e) cn') ->distinct(true) ->getQuery() ->getSingleScalarResult(); $entities = $qb ->select('e') ->setMaxResult(30) // Если нужно ограничить количество результатов ->getQuery() ->getResult();
Konstantin
я ровно о том же
A
так и сделал, спасибо!
A
А как такое можно навернуть в query builder?) $this->createQueryBuilder('a') ->andWhere('a.:date_field = 1') ->setParameter('date_field', $date_field)
A
мне для приватного метода-хелпера надо)
Иван
не надо так делать
A
почему?
A
безопасность?
Иван
во первых это не работает так во вторых безопасность
Елнур
мне для приватного метода-хелпера надо)
Можно, если date_field проверять через какой то справочник, например in_array($date_field, ['field1', 'field2' ])
Елнур
А запрос andWhere формировать через sprintf
A
http://dl4.joxi.net/drive/2022/03/18/0037/0052/2453556/56/e9b32e68d4.jpg
A
просто хочется как-то от дублирования избавиться
Елнур
sprintf('a.%s = 1', $date_field)
A
sprintf('a.%s = 1', $date_field)
да, так будет работать и через обычную конкатенацию
A
спасибо
Елнур
да, так будет работать и через обычную конкатенацию
Но конкатенация немного грязно выглядит
A
подскажите, а для объекта Symfony\Bridge\Twig\Mime\TemplatedEmail пытаюсь передать такой контекст array('user' => $user) $user- объект
A
так нельзя делать? почему-то ошибка..
Nikolay
так нельзя делать? почему-то ошибка..
А зачем ты обьект передаешь?
Ivan
$tpl = new TemplatedEmail(); $tpl->context([ 'text' => $email->getText(), ]); Работает
A
А зачем ты обьект передаешь?
у меня шаблону использует все свойства юзера. и обычно из контроллера я туда (в шаблон) передавал объект. сейчас в шаблон письма хочу тоже передать объект, чтобы н дубливать все свойства
A
аля name => user.getName() ... хочу понять, в чем проблема, почему так нельзя делать?