2013-09-26 3 views
0

Doctrine의 설명서에서 약간 혼란스러워서 도움을받을 수 있습니다. 다음과 같은 클래스 상속 있습니다 :Doctrine2 클래스 테이블 상속

<?php 

class User 
{ 
    /** 
    * @var int 
    */ 
    private $_id; 

    /** 
    * @var Role 
    */ 
    private $_role; 
} 

class Company extends User 
{ 

} 

class Customer extends User 
{ 
    ... 
} 

class Role 
{ 
    /** 
    * @var int 
    */ 
    private $_id; 
} 

?> 

각 클래스를 별도의 테이블에 저장하고 싶습니다. 역할은 id에 의한 사용자 유형을 정의합니다. 이 문제를 어떻게 해결할 수 있습니까? 나는 이것을 시도했다 :

<?php 

/** 
* @Entity 
* @Table(name="user") 
* @InheritanceType("JOINED") 
* @DiscriminatorColumn(name="role_id", type="integer") 
* @DiscriminatorMap({"1" = "User", "2" = "Customer"}) 
*/ 
class User 
{ 
    ... 
} 

?> 

나는이 시나리오에서 역할 클래스를 다루는 방법을 모르겠다.


답장을 보내 주셔서 감사합니다. 지금이 시도하고 다음과 같은 오류 있어요 : 나는 다음 코드 한

[Doctrine\DBAL\Schema\SchemaException] 
There is no column with name '_id' on table 'customer'. 

:

<?php 

/** 
* Class Sb_User 
* 
* @Entity 
* @Table(name="user") 
* @InheritanceType("JOINED") 
* @DiscriminatorColumn(name="role_id", type="integer") 
* @DiscriminatorMap({"2" = "Sb_Customer", "8" = "Sb_Pos"}) 
*/ 
class Sb_User implements Sb_User_Interface 
{ 
    /** 
    * @Id 
    * @GeneratedValue 
    * @Column(name="id", type="integer") 
    * @var int 
    */ 
    protected $_id; 

    ... 
} 

/** 
* Class Sb_Customer 
* 
* @Entity 
* @EntityResult(discriminatorColumn="role_id") 
* @Table(name="customer") 
* 
*/ 
class Sb_Customer extends Sb_User implements Sb_Customer_Interface 
{ 
    .... 
} 

나는 내가 잘못 뭐하는 거지 모르겠어요. 너 나 좀 도와 줄 수있어?

?> 

답변

1

귀하의 질문이 다소 혼란 스럽습니다.

사용자의 역할을 정의하기 위해 조인 된 테이블 상속을 사용하려고하지만, 이해할 수있는 것과 똑같은 역할 속성을 사용자에게 추가하려고합니다. 네가 똑같은 일을 다른 방식으로 두 번하려고하는 것 같아.

어쨌든, 나는 당신에게 대답을하려고 노력할 것입니다. 당신이 사용되는 기본 클래스 속성과 관계를 정의 할 수 있습니다 http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#mapped-superclasses

그 방법 :

각 유형 (고객, 회사, 등)이 매핑 된 슈퍼 클래스에보고해야한다에 대해 별도의 테이블을 사용하려면

그것을 확장하는 모든 엔티티에 의해. 모든 데이터는 각 엔터티에 대해 별도의 테이블에 저장됩니다.

역할 엔터티를 사용하여 사용자의 역할을 정의하려면 사용자와 역할간에 다 대일 관계를 정의해야합니다.

행운을 빈다.