2010-05-11 4 views
3

Doctrine과의 첫 번째 Symfony 프로젝트를 진행하고 있는데, 나는 차질을 겪었다. 저는 두 명의 선수와 함께 게임을 표현하려고합니다. 내가 갖고 싶은 관계는 PlayerOne과 PlayerTwo가 각각 Users 테이블의 ID에 맞춰져 있습니다. 이것은 내가 지금까지 가지고있는 것의 일부입니다 :YAML을 사용한 Doctrine의 1 대 2 관계

Game: 
    actAs: { Timestampable:- } 
    columns: 
    id: { type: integer, notnull: true, unique: true } 
    startDate: { type: timestamp, notnull: true } 
    playerOne: { type: integer, notnull: true } 
    playerTwo: { type: integer, notnull: true } 
    winner: { type: integer, notnull:true, default:0 } 
    relations: 
    User: { onUpdate: cascade, local: playerOne, foreign: id} 
    User: { onUpdate: cascade, local: playerTwo, foreign: id} 

그건 작동하지 않습니다. 그것은 괜찮지 만, 생성하는 SQL은 playerTwo에 대한 제약 조건 만 포함합니다. 또한

User: { onUpdate: cascade, local: [playerOne, playerTwo], foreign: id} 

:

User: [{ onUpdate: cascade, local: playerOne, foreign: id}, { onUpdate: cascade, local: playerTwo, foreign: id}] 

그 마지막 두 던져 오류가 내가 빌드하려고 나는 몇 가지 다른 일을 시도했습니다. 내가 뭘하려고하는지 이해하고 그것을 성취하도록 도울 수있는 사람이 밖에 있습니까?

답변

6

는 관계에 대해 서로 다른 이름을 시도해보십시오

relations: 
    UserOne: { onUpdate: cascade, local: playerOne, foreign: id, class: User } 
    UserTwo: { onUpdate: cascade, local: playerTwo, foreign: id, class: User } 

편집 :도 추가 참고 "클래스 : 사용자"명시 적 관계의 유형에 대해 알려줍니다 매개 변수를.

+0

+1. 동일한 이름을 가진 2 개의 다른 속성을 가질 수 없기 때문에 동일한 이름을 가진 2 개의 관계를 가질 수 없습니다. –

1

$ game-> getUser()라고 말하면, 어떤 사용자를 언급하고 있는지 분명하지 않습니다. 그들은 동일한 테이블을 참조하기 때문에 두 관계에 서로 다른 이름을 지정하고 두 개의 다른 foreignAliases를 선언해야합니다. 기본적으로 게임 테이블은 다른 이름 (예 : UserOne, UserTwo)을 가진 각 관계를 참조 할 수 있어야하며 반대의 경우도 마찬가지입니다. 그렇지 않으면 Doctrine을 혼동 할 것이고 관계는 올바르게 설정되지 않을 것입니다.

이전에 비슷한 문제가있었습니다 ... 모델을 빌드 한 후에 MySQL Workbench를 사용하여 스키마를 시각적으로 표현한 결과 관계가 모두 정확히 필요한지 확인하는 데 도움이되었습니다.

희망이 있습니다.