在网上搜索了很长时间后,我决定自己写我的第一篇文章。我希望我以正确的方式去做。
这是我的问题。我在我的项目中使用 symfony 2.1。而且我必须处理两个对象之间的双向多对多关系。
我已经创建了 2 个实体,完成了映射,完成了控制器、模板和 formBuilder。我设法坚持两个实体。对于一个实体,我可以保留该实体以及与另一个实体的关系。但对于另一个实体,我只能坚持实体。与其他实体的关系不会持续存在。
以下是 2 个实体的摘录:
class EntrainementCategorie{
{...}
/** @ORM\ManyToMany(targetEntity="EntrainementType", mappedBy="categories", cascade="persist") */
protected $types;
}
这是第二个实体:
class EntrainementType{
{...}
/**
* @ORM\ManyToMany(targetEntity="EntrainementCategorie",inversedBy="types", cascade="persist")
* @ORM\JoinTable(name="mottet_entrainement_types_categories",
* joinColumns={@ORM\JoinColumn(name="idType", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="idCategorie", referencedColumnName="id")})
*/
protected $categories;
}
所以你可以看到,类别和类型之间存在双向多对多关系。
这是控制器:
class EntrainementCategorieController extends GenericController{
{...}
public function creerAction(Request $request){
return $this->creerActionGeneric($request,new Categorie(),new CategorieType());
}
}
第二个 :
class EntrainementTypeController extends GenericController{
{...}
public function creerAction(Request $request){
return $this->creerActionGeneric($request,new Type(),new TypeType());
}
}
这是 GenericController :
class GenericController extends Controller{
{...}
protected function creerActionGeneric(Request $request,$object,$objectType){
$form = $this->createForm($objectType,$object);
$isThereProblem = false;
if ($request->isMethod('POST')) {
$isThereProblem = true;
$form->bind($request);
if ($form->isValid()) {
$this->getEntityManager()->persist($object);
$this->getEntityManager()->flush();
$this->get('session')->getFlashBag()->add('information', $this->FORM_SUCCESS_MESSAGE);
$isThereProblem = false;
}
}
if ($isThereProblem){
$this->get('session')->getFlashBag()->add('error', $this->FORM_ERROR_MESSAGE);
}
return $this->render($this->BUNDLE.':'.$this->ENTITY.':'.$this->CREATE_TEMPLATE, array('form' => $form->createView()));
}
}
这是 formBuilder :
class EntrainementCategorieType extends AbstractType{
{...}
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('label','text')
->add('types','entity',array(
'class' => 'KarateEntrainementBundle:EntrainementType',
'property' => 'label',
'multiple' => true,
'expanded' => true));
}
}
第二个:
class EntrainementTypeType extends AbstractType{
{...}
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('label','text')
->add('categories','entity',array(
'class' => 'KarateEntrainementBundle:EntrainementCategorie',
'property' => 'label',
'multiple' => true,
'expanded' => true));
}
}
因此,当我填写 EntrainementType 表单时,类型及其与类别的关系都将保持不变。但是当我填写 EntrainementCategory 表单时,只有类别被保留,而不是它与类型的关系。
有谁知道我做错了什么?
希望我已经很清楚了。谢谢你的帮助 !