Kirill
а ещё и в selfhosted умеет, в отличие от копилота
Nikolay
хочу копайлот
Через vpn работает
Kirill
а ещё и в контекст твоего проекта умеет
Kirill
и чатгпт там встроенный
Kirill
и работает где угодно
Вадим
Через vpn работает
какой впн ты используешь?
Kirill
и бесплатный
Вадим
а ещё и в контекст твоего проекта умеет
копайлот тоже вроде проект понимает, ну так, то понимает то не очень
Nikolay
ставишь refact.ai плагин и перестаёшь иметь себе мозг
Спасибо, думаю лучше чем copilot работает
Kirill
ну там есть и минусы, например если шторм начинает глючить или ты его грохнешь через диспечер, то LSP процесс подвиснуть может
Kirill
надо руками его (процесс lsp) убивать
Nikolay
Надо потестить
Вадим
Aleksandr Khristenko
вместо xhprof можно xdebug пользоваться с почти таким же успехом и смотреть в шторме результаты
Они же вроде разный оверхед дают и соответственно профайлинг будет тоже различаться?
Корочка
Всем привет. Может кто знает можно ли переопределить работу вот этой функции? Осуществляется нативный запрос $stmt = $connection->executeQuery() $q = $stmt->fetchAllAssociative(); Драйвер подключение, само подключение переопределять можно, вот такие функции есть возможность?
Корочка
Да можно )))
Vlad
Да можно )))
ты из тех людей на форуме, которые задают вопрос, потом пишут «спс, решил» без решения ?
Юра
Гугли doctrine middleware
Юра
Смотря какая версия доктрины еще
Корочка
back/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php А тут можно вот этот полностью переопределить и все функции в нем и все работает прекрасно. То есть полностью настроить свою работу
Корочка
Потом в конфигах объявить свой драйвер подключения и все
Vlad
я так по памяти думаю, что сам connectionInterface можно самому реализовать?
Vlad
мне просто стало интересно, но гуглить лениво ппц
Корочка
Можно, тут полно инструментов. Можно класс изменить, а можно и сразу через интерфейс
Корочка
Через интерфейс не очень так как больше свободы, но больше ручной работы, а через класс он уже сам в класс доставляет что есть в .env
Корочка
а что за кейсы у тебя такие, что переобпределять надо поведение?
Так нужно. Потому что есть проблемы при получения данных с БД с другого хоста. Сам запрос проходит, а во время получения данных проблема. Вот надо делать логирования ошибок во время получения данных методом fetchAllAssociative,и внутри этой функции перезапуск получения данных
Корочка
Выглядит как костыль
Конечно )) Но это документированный костыль )) В doctrine.yaml можно указывать свои классы и драйверы подключения и уже в этих классах пилить своим методы
Павел
Выглядит как костыль
Ну по сути это ретрай стратегия. Так что в целом почему бы и нет. Другое почему именно фетч падает странно
Корочка
Поидее нужен только декоратор над Result чтобы обернуть именно fetch
Вот как это сделать? Чтобы была моя обертка? И моя обработка над результ?
Павел
Враппер над коннекшеном, там декорация query который возвращает ResultUnterface
Корочка
Сам коннекшен то сделали, аааа я понял. Да это тоже сделали уже все executeQuery вот тут сделали
Павел
Сам коннекшен то сделали, аааа я понял. Да это тоже сделали уже все executeQuery вот тут сделали
Только наверное лучше посто его обернуть а не менять, он возвращает Result и вот с ним уже работать
Корочка
Да, изначально поменял немного, но потом его просто обернул и перезапуск делаю. с задержкой и до 5 попыток
Alexey Mishurovskiy
Всем привет! отвалился autocomplete в шторме в twig. чот не могу его обратно вернуть. кто сталкивался ?
Юра
Почисти кеш и рестарт
Alexey Mishurovskiy
Почисти кеш и рестарт
уже делал, настраивал в настройках пути, из того что заработало - стали пути шаблонов подтягиваться
Юра
Если не поможет, учишь джаву, устраиваешься джуном куда-нибудь, работаешь три года, устраиваешься в джет брейнс, фиксишь баг, возвращаешься в пхп
Alexey Mishurovskiy
😂
SK
народ как писать custom password strength meter в доках по нулям симфони 4.4
Роман
Привет. подскажите в чем проблема? class HotelRepository extends ServiceEntityRepository { /** * HotelRepository constructor. * * @param ManagerRegistry $registry */ public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Hotel::class); } public function findHotelsForSync(int $syncIntervalHours): array { $qb = $this->createQueryBuilder('h'); $now = new DateTime(); // Текущее время $interval = new DateInterval('PT' . $syncIntervalHours . 'H'); // Интервал времени $boundaryDate = $now->sub($interval); // Вычислить дату и время границы $qb->where('h.active = 1') ->andWhere('h.propertyId IS NOT NULL'); return $qb->getQuery()->getResult(); } class Hotel { #[ORM\Column(type: 'bigint', nullable: true)] private ?int $propertyId = null; } [critical] Error thrown while running command "app:sync-bookings 9963". Message: "An exception occurred while executing a query: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'h0_.property_id' in 'field list'" In ExceptionConverter.php line 52: An exception occurred while executing a query: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'h0_.property_id' in 'field list' In Exception.php line 28: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'h0_.property_id' in 'field list' In Statement.php line 55: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'h0_.property_id' in 'field list'
Сергей
Привет. подскажите в чем проблема? class HotelRepository extends ServiceEntityRepository { /** * HotelRepository constructor. * * @param ManagerRegistry $registry */ public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Hotel::class); } public function findHotelsForSync(int $syncIntervalHours): array { $qb = $this->createQueryBuilder('h'); $now = new DateTime(); // Текущее время $interval = new DateInterval('PT' . $syncIntervalHours . 'H'); // Интервал времени $boundaryDate = $now->sub($interval); // Вычислить дату и время границы $qb->where('h.active = 1') ->andWhere('h.propertyId IS NOT NULL'); return $qb->getQuery()->getResult(); } class Hotel { #[ORM\Column(type: 'bigint', nullable: true)] private ?int $propertyId = null; } [critical] Error thrown while running command "app:sync-bookings 9963". Message: "An exception occurred while executing a query: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'h0_.property_id' in 'field list'" In ExceptionConverter.php line 52: An exception occurred while executing a query: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'h0_.property_id' in 'field list' In Exception.php line 28: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'h0_.property_id' in 'field list' In Statement.php line 55: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'h0_.property_id' in 'field list'
в бд нет колонки. Миграцию надо сделать и выполнить
Роман
есть
Роман
это норм что симфони делает такие названия полей или можно сделать преобразование в snake_case
Роман
так а ошибка почему
Владимир
Ну она по умолчанию верблюда свойства к змее в бд приводит при работе через кверибилдер
Роман
не находит таблицу что ли
Nikolay
не находит таблицу что ли
У тебя же написано в ошибке, что поле с underscore
Владимир
не находит таблицу что ли
В сущности у тебя как имя колонки? @ORM/Column Задай явно
Nikolay
В сущности у тебя как имя колонки? @ORM/Column Задай явно
У него не задано, поэтому приводится к дефолту стратегии
Владимир
Ну, пусть явно задаст в ентити тогда
Роман
как в бд #[ORM\Column(type: 'bigint', nullable: true)] private ?int $propertyId = null; а то что он сущности создал в единственном числе это норм или нет
Владимир
Implementing a NamingStrategy - Doctrine Object Relational Mapper (ORM) https://www.doctrine-project.org/projects/doctrine-orm/en/3.2/reference/namingstrategy.html
Роман
как настроить конвертацию
Aleksandr
name="created_at"
Роман
<?php namespace App\Doctrine; use Doctrine\ORM\Mapping\NamingStrategy; use Doctrine\ORM\Mapping\DefaultNamingStrategy; class CustomNamingStrategy extends DefaultNamingStrategy implements NamingStrategy { /** * Преобразование имени класса в имя таблицы в множественном числе. * * @param $className * @return string */ public function classToTableName($className): string { return $this->pluralize(parent::classToTableName($className)); } /** * Преобразование имени свойства в имя колонки в snake_case. * * @param $propertyName * @param $className * @return string */ public function propertyToColumnName($propertyName, $className = null): string { return $this->camelToSnake($propertyName); } /** * Преобразование имени свойства для использования в join-колонках. * * @param $propertyName * @param string $className * @return string */ public function joinColumnName($propertyName, string $className): string { return $this->camelToSnake($propertyName); } /** * Преобразование имени таблицы для связи. * * @param $sourceEntity * @param $targetEntity * @param null $propertyName * @return string */ public function joinTableName($sourceEntity, $targetEntity, $propertyName = null): string { return $this->pluralize(parent::joinTableName($sourceEntity, $targetEntity, $propertyName)); } /** * Имя столбца для внешних ключей. * * @return string */ public function referenceColumnName(): string { return 'id'; } /** * Пример простого преобразования в множественное число. * Вы можете использовать библиотеку или более сложные правила для этого. * * @param $name * @return string */ private function pluralize($name): string { return $name . 's'; } /** * Преобразование camelCase в snake_case. * * @param $camelCase * @return string */ private function camelToSnake($camelCase): string { $pattern = '/([a-z])([A-Z])/'; $replacement = '$1_$2'; $snakeCase = preg_replace($pattern, $replacement, $camelCase); return strtolower($snakeCase); } } hotel_id BIGINT NOT NULL COMMENT SQLSTATE[HY000]: General error: 1824 Failed to open the referenced table 'hotel' подскажите что можно сделать или в symfony и doctrine принятно таблицы писать в единственном числе
Роман
почему в ларе всё это сделали а в симфони нет
Рома
Какие возможные решения есть
Михаил
почему в ларе всё это сделали а в симфони нет
Я хз, но у меня на проектах имена полей автоматически конвертируются в snake case. Смотри где что ты недонастроил или испортил настройку
Роман
я нечего дополнительно не настраивал, всё по дефолту
Роман
а нашел FOREIGN KEY (hotel_id) REFERENCES hotels(id) ON DELETE CASCADE
Роман
я уже сомневаюсь как правильно каждый фреймворк пишет в бд по своему, супер код заработал
Vlad
<?php namespace App\Doctrine; use Doctrine\ORM\Mapping\NamingStrategy; use Doctrine\ORM\Mapping\DefaultNamingStrategy; class CustomNamingStrategy extends DefaultNamingStrategy implements NamingStrategy { /** * Преобразование имени класса в имя таблицы в множественном числе. * * @param $className * @return string */ public function classToTableName($className): string { return $this->pluralize(parent::classToTableName($className)); } /** * Преобразование имени свойства в имя колонки в snake_case. * * @param $propertyName * @param $className * @return string */ public function propertyToColumnName($propertyName, $className = null): string { return $this->camelToSnake($propertyName); } /** * Преобразование имени свойства для использования в join-колонках. * * @param $propertyName * @param string $className * @return string */ public function joinColumnName($propertyName, string $className): string { return $this->camelToSnake($propertyName); } /** * Преобразование имени таблицы для связи. * * @param $sourceEntity * @param $targetEntity * @param null $propertyName * @return string */ public function joinTableName($sourceEntity, $targetEntity, $propertyName = null): string { return $this->pluralize(parent::joinTableName($sourceEntity, $targetEntity, $propertyName)); } /** * Имя столбца для внешних ключей. * * @return string */ public function referenceColumnName(): string { return 'id'; } /** * Пример простого преобразования в множественное число. * Вы можете использовать библиотеку или более сложные правила для этого. * * @param $name * @return string */ private function pluralize($name): string { return $name . 's'; } /** * Преобразование camelCase в snake_case. * * @param $camelCase * @return string */ private function camelToSnake($camelCase): string { $pattern = '/([a-z])([A-Z])/'; $replacement = '$1_$2'; $snakeCase = preg_replace($pattern, $replacement, $camelCase); return strtolower($snakeCase); } } hotel_id BIGINT NOT NULL COMMENT SQLSTATE[HY000]: General error: 1824 Failed to open the referenced table 'hotel' подскажите что можно сделать или в symfony и doctrine принятно таблицы писать в единственном числе
Ты можешь задать свое имя для таблицы
Denchik
Всем доброг дня) коллеги, подскажите пожалуйста - вы в своей практике какое общение с своими базами данных выбираете? По умолчанию Doctrine с сущностями и миграциями или вы в своем опыте вывели какой то более быстрый и оптимизированный подход для общения с бд? Например если бд большая и нагрузка большая то Doctrine справится с большой нагрузкой?
Юра
Если это реально хайлоад прям то лучше брать что-то что держит соединение с базой данных постоянно и использует пул подключений
Юра
В доктрине есть dbal если что, можно селекты делать не через орм
Denchik
В доктрине есть dbal если что, можно селекты делать не через орм
А через прямые запросы будет быстрее как практика показывает?
Юра
Смотря что ты делаешь но вообще слой орм довольно сильно замедляет и потребляет много памяти
Юра
Но ты можешь например использовать орм для построения запроса и выбрать режим гидрации массив