我在多对多关联中有 2 个实体。
/**
* @ORM\Table()
* @ORM\Entity()
*/
class Clown
{
...
/**
* @ORM\ManyToMany(targetEntity="Appuntamento", inversedBy="partecipanti")
* @ORM\JoinTable(name="partecipa")
*/
private $appuntamenti;
public function __construct() {
$this->appuntamenti = new ArrayCollection();
}
...
public function addAppuntamenti(Appuntamento $app)
{
$this->appuntamenti[] = $app;
}
public function getAppuntamenti()
{
return $this->appuntamenti;
}
}
/**
* @ORM\Table()
* @ORM\Entity()
*/
class Appuntamento
{
/**
* @ORM\ManyToMany(targetEntity="Clown", mappedBy="appuntamenti")
*/
private $partecipanti;
public function __construct() {
$this->partecipanti = new ArrayCollection();
}
...
public function addPartecipanti(Clown $partecipante)
{
$partecipante->addAppuntamenti($this);
$this->partecipanti[] = $partecipante;
}
public function getPartecipanti()
{
return $this->partecipanti;
}
}
然后我创建一个表单,允许设置 Appuntamento 的参与者(又名“partecipanti”)。
namespace Clown\DiaryBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class PartecipantiType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('title')
->add('partecipanti', 'entity', array(
'class' => 'ClownDiaryBundle:Clown',
'property' => 'drname',
'multiple' => true,
'expanded' => true,
))
;
}
public function getName()
{
return 'clown_diarybundle_partecipantitype';
}
}
现在我在控制器中创建动作,一个显示表单,一个更新实体。
/**
* @Route("/{id}/partecipanti", name="admin_appuntamento_partecipanti")
* @Template()
*/
public function partecipantiAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$entity = $em->getRepository('ClownDiaryBundle:Appuntamento')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Appuntamento entity.');
}
$partecipantiForm = $this->createForm(new PartecipantiType(), $entity);
return array(
'entity' => $entity,
'partecipanti_form' => $partecipantiForm->createView(),
);
}
/**
* @Route("/{id}/update_partecipanti", name="admin_appuntamento_update_partecipanti")
* @Method("post")
* @Template("ClownDiaryBundle:Appuntamento:partecipanti.html.twig")
*/
public function updatePartecipantiAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$entity = $em->getRepository('ClownDiaryBundle:Appuntamento')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Appuntamento entity.');
}
$partecipantiForm = $this->createForm(new PartecipantiType(), $entity);
$request = $this->getRequest();
$partecipantiForm->bindRequest($request);
if ($partecipantiForm->isValid()) {
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('admin_appuntamento_show', array('id' => $id)));
}
return array(
'entity' => $entity,
'partecipanti_form' => $partecipantiForm->createView(),
);
}
但是当我在第二个动作中获得帖子时,我尝试保留该对象,没有创建任何关联(在小丑和 Appuntamento 之间)。我忘记了什么吗?