2016-06-30 6 views
1

die Fehlermeldung:eine neue Einheit wurde durch die Beziehung gefunden

eine neue Einheit wurde durch die Beziehung ‚AppBundle \ Entity \ Tarifa # pesos‘ gefunden, die nicht für die Einheit konfiguriert wurde persistieren Operationen kaskadieren : AppBundle \ Entity \ TarifaPeso @ 0000000072d3bd4300000000232470d3. Um dieses Problem zu lösen: Entweder explizit EntityManager # persist() auf dieser unbekannten Entität aufrufen oder Kaskade persistent diese Zuordnung in der Zuordnung zum Beispiel @ManyToOne (.., cascade = {"persist"}). Wenn Sie nicht herausfinden können, welche Entität das Problem verursacht, implementieren Sie 'AppBundle \ Entity \ TarifaPeso #__ toString()', um einen Hinweis zu erhalten.

Tarifa.php

/** 
* @ORM\OneToMany(targetEntity="TarifaPeso", mappedBy="tarifa") 
*/ 
private $pesos; 

TarifaPeso.php

/** 
* @ORM\ManyToOne(targetEntity="Tarifa", inversedBy="pesos", cascade={"persist"}) 
* @ORM\JoinColumn(name="tarifa_id", referencedColumnName="id") 
*/ 
private $tarifa; 

TarifaType.php

 ->add('pesos', CollectionType::class, array(
      'entry_type' => TarifaPesoType::class, 
      'allow_add' => true, 
      'allow_delete' => true, 
      'by_reference' => false 
     )) 

Der Controller ...

public function newAction(Request $request) 
{ 
    $tarifa = new Tarifa(); 

    $form = $this->createForm('AppBundle\Form\TarifaType', $tarifa); 

    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 

     $entityManager = $this->getDoctrine()->getManager(); 
     $entityManager->persist($tarifa); 
     $entityManager->flush(); 

     $this->addFlash('success', 'project.created_successfully'); 

     return $this->redirectToRoute('admin_post_index'); 
    } 

    return $this->render('admin/tarifas/new.html.twig', array(
     'form' => $form->createView(), 
    )); 
} 

Was fehlt mir? Wirklich erschöpft ... bitte irgendwelche Hilfe?

+0

Sind Sie mit dem Senden des Formulars selbst? –

+0

Entschuldigung, ich habe vergessen, den Controller-Code hinzuzufügen, ich habe es aktualisiert. Ich habe 'em-> persist' mit 'merge' geändert und es funktioniert, aber es speichert nicht die Einbettungsklasse (TarifaPeso) ... – jmunozco

Antwort

2

Sie sollten cascade={"persist"} Annotation von TarifaPeso::tarifa zu Tarifa::pesos Eigenschaft verschieben. Oder Sie können explizit alle pesos bestehen bleiben Sie aus dem Formular erhalten:

$entityManager->persist($tarifa); 
foreach ($tarifa->getPesos() as $peso) { 
    $entityManager->persist($peso); 
} 
$entityManager->flush(); 
+1

großartig! es speichert Daten in TarifaPeso Tabelle, aber nicht die Tarifa_id in der TarifaPeso Tabelle (der Fremdschlüssel ist nicht gespeichert, nur die anderen beiden Felder), muss ich noch etwas hinzufügen? Tnaks für Ihre Hilfe !!! – jmunozco

0

Ok, es ist gelöst, jetzt ist es die Tarifa-ID in der TarifaPeso Tabelle speichert. Der Fehler war, dass ich die Zeile von der AddPeso-Methode entfernt hatte:

+0

Welcher ist "die Linie"? –

Verwandte Themen