2012-06-11 4 views
1

새 서버에 내 projet을 배포했는데 "SQLSTATE [23000] : 무결성 제약 조건 위반 : 1452 자식 행을 추가하거나 업데이트 할 수 없습니다 : 외래 키 제약 조건이 실패합니다"오류가 발생하면 내가 상속 클래스를 삽입하려고 :Doctrine2 상속 - 1452 : 무결성 제약 조건 위반

/** 
* @ORM\Table(name="prosante") 
* @ORM\Entity 
*/ 

class ProSante extends Base 
{ 

    /** 
    * @ORM\Column(type="string") 
    */ 
    protected $firstName; 
} 


/** 
* @ORM\Table(name="base") 
* @ORM\Entity(repositoryClass="Test\MyBundle\Entity\BaseRepository") 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="discr", type="string") 
* @ORM\DiscriminatorMap({"base" = "Base", 
*      "prosante" = "ProSante", 
*      "pharmacie" = "Pharmacie"}) 
*/ 

abstract class Base 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
} 

로그 :

[2012-06-11 15:42:46] doctrine.DEBUG: INSERT INTO base (name) VALUES (?) ({"1":"Blabla"}) [] [] 
[2012-06-11 15:42:46] doctrine.DEBUG: INSERT INTO prosante (id, firstname) VALUES (?, ?) ({"1":"0","2":"PATRICK"}) [] [] 

내가 로컬 호스트에 같은 INSERT를 수행 할 때 오류가 표시되지 않기 때문에 어떻게 해야할지 모르겠어요.

EDIT "SELECT LAST_INSERT_ID();"를 선택하십시오. 수동으로 내 "베이스"내 데이터베이스에 삽입 한 후 0 반환하지 않는, 이해가 안 돼요.

해결 방법 드라이버 문제로, 변경하고 작동합니다.

+0

당신이 문제를 설명 할 수 ..

@MappedSuperclass

그리고 당신은 안전하게 다른 엔티티로 확장 할 수 있습니다 :

이 단순히로 주석을 수행하려면? 나는 똑같은 것을하고있다. – Nate

답변

1

doctrine은 "Base"를 자체 테이블로 해석합니다. 여기에서 달성하고자하는 것은 Base 클래스를 매핑 된 수퍼 클래스로 갖는 것입니다.

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#mapped-superclasses

+0

Doctrine to interpert Base를 자체 테이블로 사용하기 때문에 "Class Table Inheritance"를 사용합니다. http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping. html # class-table-inheritance하지만 INSERT에서 실패했습니다 – nlaille

+0

아, 내가보기에, 해당 엔티티에 대한 "show create table"을보고 외래 키 제약 조건을 설정할 수 있는지, 왜 그들이 거기있어. 미안해서 더 도움이되지 못했습니다. –

+0

좋아요, 어쨌든 외래 키 제약 조건은 괜찮아 보이지만 로그는 이상하게도 교리는 마지막 ID 삽입을 모르는 것과 같습니다. – nlaille