2013-02-11 72 views
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。嘗試訪問數據時查詢中發生問題。在以下查詢的結尾處,您可以看到左連接是Eventevent_type_initials = EventTypeid,這沒有任何意義。

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

,如果你指定的字段使用'foreignKey' ......這樣,爲什麼犯規,使意義?你應該注意你在這裏的期望。 – mark 2013-02-11 13:09:54

+0

好吧,我期待的連接條件是:Event.event_type_initials = EventType.initials(不是EventType.id) – 2013-02-11 13:24:26

回答

3

如果您指定了一個外鍵,它將始終與相關表的標識匹配。 你需要在這裏使用的條件,雖然:

// 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')' – 2013-02-11 13:40:56

+0

我不確定條件是否需要是字符串或數組。你可以嘗試兩種。還請注意,您需要主要爲belongsTo關係設置執行此操作! – mark 2013-02-11 14:22:28

+0

它在編輯後有效!太棒了!謝謝。 – 2013-02-11 14:39:22