2013-02-11 2 views
1

1 대 다수의 관계가있는 클래스가 있습니다. 이벤트 종류 :간단한 일대 다 관계 cakePHP

var $hasMany = array(
    'Event' => array(
     'className' => 'Event', 
     'foreignKey' => 'event_type_initials', 
     'dependent' => false, 
    ) 
); 

이벤트 :

var $belongsTo = array(
    'EventType' => array(
     'className' => 'EventType', 
     'foreignKey' => 'event_type_initials' 
    ) 
); 

는 이전의 관계는 event_type_id에 의해,하지만 지금은 initals로 변경되었습니다. 데이터에 액세스하려고 할 때 쿼리에 문제가 발생합니다. 다음 쿼리가 끝나면 왼쪽 조인이 Event임을 알 수 있습니다. event_type_initials = EventType. id, 이는 의미가 없습니다.

SELECT `Event`.`id`, `Event`.`event_type_initials`, `Event`.`user_id`, `Event`.`details`, `Event`.`start`, `Event`.`hours`, `Event`.`minutes`, `Event`.`all_day`, `Event`.`active`, `Event`.`created`, `Event`.`modified`, `EventType`.`id`, `EventType`.`initials`, `EventType`.`name`, `EventType`.`address`, `EventType`.`email`, `EventType`.`phone`, `EventType`.`person`, `EventType`.`color` FROM `sunshine3`.`events` AS `Event` LEFT JOIN `sunshine3`.`event_types` AS `EventType` ON (**`Event`.`event_type_initials` = `EventType`.`id`**) WHERE `Event`.`id` = 30 

어떤 도움도 환영합니다.

+0

왜 이해가 나던 그? 여기서 예상했던 것을 메모해야합니다. – mark

+0

글쎄, 나는 조인 조건이 다음과 같을 것으로 예상했다. Event.event_type_initials = EventType.initials (EventType.id가 아님) –

답변

3

foreignKey를 지정하면 항상 관련 테이블의 ID와 일치합니다. 당신은하지만, 여기에 조건을 사용해야합니다 : 당신이 필드를`foreignKey` ...를 사용하여이 방법을 지정한 경우

// this is important for the correct left joins 
var $belongsTo = array(
    'EventType' => array(
     'className' => 'EventType', 
     'foreignKey' => false, 
     'conditions' => array('Event.event_type_initials = EventType.initials') 
    ) 
); 

// for has many this is usually not necessary/possible (1:n), you can try though 
var $hasMany = array(
    'Event' => array(
     'className' => 'Event', 
     'foreignKey' => false, 
     'conditions' => 'Event.event_type_initials = EventType.initials' 
    ) 
); 
+0

시도했지만 행운이 없다. 조인은 여전히 ​​동일하게 유지된다 : LEFT JOIN'sunshine3'.event_types 'AS'EventType' ON ('Event'.event_type_initials' ='EventType'.'id')' –

+0

조건들이 문자열이나 배열 일 필요가 있는지 확실하지 않습니다. 둘 다 시도해 볼 수 있습니다. 또한 belongsTo 관계 설정을 위해 주로이 작업을 수행해야합니다. – mark

+0

편집 후에 작동합니다! 그냥 멋지다! 고맙습니다. –