0

Doctrine 2.2 でクラステーブル継承パターンを使用しています。私のDBスキーマは次のとおりです。


access_id (主キー) access_type
(識別子列)
access_role
access_acl
access_primary
user_id (外部キー)

子 1
access_id (外部キー)
account_id (外部キー)

子 2
access_id (外部キー)
distribution_id (外部キー)

新しいエンティティをデータベースに挿入しようとすると、親クエリは問題ないように見えますが、子クエリには余分なパラメーターがあります。実行中のクエリをダンプすると、次のようになりました。

INSERT INTO user_access_account (access_id, account_id) VALUES (?, ?)   
array('1'=> 39, '2'=> NULL, '3'=> 3 )

'2' インデックスは関係ありません。'1' => 39、'2' => 3 が正しいパラメーターです。

このクエリの実行に使用されるコードは次のとおりです。

$entity = new Entity\UserAccessAccount();
$entity->setAccount($account)
       ->setUser($user)
       ->setAccessRole($accessRole)
       ->setAccessAcl($accessAcl)
       ->setAccessPrimary($accessPrimary);

$em->persist($entity);
$em->flush($entity);
4

1 に答える 1

0

結局のところ、自動生成されたエンティティ マッピングには、削除する必要のあるデータが含まれていました。back からback までのoneToOne定義により、Doctrine は余分なパラメータがあると信じ込んでいました。それは今では理にかなっています!UserAccessAccountUserAccess

正しい:

Entity\UserAccessAccount:
  type: entity
  table: user_access_account
  repositoryClass: Repository\UserAccessAccount
  oneToOne:
    account:
      targetEntity: Entity\Account
      cascade: {  }
      mappedBy: null
      inversedBy: null
      joinColumns:
        account_id:
          referencedColumnName: account_id
      orphanRemoval: false
  lifecycleCallbacks: {  }

正しくない:

Entity\UserAccessAccount:
  type: entity
  table: user_access_account
  repositoryClass: Repository\UserAccessAccount
  oneToOne:
    account:
      targetEntity: Entity\Account
      cascade: {  }
      mappedBy: null
      inversedBy: null
      joinColumns:
        account_id:
          referencedColumnName: account_id
      orphanRemoval: false
    userAccess:
      targetEntity: Entity\UserAccess
      cascade: {  }
      mappedBy: null
      inversedBy: null
      joinColumns:
        access_id:
          referencedColumnName: user_access
  lifecycleCallbacks: {  }
于 2012-04-24T22:25:33.767 に答える