2016-06-30 14 views
1

エラーメッセージ:新しいエンティティが関係を通じて発見された

新しいエンティティが関係を通じて は、エンティティの操作を持続カスケード構成されていなかった 「AppBundle \エンティティ\タリファ#ペソ」になっていました。 : AppBundle \ Entity \ TarifaPeso @ 0000000072d3bd4300000000232470d3。 この問題を解決するには、この 不明なエンティティ上のEntityManager#persist()を明示的に呼び出すか、カスケードを設定するか、 のマッピング@ManyToOne(..、cascade = {"persist"})でこの関連を維持します。できない場合 問題の原因となっているエンティティを確認するには、 'AppBundle \ Entity \ TarifaPeso #__ toString()'がヒントを得てください。

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 
     )) 

コントローラ...

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(), 
    )); 
} 

私には何が欠けていますか?本当に疲れた...助けてください?

+0

フォームを処理していますか? –

+0

申し訳ありませんが、私はコントローラコードを追加するのを忘れました、私はそれを更新しました。私は 'merge'と 'em-> persist'を変更して動作しますが、埋め込みクラス(TarifaPeso)は保存されません... – jmunozco

答えて

2

TarifaPeso::tarifaからTarifa::pesosの属性にcascade={"persist"}注釈を移動する必要があります。 [OK]を、それが解決され

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

素晴らしい!データはTarifaPesoテーブルに保存されますが、TarifaPesoテーブルのtarifa_idは保存されません(保存されない外部キー、他の2つのフィールドのみ)。何か追加する必要がありますか?あなたの助けのためのおしゃべり! – jmunozco

0

、今ではTarifaPesoテーブルにタリファIDを格納します。または、明示的にフォームから取得するすべてのpesos持続することができます。エラーは私がAddPesoメソッドからラインを削除したことでした:

public function addPeso(\AppBundle\Entity\TarifaPeso $pesos) 
{ 
    $this->pesos[] = $pesos; 
    $pesos->setTarifa($this); 
    return $this; 
} 
+0

「ライン」はどれですか? –

関連する問題