2011-10-27 2 views
1

내 mysql 데이터베이스에서 "User"와 "UserProfile"의 두 테이블이 있습니다. "UserProfile"테이블에는 "user"테이블의 "id"열에 연결되는 'user_id'라는 외래 키 열이 있습니다. 이제 doctrine을 사용하여 db 테이블에서 모든 엔티티 클래스를 생성 할 때 생성 된 "UserProfile"클래스는 'user'라는 이름의 속성을 포함하고 'user_id'라는 속성은 포함하지 않습니다. 괜찮습니까?? 나는 사용자의 프로파일을 찾으려면교리의 기본/외래 키 관계

이 지금의 USER_ID 주어, 나는 이런 식으로 뭔가를 작성하는 데 필요한 :

$user_profile_repo = $this->em->getRepository("UserProfile"); 

$user_profile = $user_profile_repo->findOneBy(array("user_id"=>$id)); 

그러나 생성 된 엔티티 클래스는 "USER_ID"속성을 포함하지 않는 등 , 위의 코드는 작동하지 않습니다. 이제 나는 을 알 필요가있다 위 코드가 작동하도록 조정할 수있는 방법은 무엇입니까? 감사합니다.

+0

당신이 열 이름을 지정해야하고, :)와 사용자 프로필에 당신은

는 5.7 oneToOne 양방향과 유사 인 getUser() 가야 협회. 나는 docblock을 사용한다. http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html을 확인하십시오. 사용자 프로필에서 열로 정의되어야하는 일대일 i 관계입니다. 사용자 클래스에서 변수를 추가하고 열없이 연관을 정의 할 수 있습니다. – galchen

+0

글쎄, 그게 내가하고 싶지 않은 것입니다. 실제로 자동 생성 된대로 클래스를 편집하고 싶지 않습니다. 그래서, 다시 한 번 클래스를 생성해야 할 때, 모든 변경 사항은 사라질 것입니다. 그래서, 대체 방법을 찾고 있습니다. 나는 약간이 있다고 믿는다. – Rana

+0

당신은 필요 없다. 주석을 추가하고 명령 줄 도구를 사용하여 모든 것을 생성하십시오. 예를 들어 대답을 추가하겠습니다. – galchen

답변

1

데이터베이스의 테이블/열의 실제 이름은 실제로 중요하지 않습니다. 당신은 코멘트에 그들을 설정할 수 있습니다.

그 결과는 아래와 같습니다 : 당신은 사용자의 방법 getProfile을 얻어야한다, 사용자가 열 ID를 가지고 있으며, 사용자 프로필은 한 번 생성

을 USER_ID있다

/** 
* models\User 
* @Table(name="User") 
* @Entity 
*/ 
class User 
{ 
    /** 
    * @Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false) 
    * @Id 
    * @GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @Column(name="name", type="string", length=50, precision=0, scale=0, nullable=false, unique=false) 
    */ 
    private $name; 

    /** 
    * @OneToOne(targetEntity="models\UserProfile", mappedBy="user") 
    */ 
    private $profile; 
} 


/** 
* models\UserProfile 
* @Table(name="UserProfile") 
* @Entity 
*/ 
class UserProfile 
{ 
    /** 
    * @OneToOne(targetEntity="models\User", inversedBy("profile")) 
    * @JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    private $user; 
} 

이 경우 (http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html

+0

귀하의 제안으로이 문제를 해결할 수있는 단서가되었습니다. 그러나, 나는 그것을 내 mysql 데이터베이스에서 쌍방향 기본/fireign 키 제약 조건 (1 대 1로 만들기 위해)을 설정하여 해결할 수 있었고 교리를 통해 엔티티 클래스를 생성하여 언급 한 속성을 얻었다. 당신의 도움을 주셔서 감사합니다. :) – Rana

+0

도와 드리겠습니다. 나는 또한 생성/mysql 테이블을 업데이 트하는 스키마 도구를 사용합니다. 모든 제약 조건을 만든다. – galchen