2017-09-27 2 views
0

Ich benutze Symfony 2.8, ich habe One-to-many Beziehung zwischen Benutzer und Blog erstellt, (ein Benutzer viele Blogs). Außerdem habe ich eine Eins-zu-viele-Beziehung zwischen Blog und Kommentaren erstellt. Ähnlich eins-zu-viele Beziehung zwischen Benutzer und Kommentaren. Nun ist mein Kommentar Tabelle sieht wie folgt ausSymfony Speichern Sie Kommentare im Blog mit Benutzer und blogId

Kommentar Tabelle

id Primary  int(11) 
user_id Primary int(11) 
blog_id Primary int(11) 
comment    varchar(2000) 
created_at   datetime 

Kommentar Entity

Comment Entity

Blog Entity

Blog Entity

Benutzer Entity

User Entity

Blog-Controller -> showaction Methode

/** 
* @Route("/blog/show/{id}", name="blog_show") 
*/ 
public function showAction(Request $request,$id) 
{ 
    $blog = $this->getDoctrine()->getRepository(Blog::class)->findOneById($id); 
    $comment = new Comment(); 
    $form = $this->createForm(CommentType::class, $comment); 
    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) { 
     $user = new User(); 
     $blog = new Blog(); 
     $comment->setUser($this->getUser()); 
     $comment->setBlog($blog); 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($comment); 
     $em->flush(); 
     return $this->redirect($this->generateUrl('blog_show', array('id' => $id)), 301); 
    } 

    return $this->render('Blog/show.html.twig', array('blog'=> $blog,'form' => $form->createView())); 

} 

Nun, wenn ich die Kommentarfunktion von Blog anzeigen Seite einreichen, ist es mir diese zeigen Fehler

"A new entity was found through the relationship 'AppBundle\Entity\Comment#blog' that was not configured to cascade persist operations for entity: AppBundle\Entity\[email protected] To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement 'AppBundle\Entity\Blog#__toString()' to get a clue." 

Was ich hier verpasst habe. Jede Hilfe wird sehr geschätzt. Dank

+0

Es erzählt Sie haben keine Funktion namens "getBlog" in der Klasse. Ist das wahr? –

+0

Wenn Sie meine Kommentar-Entität überprüfen, gibt es eine Funktion getBlog() definiert. Aber es zeigt immer noch diesen Fehler. – Aamir

+0

Aber das ist in der 'Kommentar' Entität. Wenn Sie '$ this-> getBlog() aufrufen;' sucht diese Funktion im 'BlogController' selbst. Müssen Sie es stattdessen aus dem Formular bekommen? –

Antwort

1

Ich sehe nicht, eine Variable $blogId im Code genannt, aber vorausgesetzt, es eingestellt ist, können Sie versuchen:

[Edit: Folgen Sie Ihrem Beispiel $blog zu bekommen]

$blog = $this->getDoctrine()->getRepository(Blog::class)->findOneById($id); 

$comment->setBlog($blog);//Pass that entity to the CommentEntity 
+0

Es zeigt mir jetzt diesen Fehler, "Eine neue Entität wurde über die Beziehung 'AppBundle \ Entity \ Comment # blog' gefunden, die nicht konfiguriert wurde, um persistente Operationen für Entitäten zu kaskadieren: AppBundle \ Entity \ Blog @ 000000000e6df9e9000000000ffb3b56.Um dieses Problem zu lösen: Rufen Sie entweder EntityManager # persist() explizit auf dieser unbekannten Entität auf oder konfigurieren Sie die Kaskade so, dass diese Zuordnung im Mapping beibehalten wird, z. B. @ManyToOne (.., cascade = {"persist"}). Wenn Sie nicht herausfinden können, welches Element das Problem verursacht, implementieren Sie 'AppBundle \ Entity \ Blog #__ toString()', um einen Hinweis zu bekommen. " – Aamir

+0

Ich erwähnte $ blogId hier, aber seine $ ID im Code. – Aamir

+0

Diese Zeile überschrieb $ blog Objekt "$ blog = new Blog();" in der showaction-Methode. Ich habe es entfernt und es hat perfekt funktioniert. – Aamir

Verwandte Themen