2017-10-09 1 views
0

내 데이터를 유지할 때 Doctrine을 many to many 관계로 사용하는 데 문제가 있습니다. - 공산권 - 작업많은 doctrine과 함께 지속

나는 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입니다. 따라서이 컬렉션을 처리 할 수있는 메소드를 구현해야합니다.

엔터티 선언이 경우 올바른 (oneToMany, ManyToOne, 단방향/양방향)이 같은이 있어야합니다

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 명령으로 생성됩니다. 정확히 일자리 란'직업'의 모음입니다. 내 직업 엔티티에서 내 슬러그 값에 대한 고유 한 제약 조건을 추가했습니다.이 오류가 있습니다. _1062 'UNIQ_A0C4F1C5989D9B62'키의 중복 항목 'value_slug'... doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php : 105_ – swagney

+0

컬렉션을 올바르게 처리 했습니까? 이 오류는 "아니오"라고합니다. 양식이 제출되면 컬렉션을 처리하기 위해'addJob'과'removeJob'을 사용해야합니다. 이 메소드가 호출됩니까? – ceadreak

관련 문제