web-dev-qa-db-ja.com

symfony2からエンティティを削除する方法

私の最初のsymfony2プロジェクトは、データベースに保存されたゲスト(イベントに招待された)のリストです。私は持っています

  • すべての変数(id、name、address、phone numberなど)を含むエンティティクラスGuestを作成しました
  • mysql dbにスキーマを作成しました
  • twigテンプレートに「ゲストを追加する」ためのルートを作成しました
  • formTypeを作成しました

最後に、コントローラーの「createGuest」メソッドで、すべてが正常に機能します。

データベースからゲストを削除することができません。 Symfony2の公式本を含む、Webのすべてのチュートリアルを読みました。それが言うことはすべてです:

オブジェクトの削除

オブジェクトの削除は非常に似ていますが、エンティティマネージャのremove()メソッドの呼び出しが必要です:

$em->remove($product);
$em->flush();

コントローラのdeleteAction($ id)をtwigテンプレートに接続する方法については、それ以上のことは述べていません(「オブジェクトの更新」セクションにもドキュメントがありません)。私がしたいのは、すべてのゲストをviewGuestsアクションとviewGuests twigテンプレートでリストすることです。すべての行の横に削除アイコンがあり、クリックしてエントリを削除する必要があります。シンプルですが、ドキュメントが見つからず、どこから始めればよいかわかりません。

public function deleteGuestAction($id)
    {
        $em = $this->getDoctrine()->getEntityManager();
        $guest = $em->getRepository('GuestBundle:Guest')->find($id);

        if (!$guest) {
            throw $this->createNotFoundException('No guest found for id '.$id);
        }

        $em->remove($guest);
        $em->flush();

        return $this->redirect($this->generateUrl('GuestBundle:Page:viewGuests.html.twig'));
    }
56
Radolino

Symfonyは賢く、find()を自分で作る方法を知っています:

public function deleteGuestAction(Guest $guest)
{
    if (!$guest) {
        throw $this->createNotFoundException('No guest found');
    }

    $em = $this->getDoctrine()->getEntityManager();
    $em->remove($guest);
    $em->flush();

    return $this->redirect($this->generateUrl('GuestBundle:Page:viewGuests.html.twig'));
}

コントローラーでIDを送信するには、{{ path('your_route', {'id': guest.id}) }}を使用します

85
Jérôme Boé

DELETE FROM ... WHERE id = ...;

protected function templateRemove($id){
            $em = $this->getDoctrine()->getManager();
            $entity = $em->getRepository('XXXBundle:Templates')->findOneBy(array('id' => $id));

            if ($entity != null){
                $em->remove($entity);
                $em->flush();
            }
        }
5
websky

私が理解していることから、あなたはあなたのテンプレートに何を入れるべきかということに苦労しています。

例を示します。

<ul>
    {% for guest in guests %}
    <li>{{ guest.name }} <a href="{{ path('your_delete_route_name',{'id': guest.id}) }}">[[DELETE]]</a></li>
    {% endfor %}
</ul>

これで、ゲスト内のすべてのオブジェクトが繰り返され(オブジェクトコレクションの名前が異なる場合は、名前を変更する必要があります!)、名前が表示され、正しいリンクが配置されます。ルート名は異なる場合があります。

3
Sgoettschkes