Доктрина 2 - Вставить новый элемент в базу данных - PullRequest
4 голосов
/ 28 февраля 2011

Я пытаюсь сделать что-то очень простое ... но я делаю неправильно, и я не знаю, в чем проблема.Просто я пытаюсь вставить новый элемент в базу данных с помощью Doctrine 2:

$favouriteBook = new UserFavouriteBook;
$favouriteBook->user_id = 5;
$favouriteBook->book_id = 8;
$favouriteBook->created_at = new DateTime("now");

$this->_em->persist($favouriteBook);
$this->_em->flush();

Как вы можете видеть ... это очень просто, но, дай мне следующую ошибку:

Error: Message: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null

Очевидно, что если я сделаю «dump» перед «persist» и «flush» из $ favouriteBook, все будет выглядеть корректно* Кто-нибудь может представить, в чем проблема?.. Я не знаю, что еще попробовать .. Спасибо

Ответы [ 2 ]

6 голосов
/ 16 марта 2011

Я думаю, что beberlei говорит о том, что в вашей сущности favouriteBook вам не нужно определять user_id и book_id в качестве свойств класса, поскольку заданные вами свойства книги и пользователя уже распознают их как соответствующие столбцы соединения,Кроме того, ваша попытка сохранить сущность favouriteBook не удалась, поскольку вам нужно установить связь между сущностью книги и пользователя внутри сущности favouriteBook, а не внешних ключей.Так было бы:

$favouriteBook = new UserFavouriteBook;
$favouriteBook->book = $book; 
$favouriteBook->user = $user;
$favouriteBook->created_at = new DateTime("now");

$this->_em->persist($favouriteBook);
$this->_em->flush();
2 голосов
/ 02 марта 2011

Вы отображаете внешние ключи и ассоциации.Вы должны изменить ассоциацию, а не поле внешнего ключа.Плохо практиковать сопоставление их обоих, вы должны полностью удалять $ book_id и $ user_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...