次の dcm.xml 定義を持つエンティティがあります。
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
https://raw.github.com/doctrine/doctrine2/master/doctrine-mapping.xsd">
<entity name="Conversation" table="Conversations">
<!-- ID's -->
<id name="_id" column="ID" type="text">
<generator strategy="AUTO" />
</id>
<!-- Fields -->
<field name="_subject" column="Subject" type="string" />
<!-- Associations -->
<one-to-many field="_conversationMembers" mapped-by="_conversation" target-entity="ConversationMember">
<cascade><cascade-persist /></cascade>
</one-to-many>
</entity>
</doctrine-mapping>
このエンティティの ID は MSSQL 08 Uniqueidentifier です。
ここで、新しいオブジェクトを生成し、それをデータベースにフラッシュします。
$conversation = new Conversation();
$em = $dbHandler->getEntityManager();
$conversation->setSubject($subject);
$em->persist($conversation);
$em->flush();
今、エンティティをフラッシュした後、ID を設定する必要があることを示すこの投稿を見つけました: Get the last insert id with doctrine 2?
この提案を試して追加すると
$conversation->getId();
ID はまだ 0
です。これに関連する他のエンティティをフラッシュすることはできません。これは、挿入のたびに、doctrine が指定された外部キー列に Uniqueidentifier として値 0 を挿入しようとするためです。
もちろん、これはSQLサーバーのエラーメッセージになります。
私が何か間違っているかどうかは誰にも分かりますか?
または、新しく生成された ID を決定する別の方法はありますか?
私は sql-server と Doctrine2 での作業に問題があることを知っています。
その教義はこの星座では機能しないのでしょうか?