Почему Doctrine не проставляет id при вставке?

hell0w0rd

Продвинутый новичок
Схема в yml такая:
PHP:
Dog:
oneToMany:
        dogs:
            targetEntity: Dog
            mappedBy: post
            cascade:
                - persist
Post:
manyToOne:
        post:
            targetEntity: Post
            inversedBy: dogs
            joinColumns:
                post_id:
                    referencedColumnName: id
В контроллере выполняю:
PHP:
$post = $form->getData()->setAddDate();
            $em = $this->getDoctrine()->getManager();
            $em->persist($post);
            $em->flush();
Посмотрел профилеровщик - ставит null на место post_id при инсерте в dogs, что я делаю не так?
 

Вурдалак

Продвинутый новичок
Потому что это должна делать СУБД (в случае MySQL). Если ты будешь использовать, например, Postgres, то может там будет как раз такая логика.
 

hell0w0rd

Продвинутый новичок
Потому что это должна делать СУБД (в случае MySQL). Если ты будешь использовать, например, Postgres, то может там будет как раз такая логика.
Ясно. Да, использую MySql. Хотелось бы узнать что делать-то тогда?)
 

Вурдалак

Продвинутый новичок
После после самой вставки getId() должен возвращать нормальный id. В MySQL его можно узнать только после INSERT'а.
 

Вурдалак

Продвинутый новичок
GusakovNick, значит у тебя неправильная структура таблицы. Поле должно быть AUTO_INCREMENT и NOT NULL.
 

hell0w0rd

Продвинутый новичок
GusakovNick, значит у тебя неправильная структура таблицы. Поле должно быть AUTO_INCREMENT и NOT NULL.
Возможно. Изменил, теперь бросает исключение - PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post_id' cannot be null
Почему Doctrine не подставляет post_id сама-то? Что я делаю не так?
 

hell0w0rd

Продвинутый новичок
Использование ORM подразумевает понимание работы с plain SQL. Тебе нужно решить вопрос почему
Код:
INSERT INTO ... (id, ...) VALUES (NULL, ...);
не работает.

Doctrine к этому отношения не имеет.

http://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html
Кто сказал что не работает? id-то проставляются везде.
 

Вурдалак

Продвинутый новичок
У тебя не работает вставка из-за post_id. Опять-таки тут проблема со структурой. Либо ты зачем-то указал NOT NULL, либо неправильно описал структуру в Doctrine.
 

Вурдалак

Продвинутый новичок
Так не не указал пост для объекта $dog, который пытаешься сохранить. То есть, с сохранением $post у тебя не должно быть проблем.
 

hell0w0rd

Продвинутый новичок
Так не не указал пост для объекта $dog, который пытаешься сохранить. То есть, с сохранением $post у тебя не должно быть проблем.
Ну так они связаны. Да с сохранением $post проблем не каких, он также рекурсивно сохраняет и $dogs. Единственная проблема - не сохраняет ссылки на $post. То есть не прописывает ничего в поле post_id
 

hell0w0rd

Продвинутый новичок
Тебе нужно сохранить $dog после $post.
Вы доктрину вообще используете? Смысл строки в конфиге cascade: - persist - при сохранении задействовать описанную связь, если бы было написано cascade: - remove - удалять связанные объекты при удалении поста. Так что это то, что doctrine должна делать сама автоматом, а мой вопрос как раз от того и родился - она это делает не корректно
 

hell0w0rd

Продвинутый новичок
Сверху