2017-10-09 4 views
0

私はデータを保持するときに、多くの関係を持つDoctrineを使用する際に問題があります。 - Blocの - 仕事多くの教義と多くの教義を継承しています

私はgetJobs()方法で存続する前に、自分のIDを取得 :

私は2つのエンティティを持っています。

$bloc = $form->getData(); 
// $bloc->getJobs() works I retrieve good IDs with foreach getId() 

$em->persist($bloc); 
$em->flush(); 

私の方法addJob:

/** 
* Add jobs 
* 
* @param Job $jobs 
* @return Bloc 
*/ 
public function addJob(Job $jobs) 
{ 
    $this->jobs[] = $jobs; 

    return $this; 
} 

マイ形式:

$bloc = $em->getRepository('Acme\\Entity\\Bloc')->find($id); 

    $form = $this->createForm(BlocType::class, $bloc); 

    $form->handleRequest(); 

    if($form->isSubmitted()) { 
     $bloc = $form->getData(); 

     $em->persist($bloc); 
     $em->flush(); 

     $this->addFlashMessage('edit', "Update message"); 
    } 

しかし、インクルードが私のデータベースにすでに私の仕事エンティティの代わりに使用ラインに新しい行を追加持続。

+0

あなたのエンティティに関する詳細情報を提供することができますか?また、コントローラのアクション、フォームのコレクション、... – ceadreak

+0

私は更新しました。あなたはもっと欲しいですか? – swagney

答えて

0

$jobsCollectionJobだと思いますので、このコレクションを処理するメソッドを実装する必要があります。

エンティティ宣言は(oneToMany、ManyToOne、UNI /双方向)が正しい場合は、このようなものが必要です:

class Bloc 
{ 
    // ... 
    protected $jobs; 

    public function __construct() 
    { 
     $this->jobs = new Doctrine\Common\Collections\ArrayCollection(); 
    } 

    public function getJobs() 
    { 
     return $this->jobs; 
    } 

    public function setJobs($jobs) 
    { 
     $this->jobs = new Doctrine\Common\Collections\ArrayCollection(); 

     foreach ($jobs as $job) { 
      $this->addJob($job); 
     } 

     return $this; 
    } 

    public function addJob(Job $job) 
    { 
     if (!$this->jobs->contains($job) { 
      $this->jobs->add($job); 
      // if needed for bi directional way 
      // $job->setBloc($this); 
     } 
    } 

    public function removeJob(Job $job) 
    { 
     // if you want 
    } 
    // ... 
} 
+0

あなたの答えをありがとう。私はすでに同様のエンティティを持っています。ゲッターとセッターはDoctrineコマンドで生成されます。正確なジョブは 'job'の集合です。 _1062キー 'UNIQ_A0C4F1C5989D9B62'の重複したエントリ 'value_slug' ... doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:私の仕事のエンティティで私のスラグの値に制約固有のtrueを追加しました。 105_ – swagney

+0

コレクションを正しく扱っていますか?このエラーは「いいえ」と思われます。フォームが提出されると、コレクションを処理するために 'addJob'と' removeJob'が使われるべきです。これらのメソッドは呼ばれていますか? – ceadreak