長い間ウェブで検索した後、私は自分の最初の投稿を書くことにしました。私はそれを正しい方法で行うことを願っています。
これが私の問題です。私は自分のプロジェクトでsymfony2.1を使用しています。そして、2つのオブジェクト間の双方向の多対多の関係に対処する必要があります。
2つのエンティティを作成し、マッピングを行い、コントローラー、テンプレート、およびformBuilderを実行しました。私はなんとか両方のエンティティを永続化することができます。1つのエンティティについて、エンティティと他のエンティティとの関係を永続化できます。しかし、他のエンティティの場合、私はエンティティを永続化することしかできませんでした。他のエンティティとの関係は持続しません。
2つのエンティティの抜粋は次のとおりです。
class EntrainementCategorie{
{...}
/** @ORM\ManyToMany(targetEntity="EntrainementType", mappedBy="categories", cascade="persist") */
protected $types;
}
これが2番目のエンティティです:
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());
}
}
2つ目:
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));
}
}
そして2番目のもの:
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フォームに入力すると、カテゴリのみが保持され、タイプとの関係は保持されません。
誰かが私が間違った方法で何をしているのか知っていますか?
私が十分に明確になったことを願っています。助けてくれてありがとう!