2017-12-05 2 views
0

Hallo Ich brauche Informationen in meinem db zu speichern, was ich meine ist, wie hartnäckig, wenn die Beziehung ist vieltomany, ich mache so, aber es funktioniert nicht! ... Ich werde einen Code des Entity-Menüs einfügen.Speichern von Informationen in Controller Symfony-Beziehung 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; 
    } 

} 

ich nicht mit ManyToMany Beziehungen arbeitete, habe Erfahrung, ich hoffe, dieses Problem zu lösen, zeigt das ist sehr gut, aber ich weiß nicht, wie zu speichern, zu bearbeiten oder entfernen in diesem ManyToMany Tisch! .. ..

+0

Veröffentlichen Sie Ihre 'Menu' Entity Definition –

+0

Was meinst du mit" funktioniert nicht "? Ist es eine Ausnahme? Werden Daten nicht gespeichert? –

+0

Excepcion: Unbekanntes Feld: 0 –

Antwort

1

Erstens scheint dieses Bit seltsam.

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

Lehre findBy nimmt ein Array mit der Entität Feld als Schlüssel und der spezifischen Entität Wert als Wert. Wie folgt aus:

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

Wenn das ist, wie Sie Ihre $alimentos variabel strukturiert ist, das ist in Ordnung. Es sieht einfach komisch aus.

Wenn dies eine bidirektionale Beziehung ist, müssen beide Entitäten aktualisiert werden. So ist Ihr Controller-Code wie folgt:

$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. Dies war meine Lösung

-1

Ich habe erkannt, was ... war:

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

Und natürlich später ich anhalten Menü.

+0

Warum verwenden Sie nicht '-> findById ($ alimentos);'? Wenn Sie eine Repository-Methode in einer Schleife verwenden, sollte dies eine Glocke läuten. –

+0

Nein, es funktioniert nicht, weil Sie eine Instanz dieser Klasse benötigen, nicht die ID in der Tat –

+0

Nein, Sie nicht. FindById nimmt ein Array mit IDs. –

Verwandte Themen