2017-02-17 21 views
0

なぜDoctrine 2 Entity managerを使ってデータベース内のエントリを削除できないのですか? 私は次のコントローラとエンティティを持っていて、問題があります。 私はコントローラのオブジェクトフォームのエンティティマネージャを取得し、このオブジェクトを削除できません。どうして?Doctrine2で仕事を "削除"しない

// /Controller/Controller.php 
/** 
* Handler delete checkbox 
* @Route("/administrator/services/delete/{id}", requirements={"id" = "\d+"}, defaults={"id" = 0}, name="service_delete") 
* @Template() 
*/ 
public function serviceDeleteAction(Request $request, $id){ 
    $em = $this->getDoctrine()->getEntityManager(); 
    $repoServices = $em->getRepository(CoworkingService::class); 

    $services = $repoServices->findOneBy(['id' => $id]); 
    $em->remove($services); 
    $em->persist($services); 
    $em->flush(); 

    return [];//$this->redirectToRoute('administrator'); 
} 

// /Entity/CoworkingService.php 
class CoworkingService 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @ORM\Column(type="string", length=50) 
*/ 
private $name; 

/** 
* @ORM\ManyToOne(targetEntity="SentviBundle\Entity\Language") 
* @ORM\JoinColumn(name="language_id", referencedColumnName="id", onDelete="CASCADE") 
*/ 
private $language; 

/** 
* @ORM\Column(name="common_identifier", type="text") 
*/ 
private $commonIdentifier; 

ありがとう!

+2

は削除 '$ EM->は($サービス)を持続してみてください;' – Matteo

+0

@Matteo、この素晴らしいです。それは私のために働く。どうもありがとうございました! – ladone

答えて

0

@Matteo’s commentはすでに問題を解決しましたが、何が起こったのか説明します。

あなたは3つのエンティティマネージャの操作を実行している:

$em->remove($services); 
$em->persist($services); 
$em->flush(); 

あなたが$em->flush()を呼び出す前に、あなたはすべての操作がサービスに登録されている、知っている必要がありますが、「作業単位」(UOW)と呼ばれます。

UOWはエンティティ(エンティティの追加/削除を含む)内のすべての変更を追跡し、flush()に電話をかけたときにのみデータベースに適用します。

$em->remove($services)を呼び出すときに、エンティティを削除することをUOWに伝えました。ただし、その後すぐに$em->persist($services)を呼び出すと、エンティティを作成(または効果的に保持)したいことをUOWに伝えました。 (Doctrineでは、 "persist"はデータベースへの接続が意味するものではなく、エンティティをEM/UOWに渡して変更を計算することに注意してください)。

したがって、結論として、 persist操作はremoveをキャンセルし、その時点ではflushは何もしませんでした。エンティティのライフサイクルとEMの状態の詳細については

が見http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html

+0

ご清聴ありがとうございました! – ladone

関連する問題