我在多对多关联中有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(),
);
}
但是当我在第二个动作中得到帖子,并且我试图坚持该对象时,没有创建任何关联(Clown和Appuntamento之间)。 我忘记了什么吗?
答案 0 :(得分:0)
你应该通过拥有方来坚持你的实体(拥有方负责坚持)。在你的情况下,拥有方是小丑,但你正试图通过Appuntamento坚持 - 这就是为什么它不会持续存在。
尝试更改拥有方或通过Clown实体持续存在。
您可能还想了解更多关于拥有/反向概念的信息: