不能插入具有类表继承的新实体(原则 2.2)


Cannot insert new entity with class table inheritance (Doctrine 2.2)

>我在教义 2.2 中使用类表继承模式。 我的数据库架构如下:

父母
access_id(主键)
access_type(鉴别器列)

access_role
access_acl
access_primaryuser_id(外键)

儿童 1
access_id(外键)
account_id(外键)

儿童 2
access_id(外键)
distributor_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);

事实证明,自动生成的实体映射有一些需要删除的数据。 从UserAccessAccountUserAccess oneToOne定义使教义相信有一个额外的参数。 现在说得通了!

正确:

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: {  }