2013-02-11 2 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. Проблема возникает в запросе при попытке доступа к данным. В конце следующего запроса вы можете увидеть, что левое соединение - 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

почему оленья кожа, что имеет смысл, если вы определили поле таким образом, используя 'foreignKey' ...? Вы должны отметить, что вы ожидали отсюда. – mark

+0

ну, я ожидал, что условие для соединения будет: Event.event_type_initials = EventType.initials (not EventType.id) –

ответ

3

Если вы укажете 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

Я не уверен, что условия должны быть строкой или массивом. вы можете попробовать оба. также обратите внимание, что вам нужно сделать это в основном для установки родственных отношений! – mark

+0

Работает после редактирования! Просто прекрасно! Спасибо. –