2017-10-09 82 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