原则 2:了解实体如何与原则 2 一起工作



我有3个实体:Person,Affiliation和PersonAffiliation。

在我的表单中,我将每个隶属关系显示为选中的复选框。

现在,当用户取消复选框并单击"提交"时,应从"人员隶属关系"表中删除此隶属关系。

问题是,当我提交时没有取消选中,我的数据是重复的。示例:aff1 和 aff2。当检查并提交时,我将得到 aff1 aff1 aff2 aff2。同样,如果我取消选中 aff2,那么我将拥有 aff1 aff1。

错误可能出在使用该学说的某个地方:

以下是我管理它的方式:

  • 实体珀索姆

    @ORMOneToMany(targetEntity="PersonAffiliation", mappedBy="person", cascade={"persist", "remove"})
    protected $affiliations;
    
  • 实体隶属关系:

    @ORMOneToMany(targetEntity="PersonAffiliation", mappedBy="affiliation")
    protected $person_affiliations;
    
  • 实体人员隶属关系

    @ORMManyToOne(targetEntity="Person", inversedBy="affiliations")
    @ORMJoinColumn(name="person_id", referencedColumnName="id")
    protected $person;
    
    @ORMManyToOne(targetEntity="Affiliation", inversedBy="person_affiliations")
    @ORMJoinColumn(name="affiliation_id", referencedColumnName="id")
    protected $affiliation;
    

关于如何解决这个问题的想法?

谢谢。

编辑:

婴儿车部分:

foreach( $enquiry->getAffiliations() as $aff )
    {
    $pAff   = new PersonAffiliation();
    $pAff->setPersonId( $person->getId() );
    $pAff->setAffiliationId( $aff->getAffiliation()->getId() );
    $pAff->setPerson( $person );
    $pAff->setAffiliation( $aff->getAffiliation() );
    $em->persist($pAff);
    $em->flush();
}

表格部分:

   public function buildForm(FormBuilder $builder, array $options)
{
    $person = $this->person;
    $user   = $this->user;
    $builder->add('firstname', 'text');
    $builder->add('middlename', 'text', array('required'=>false));
    $builder->add('lastname', 'text');
    $builder->add('sex', 'choice', array( 'choices'   => array('m' => 'Male', 'f' => 'Female'),
                                          'required'  => true, 
                                          'multiple'  => false,
                                          'expanded'  => true));
    $builder->add('email', 'text', array('required'=>false));
    if( $this->addAffiliations ) {
        $builder->add('affiliations', 'entity', array(
            'label' => 'Athor's affiliations',
            'class' => 'SciForumVersion2Bundle:PersonAffiliation',
            'query_builder' => function($em) use ($person, $user){
            return $em->createQueryBuilder('pa')
                ->where('pa.person_id = :pid')
                ->setParameter('pid', $person->getId());
        },
            'property'    => 'affiliation',
            'multiple' => true,
            'expanded' => true,
        ));
    }
}

在"个人"实体中:

/**
* @ORMManyToMany(targetEntity="Affiliation", inversedBy="people")
* @ORMJoinTable(name="PersonAffiliation")
*/
protected $affiliations;

在隶属关系实体中:

/**
* @ORMManyToMany(targetEntity="Person", mappedBy="affiliations")
*/
protected $people;

你在 foreach 的每次迭代中都做了一个$em->flush()。它应该在foreach结束后完成,不是吗?

此外,您可以使用ManyToMany关系。

相关内容

  • 没有找到相关文章