Symfony 使用OneToMany关联保留条令实体时出错

Symfony 使用OneToMany关联保留条令实体时出错,symfony,doctrine-orm,doctrine,symfony-2.3,Symfony,Doctrine Orm,Doctrine,Symfony 2.3,使用cascade persist的集合中的新实体将生成异常并回滚flush()操作。原因是“UserGroupPrivilege”实体通过外部实体“UserGroup”具有标识 但是,如果“UserGroupPrivilege”有自己的标识和自动生成的值,那么代码就可以正常工作,我不希望该标识成为强制验证的复合键。这是我的密码: 实体用户组: class UserGroup { /** * @var integer * * @ORM\Column(type

使用cascade persist的集合中的新实体将生成异常并回滚flush()操作。原因是“UserGroupPrivilege”实体通过外部实体“UserGroup”具有标识

但是,如果“UserGroupPrivilege”有自己的标识和自动生成的值,那么代码就可以正常工作,我不希望该标识成为强制验证的复合键。这是我的密码:

实体用户组:

class UserGroup
{
    /**
     * @var integer
     *
     * @ORM\Column(type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(type="boolean", nullable=false)
     * @Type("integer")
     */
    private $active;


    /** 
     * @ORM\OneToMany(targetEntity="UserGroupPrivilege", mappedBy="userGroup", cascade={"persist"}) 
     */
    private $privileges;
实体用户组权限:

class UserGroupPrivilege
{    
     /**
     * @var integer
     * 
     * @ORM\Id
     * @ORM\Column(type="integer", nullable=false)
     * 
     */
    private $privilegeId;

    /**
     * @var UserGroup
     *
     * @ORM\Id 
     * @ORM\ManyToOne(targetEntity="UserGroup", inversedBy="privileges")
     * @ORM\JoinColumn(name="userGroupId", referencedColumnName="id")
     */
    private $userGroup;  

    /**
     * @var string
     * @ORM\Column(type="string", nullable=false)
     */
    private $name;    

    /**
     * @var string
     * @ORM\Column(type="string", nullable=false)
     */
    private $value;   
控制器:

$userGroup = new UserGroup();
$userGroupPrivilege = new UserGroupPrivilege();
userGroupPrivilege->setUserGroup($userGroup)
                  ->setName($arrPrivilege['name'])
                  ->setValue($arrPrivilege['value'])
                  ->setPrivilegeId($arrPrivilege['privilegeId']);
$userGroup->addPrivilege($userGroupPrivilege);
$data = $repo->saveUserGroup($userGroup);
return $data;
存储库:

$em = $this->getEntityManager();
$em->persist($userGroup);
$em->flush();
我得到以下错误:

Entity of type UserGroupPrivilege has identity through a foreign entity UserGroup, however this entity has no identity itself. You have to call EntityManager#persist() on the related entity and make sure that an identifier was generated before trying to persist 'UserGroupPrivilege'. In case of Post Insert ID Generation (such as MySQL Auto-Increment or PostgreSQL SERIAL) this means you have to call EntityManager#flush() between both persist operations.

错误消息是非常自解释的。要将
UserGroupPrivilege
UserGroup
关联,
UserGroup
必须设置其ID。然而,由于您刚刚创建了这两个实体,所以它并没有id,因为它还并没有被持久化到数据库中

就你而言:

$em = $this->getEntityManager();
$em->persist($userGroup);
$em->persist($userGroupPrivilege);
$em->flush();
您能否使用唯一约束“强制验证”:

/**
 * @Entity
 * @Table(uniqueConstraints={@UniqueConstraint(name="ugppriv_idx", columns={"priviledgeId", "userGroup"})})
 */
class UserGroupPriviledge
{
...