Size: a a a

2021 February 18

i

invariance in symfony
Alexey Shchetkin
Коллеги, всем доброго.
Подскажите, пожалуйста вот такой вопрос по symfony 5.*:
задача: необходимо в PDO установить флаг ATTR_PERSIST.
решение: создание своего класса драйвера и, возможно, подключения и указание на этот драйвер в конфиге dbal
Или возможно как-то по-другому это получить?
В конфиге доктрины есть поле options, туда можно кастомные опции для ПДО кинуть вроде
источник

AS

Alexey Shchetkin in symfony
invariance
В конфиге доктрины есть поле options, туда можно кастомные опции для ПДО кинуть вроде
Да, можно. Просто штатный PDOConnection, который используется для подключения к mysql, создает подключение с флагом ATTR_STATEMENT_CLASS и это заложено прямо в коде. А ATTR_STATEMENT_CLASS и ATTR_PERSIST не умеют работать совместно
источник

i

invariance in symfony
Странно, не увидел такого
источник

ST

Sergey Tsarikov in symfony
А можно сетеры убрать в сущности и делать через конструктор?
источник

AS

Alexey Shchetkin in symfony
invariance
Странно, не увидел такого
Doctrine\DBAL\Driver\PDOConnection
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, [Statement::class, []])

Возможно я просто неправильно готовлю
источник

CS

Christopher S in symfony
no. it's offtopic
источник

fn

first name in symfony
Ребят, всем привет.
Может кто подсказать.

Создал поле в форме
 ->add('group', EntityType::class,
               [
                   'class'  => Group::class,
                   'query_builder' => function(GroupRepository $groupRepository) use ($options){
                       return $groupRepository->createQueryBuilder('g');
                   },
                   'choice_label' => 'name',
                   'label' => 'Группа',
                   'empty_data' => null,
                   'required' => false
               ]
           );

Рендерится выпадающий список, хочу сделать, чтобы в этом списке была пустая строка, т.е. чтобы был вариант установки null для этого поля, НО выпадающий список состоит из сущностей, которые выбрал репозиторий.
Как добавить пустую строку?
Нужно другой тип использовать в формБилдере?
Заранее благодарю за совет.
источник

M★

MuXiddin ★★★ in symfony
first name
Ребят, всем привет.
Может кто подсказать.

Создал поле в форме
 ->add('group', EntityType::class,
               [
                   'class'  => Group::class,
                   'query_builder' => function(GroupRepository $groupRepository) use ($options){
                       return $groupRepository->createQueryBuilder('g');
                   },
                   'choice_label' => 'name',
                   'label' => 'Группа',
                   'empty_data' => null,
                   'required' => false
               ]
           );

Рендерится выпадающий список, хочу сделать, чтобы в этом списке была пустая строка, т.е. чтобы был вариант установки null для этого поля, НО выпадающий список состоит из сущностей, которые выбрал репозиторий.
Как добавить пустую строку?
Нужно другой тип использовать в формБилдере?
Заранее благодарю за совет.
'placeholder'=>'Select group...' dobavte eto
источник

fn

first name in symfony
MuXiddin ★★★
'placeholder'=>'Select group...' dobavte eto
Ох, чет не подумал про это, спасибо большое
источник

DD

Den Den in symfony
Всем привет, сделал кастомный Constraint - Validator для поля в форме (поле содержит модель номера телефона). Во время валидации формы, я пытаюсь вытащить старое значение этой формы(сущности которая прикреплена к форме) из бд. Но почему-то запрос в бд через PhoneManager $manager->getPhoneNumber() возвращает значение телефона, которое пользователь ввел в самой форме, вместо того чтоб вернуть значение из бд. Такое происходит конкретно после строки
        $form = $this->createForm(ProfileType::class, $profile);
       $form->handleRequest($request);

       $profile->getPhoneNumber()->value() (значение из формы)

       $phoneManager->findByProfile($profile)->getPhoneNumber()->value() (<-- то же самое значение получается что и из формы, хотя в бд совсем другое)
Подскажите, почему доктрина возвращает значения не из бд, в чем может быть проблема и как сделать чтоб возвращалось конкретно из бд?
источник

Ш

Шурик in symfony
Den Den
Всем привет, сделал кастомный Constraint - Validator для поля в форме (поле содержит модель номера телефона). Во время валидации формы, я пытаюсь вытащить старое значение этой формы(сущности которая прикреплена к форме) из бд. Но почему-то запрос в бд через PhoneManager $manager->getPhoneNumber() возвращает значение телефона, которое пользователь ввел в самой форме, вместо того чтоб вернуть значение из бд. Такое происходит конкретно после строки
        $form = $this->createForm(ProfileType::class, $profile);
       $form->handleRequest($request);

       $profile->getPhoneNumber()->value() (значение из формы)

       $phoneManager->findByProfile($profile)->getPhoneNumber()->value() (<-- то же самое значение получается что и из формы, хотя в бд совсем другое)
Подскажите, почему доктрина возвращает значения не из бд, в чем может быть проблема и как сделать чтоб возвращалось конкретно из бд?
Форма применяет поля формы к объекту, который ты передаешь в метод createForm, а доктрина когда ищет по id, то видит, что такой объект уже извлечен из базы и вылет его же, а он изменён формой)
источник

Ш

Шурик in symfony
Применяй формы не к сущностям, а к dto, сущности не будут меняться неявно
источник

Ш

Шурик in symfony
$profile - это ж из базы сущность?
источник

DD

Den Den in symfony
Шурик
$profile - это ж из базы сущность?
да. И потом эту ДТО заполнять в сущность сеттерами, так?
источник

Ш

Шурик in symfony
Den Den
да. И потом эту ДТО заполнять в сущность сеттерами, так?
в самом простом и прямолинейном подходе - да, все поля из дто берёшь и в сущность передаешь
источник

DD

Den Den in symfony
Шурик
в самом простом и прямолинейном подходе - да, все поля из дто берёшь и в сущность передаешь
Понял, спасибо большое за разъяснение. На stackoverflow нашел ещё вариант по типу
$entityManager->clear()
или
$entityManager->detach($profile);

Может попробую их сперва. Ещё раз спасибо, без разъяснения я бы так и не понял причины такого поведения)
источник

Ш

Шурик in symfony
почитай что делает detach
не факт, что ты потом вообще сможешь сущность сохранить)
источник

DD

Den Den in symfony
кк, понял
источник

Ш

Шурик in symfony
Den Den
кк, понял
ну и clear делает то же самое, что и detach, только глобально
что clear, что detach в данном контексте - костыли, призванные решить то говно, которое возникает при передаче сущности в форму
источник

AP

Alex Plishkin in symfony
источник