Doctrine, синхронизация для сохранения

Sufir

Я не волшебник, я только учусь
Дошли руки до Doctrine (2.4), никогда раньше не пользовался ей.

Если верить документации, то мне не обязательно явным образом устанавливать связующее поле при добавлении связанной сущности в коллекцию или свойство (в т.ч. и для двусторонних отношений, у меня же одностороннее):
PHP:
$user = $em->find('User', $userId);

// unidirectional many to many
$comment = $em->find('Comment', $readCommentId);
$user->getReadComments()->add($comment);

$em->flush();

// unidirectional many to one
$myFirstComment = new Comment();
$user->setFirstComment($myFirstComment);

$em->persist($myFirstComment);
$em->flush();
Однако при попытке $em->flush() мне закономерно вываливается PDOException with message SQLSTATE[23502]: Not null violation в comment.author_id. Так всё-таки я должен где-то явно установить перед сохранением связующее поле? Или я не могу привязывать ещё не сохраненную сущность? Это будет странно, т.к. не могут быть комментарии без авторов и делать нужно всё в одной транзакции. Пробовал со связями и many-to-many и one-to-many (односторонней и двусторонними). Выбираются данные как положено.

Схема БД вот такая: http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#one-to-many-bidirectional

Если убрать ограничение Not null, то запись осуществляется успешно, но конечно без привязки (если же настроить Unidirectional One-To-Many with Join Table, то после вставки doctrine всё же пытается сделать второй инсерт в связующую таблицу).

Короче, пока тупо через рефлексию $feature->product устанавливаю...
 
Последнее редактирование:
Сверху