2016-06-28 5 views
0

PersonalDevelopmentRequest 엔티티에서 지우기를 호출하면 DB에 중복 레코드가 존재합니다.Doctrine persist & flush가 Symfony에서 중복 레코드를 야기합니다

PHP 7.0.7, MySQL 5.6.28 및 Symfony 2.8.7을 사용합니다.

업데이트 : 컨트롤러 끝에서 리디렉션을 제거하면 Doctrine은 한 번만 기록을 계속합니다. 리디렉션은 Doctrine과 관련이 있습니까? 컨트롤러

코드 :

$request = new PersonalDevelopmentRequest(); 
$request 
    ->setTrainingGroup($training->getTrainingGroup()) 
    ->setTraining($training) 
    ->setEmployee($this->getUser()) 
    ->setName($training->getName()); 

$em = $this->getDoctrine()->getManager(); 

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

$this->addFlash('success', 'Mám to.'); 

return $this->redirectToRoute('personal_development'); 

법인 :

/** 
* PersonalDevelopmentRequest. 
* 
* @ORM\Table(name="personal_development_request") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\PersonalDevelopmentRequestRepository") 
* @Gedmo\SoftDeleteable() 
*/ 
class PersonalDevelopmentRequest implements WorkflowInterface 
{ 
    use BlameableEntity; 
    use SoftDeleteableEntity; 
    use TimestampableEntity; 

    /** 
    * @ORM\Column(name="id", type="guid") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="UUID") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="date", nullable=true) 
    */ 
    private $period; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="personalDevelopmentRequests") 
    */ 
    private $employee; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User") 
    * @ORM\JoinColumn(nullable=true) 
    */ 
    private $employeeForRelation; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\TrainingGroup", inversedBy="requests") 
    * @ORM\JoinColumn(nullable=false) 
    */ 
    private $trainingGroup; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Training", inversedBy="requests") 
    * @ORM\JoinColumn(nullable=true) 
    */ 
    private $training; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\AnnualReview", inversedBy="requests") 
    */ 
    private $annualReview; 

    /** 
    * @ORM\Column(type="string", nullable=true) 
    */ 
    private $name; 

    /** 
    * @ORM\Column(type="text", nullable=true) 
    */ 
    private $description; 

    const TYPE_ANNUAL_REVIEW = 'annual_review'; 
    const TYPE_MANUAL = 'manual'; 
    const TYPE_TRAINING_PLAN = 'training_plan'; 

    /** 
    * @ORM\Column(type="string", length=16) 
    */ 
    private $type; 

    const STATE_SENT = 'sent'; 
    const STATE_DECLINED = 'declined'; 
    const STATE_APPROVED = 'approved'; 
    const STATE_FINISHED = 'finished'; 
    const STATE_UNFINISHED = 'unfinished'; 

    /** 
    * @ORM\Column(type="string", length=16) 
    */ 
    private $state; 

    const RESULT_DIDNT_COMPLETE = 0; 
    const RESULT_COMPLETED_PASSED = 1; 
    const RESULT_COMPLETED_FAILED = 2; 

    /** 
    * @ORM\Column(type="integer", nullable=true) 
    */ 
    private $result; 

    /** 
    * @ORM\Column(type="float", nullable=true) 
    */ 
    private $cost; 

    /** 
    * @ORM\Column(type="date", nullable=true) 
    */ 
    private $mustBeRenewedAfter; 

    const TRAINING_TYPE_NONE = null; 
    const TRAINING_TYPE_INT = 'int'; 
    const TRAINING_TYPE_EXT = 'ext'; 

    /** 
    * @ORM\Column(type="string", nullable=true) 
    */ 
    private $trainingType; 

    /** 
    * @ORM\Column(type="integer", nullable=true) 
    */ 
    private $rangeInHours; 

    /** 
    * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Log") 
    * @ORM\JoinTable(name="personal_development_request_logs", 
    * joinColumns={@ORM\JoinColumn(name="personal_development_request_id", referencedColumnName="id")}, 
    * inverseJoinColumns={@ORM\JoinColumn(name="log_id", referencedColumnName="id", unique=true)} 
    *) 
    */ 
    private $logs; 

    ... 

사람이 내가 잘못 뭐하는 거지 말씀해 주시겠습니까?

+0

컨트롤러의 이름과 경로를 알려주시겠습니까? – Kapil

답변

0

$kernel->handle($request);이 중복되어 발생했습니다. app.php에 있습니다.

0

주어진 코드로만 데이터베이스에 남아있는 코드 블록이 조건부 블록 (if 조건이 아님) 안에 있지 않고 사용자가 redirectToRoute을 제거하면 해결할 수 있다고 추측 할 수 있습니다. 그래서 그것은 리다이렉션의 반복일지도 모르고 동일한 컨트롤러를 두 번 사용하고 두 번 지속 할 수 있습니다. 예를 들어 $form->isValid() 조건과 같은 if 조건에 두는 것이 좋습니다. 레코드를 자유롭게 지속하지 않으려면

+0

나는 모든 행동을 게시 했으므로 어떤 형태도 없다. 그것은 정말로 redirectToRoute가 어떤 이유에서든 원인이되는 것처럼 보입니다. – fmstoun

관련 문제