Symfony 3 表单和一对多
Symfony 3 form and one-to-many
这似乎是一件容易的事,但我想不出最好的解决办法。我在培训师和团队之间存在双向一对多关系(一个培训师可以有多个团队)。当我添加/编辑教练时,我想指派他 team/teams。我没有收到任何错误,但什么也没发生。我的猜测是这与关系、拥有方或类似的东西有关。还有另一个关系:玩家 - 团队,一切正常,但在这种情况下,我有一个玩家表单,我将团队分配给一个玩家。
因此,如果我从 "many" 的角度提交表单,它会起作用,但是当我尝试从 "one" 的角度提交表单时,我仍然在数据库中得到 null 并且没有建立关系。
Trainer.php:
/**
* @ORM\OneToMany(targetEntity="Team", mappedBy="trainer")
*/
private $teams;
...
$this->teams = new ArrayCollection();
Team.php:
/**
* @ORM\ManyToOne(targetEntity="Trainer", inversedBy="teams")
* @ORM\JoinColumn(name="trainer_id", referencedColumnName="id")
*/
private $trainer;
TrainerType.php:
->add('teams', EntityType::class, array(
'class' => 'AppBundle:Team',
'choice_label' => 'name',
'multiple' => true,
'expanded' => true,
'label' => 'Teams',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('t')
->where('t.isMyTeam = 1')
->orderBy('t.name', 'ASC');
},
));
有没有办法让它与一对多关系一起工作?或者我应该切换到多对多?
确实是正反面相连。如果您将关系添加为拥有方,它将起作用,但不会以其他方式起作用。在 Doctrine documentation and this about owning side.
中阅读此内容
这似乎是一件容易的事,但我想不出最好的解决办法。我在培训师和团队之间存在双向一对多关系(一个培训师可以有多个团队)。当我添加/编辑教练时,我想指派他 team/teams。我没有收到任何错误,但什么也没发生。我的猜测是这与关系、拥有方或类似的东西有关。还有另一个关系:玩家 - 团队,一切正常,但在这种情况下,我有一个玩家表单,我将团队分配给一个玩家。
因此,如果我从 "many" 的角度提交表单,它会起作用,但是当我尝试从 "one" 的角度提交表单时,我仍然在数据库中得到 null 并且没有建立关系。
Trainer.php:
/**
* @ORM\OneToMany(targetEntity="Team", mappedBy="trainer")
*/
private $teams;
...
$this->teams = new ArrayCollection();
Team.php:
/**
* @ORM\ManyToOne(targetEntity="Trainer", inversedBy="teams")
* @ORM\JoinColumn(name="trainer_id", referencedColumnName="id")
*/
private $trainer;
TrainerType.php:
->add('teams', EntityType::class, array(
'class' => 'AppBundle:Team',
'choice_label' => 'name',
'multiple' => true,
'expanded' => true,
'label' => 'Teams',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('t')
->where('t.isMyTeam = 1')
->orderBy('t.name', 'ASC');
},
));
有没有办法让它与一对多关系一起工作?或者我应该切换到多对多?
确实是正反面相连。如果您将关系添加为拥有方,它将起作用,但不会以其他方式起作用。在 Doctrine documentation and this about owning side.
中阅读此内容