2016-05-23 1 views
1

Symfonyがエンティティとしてエンティティを認識しないのはなぜですか? #2で見られるように、Symfonyはクラスを知っています。そして、それはNews Entityを見つけることができるので、教義も同じです。remove()が自分のエンティティを配列とみなす理由

/** 
* 
* @Route("/news/delete/{id}", name="news_delete") 
*/ 
public function deleteAction($id) { 

    $toDelete = new News(); 

    $em = $this->getDoctrine()->getManagers(); 

    $toDelete = $this->getDoctrine() 
       ->getRepository('AppBundle:News') 
       ->findOneBy(array('id' => $id)); 

    dump($toDelete); //Posted under #1 
    dump(get_class($toDelete)); //Posted under #2 
    $em->remove($toDelete); 
    $em->flush(); 

    return $this->redirectToRoute('news_show', array(), 301); 
} 



#1: 
News {#926 ▼ 
     -id: 16 
     +headline: "1313" 
     +newsBody: "12313" 
     +date: DateTime {#1027 ▶} 
     +archiveDate: DateTime {#921 ▶} 
     -categories: PersistentCollection {#934 ▶} 
    } 

#2: 
"AppBundle\Entity\News" 

EDIT: エラー:配列を返す私はgetManagersと呼ばれていること、それが私に指摘されたオフィスでは、アレイ

+0

エラーメッセージを表示できますか? –

+0

@Emanuel Oster done。 – HermanTheGermanHesse

+0

エラーメッセージは、 '$ em'は' $ toDelete'ではなく配列であることを示しています。よく見ると、getManager()の代わりに 'getManagers()'を呼び出すことがわかります –

答えて

1

上のメンバ関数のremove()()関数の呼び出しすべてのマネージャーと

コードの残りの部分もわかりやすくするために私に推薦されました。

$em = $this->getDoctrine()->getManager(); 
    $repo = $em->getRepository('AppBundle:News'); 
    $toDelete = $repo->findOneBy(array('id' => $id)); 

私の質問に取り組む時間を割いた皆さん、ありがとうございます。

1

だけのヒントとして、あなたは

$toDelete = $this->getDoctrine() 
      ->getRepository('AppBundle:News') 
      ->find($id); 

また、IDのみを使用しているので、私もそれについての問題を取得し、検索()関数を使って魔法の呼び出しを回避し、instanceof

を使用して、それを解決することができます
if($toDelete instanceof News) 
{ 
    $em->remove($toDelete); 
    $em->flush(); 
} 
関連する問題