在網絡上搜索了很長時間之後,我決定寫我的第一篇文章。 我希望我以正確的方式去做。Symfony ManyToMany雙向關係只能堅持一個方向
這是我的問題。 我在我的項目中使用了symfony 2.1。 我必須處理2個對象之間的雙向多對多關係。
我創建了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;
}
所以你可以看到,有類別之間的bidirectionnal許多一對多的關係類型。
這裏是控制器:
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,無論類型及其與類關係依然存在。 但是,當我fille EntrainementCategory形式,只有類別是持久的,而不是它與類型的關係。
有誰知道我做錯了什麼?
希望我已經明白了。 謝謝你的幫助!
是否有可能將此縮減爲更小的示例?有很多的代碼要經過,並很可能把很多人失去應答。 – ChrisF 2013-03-02 12:23:49
這是正確的。 這。 我認爲我刪除所有代碼,這不是解決這個問題 – emottet 2013-03-02 13:16:23
對於多對多關係,應該有你的數據庫,一個實體與其他 – 2013-03-02 13:26:27