2017-12-05 10 views
0

こんにちは私のdbに情報を保存する必要があります。関係がmanytomanyのときにはどうやって維持するのですか?私はエンティティメニューのいくつかのコードを配置します。コントローラのsymfonyの関係に情報を保存ManyToMany HELPPPPP

 /** Agrega nuevo menù 
     * 
     * @Route("/save", name="admin_menu_save") 
     * @Method({"GET", "POST"}) 
     * @param Request $request 
     * @return Response 
     */ 
     public function saveAction(Request $request) 
     { 
      $em = $this->getDoctrine()->getManager(); 
      $fecha_menu = $request->get('fecha'); 
      $fecha_comprar = $request->get('fechacomprado'); 
      $fecha_vencimiento = $request->get('fechavencimiento'); 
      $alimentos = $request->get('select_alimentos'); 
      $a = $em->getRepository('AdminBundle:Alimento')->findBy($alimentos); 
      $menu = new Menu(); 
      $menu->setFecha(new \DateTime($fecha_menu)); 
      $menu->setFechacomprar(new \DateTime($fecha_comprar)); 
      $menu->setFechavence(new \DateTime($fecha_vencimiento)); 
      $menu->setPrecio(6); 
      $menu->addAlimento($a); 
      $em->persist($menu); 
      $em->flush(); 
      return new Response('Guardado OK'); 
     } 
//Menu Entity Definition (Just the necessary code): 

     /** 
    * @ORM\ManyToMany(targetEntity="Alimento", inversedBy="menu") 
    * @ORM\JoinTable(name="alimento_menu", 
    * joinColumns={ 
    *  @ORM\JoinColumn(name="menu_id", referencedColumnName="id") 
    * }, 
    * inverseJoinColumns={ 
    *  @ORM\JoinColumn(name="alimento_id", referencedColumnName="id") 
    * } 
    *) 
    */ 
    private $alimento; 

    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->alimento = new ArrayCollection(); 
    } 


    /** 
    * Add alimento 
    * 
    * @param \AdminBundle\Entity\Alimento $alimento 
    * 
    * @return Menu 
    */ 
    public function addAlimento(Alimento $alimento) 
    { 
     $this->alimento[] = $alimento; 

     return $this; 
    } 

    /** 
    * Remove alimento 
    * 
    * @param \AdminBundle\Entity\Alimento $alimento 
    */ 
    public function removeAlimento(Alimento $alimento) 
    { 
     $this->alimento->removeElement($alimento); 
    } 


    /** 
    * Get alimento 
    * 
    * @return ArrayCollection 
    */ 
    public function getAlimento() 
    { 
     return $this->alimento; 
    } 

} 

私は多対多の関係での作業経験していないが、私はこの問題を解決することを願って、that'sは非常に良いショーが、私は、保存、編集またはその多対多のテーブルに削除する方法を知っているドント!.. ..

+0

あなたの 'Menu'エンティティ定義を投稿してください –

+0

「うまくいかない」とはどういう意味ですか?それは例外ですか?データは保存されませんか? –

+0

Excepcion:Unrecognizedフィールド:0 –

答えて

1

まず、このビットは奇妙なようです。

$alimentos = $request->get('select_alimentos'); 
$a = $em->getRepository('AdminBundle:Alimento')->findBy($alimentos); 

教義findByはキーと値のような特定のエンティティ値として実体フィールドを持つ配列をとります。このように:

$em-getRepository('AdminBundle:Alimento')->findBy(['id' => $id]); 

それはあなたの$alimentos変数が構成されている方法なら、それは大丈夫です。それはただ奇妙に見えます。

これが双方向の関係である場合、両方のエンティティを更新する必要があります。コントローラーコードは次のようになります。

$a = $em->getRepository('AdminBundle:Alimento')->findBy($alimentos); 
$menu = new Menu(); 

// -- more code ---// 

$menu->addAlimento($a); 
$a->addMenu($menu); 
$em->persist($menu); 
$em->flush(); 

Check this documentationです。

-1

私はちょうどだったもの実現...これは私の解決策だった:

foreach ($alimentos as $item) { 
      $a = $em->getRepository('AdminBundle:Alimento')->find($item); 
      $menu->addAlimento($a); 
     } 

そしてもちろんの後、私はメニューを持続。

+0

なぜ、 ' - > findById($ alimentos);'を使わないのですか?ループでリポジトリメソッドを使用しているときは、ベルを鳴らすはずです。 –

+0

いいえ、実際にはIDではなく、そのクラスのインスタンスが必要なので、うまくいきません。 –

+0

いいえ、そうではありません。 FindByIdはidの配列をとります。 –

関連する問題