Как реализовать пользовательскую вставку?

Здравствуйте, при реализации формы регистрации (email, password), имея таблицу user с полями "id, first_name, last_name, email, password" невозможно сделать вставку:
public function registrationAction(Request $request)
{
    $user = new User();
    $form = $this->createForm(new RegistrationType(), $user);

    if ($request->getMethod() == 'POST')
    {
        $form->submit($request);

        if ($form->isValid())
        {
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($user);
            $em->flush();
            return $this->redirect($this->generateUrl('confirm'));
        }
    }

    return $this->render('NickUserBundle:Signin:registration.html.twig', array
    (
        'form' => $form->createView(),
    ));
}


Пришлось схитрить и дописать:
$user->setFirstName('');
$user->setLastName('');

Может кто-то знает как правильно надо реализовать, когда вставлять нужно выборочно?
  • Вопрос задан
  • 2255 просмотров
Пригласить эксперта
Ответы на вопрос 1
@myLizzarD
PHP developer
doctrine передает явным образом все имеющие параметры, а недостающие устанавливает как null. Хочу выяснить, в чём загвоздка?

Это дефолтное поведение доктрины, причем правильное поведение. Если у вас в аннотации над полями first_name и last_name не указано значение nullable - оно по умолчанию будет false, что на уровне бд запрещает вставку null значения. Если вы пишите руками sql запрос, не указывая эти поля при вставке, то при исполнении запроса вы должны получить предупреждение, что нет дефолтного значения для поля. Запись вставить, только на место first_name, last_name запишется пустая строка.
Поэтому у вас есть 2 вариант: либо добавить nullable=true, либо ставить дефолтное значение для поля в конструкторе. Другого не дано.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы