2017-10-09 81 views
0

當我堅持我的數據時,我有一個問題,使用與多對多關係的原則。堅持多對多的原則

我有2個實體: - 陣營 - 招聘

getJobs()方法堅持之前找回我的ID。

$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,所以你應該實現方法來處理這個集合。

如果實體聲明是正確的(一對多,多對一,單向/雙向定向),你應該有這樣的事情:

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

謝謝你的回答。我已經有了類似的實體。 Getters和setter是使用Doctrine命令生成的。確切的工作是「工作」的集合。我在工作實體中添加了對我的slu value值的約束唯一真,並且我有這個錯誤:_1062在... doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php中爲鍵'UNIQ_A0C4F1C5989D9B62'重複輸入'value_slug': 105_ – swagney

+0

你確定你正確處理收集?這個錯誤似乎說「不」。提交表單時,應該使用'addJob'和'removeJob'來處理集合。這些方法是否被稱爲? – ceadreak