Я знаю, что есть несколько таких вопросов по SO, и я прошел через большинство из них, но так как я не могу понять, где я иду не так, я думаю, что я мог бы быть где-то неуклюжей опечаткой, гдепропускаюВот мои модели:
class Country extends AppModel {
var $name = 'Country';
var $hasAndBelongsToMany = array(
'Entity' => array(
'className' => 'Entity',
'joinTable' => 'countries_entities',
'foreignKey' => 'country_id',
'associationForeignKey' => 'entity_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
}
class Entity extends AppModel {
var $name = 'Entity';
var $hasMany = array(
'Alert' => array(
'className' => 'Alert',
'foreignKey' => 'entity_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
var $hasAndBelongsToMany = array(
'EntityGroup' => array(
'className' => 'EntityGroup',
'joinTable' => 'entities_entity_groups',
'foreignKey' => 'entity_id',
'associationForeignKey' => 'entity_group_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
),
'Country' => array(
'className' => 'Country',
'joinTable' => 'countries_entities',
'foreignKey' => 'entity_id',
'associationForeignKey' => 'country_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
}
Я хочу сделать поиск, который возвращает все сущности, основанные на идентификаторе страны, т.е.
select entities.ticker from entities
join countries_entities on entities.id=countries_entities.entity_id
where country_id=78
Вот последняя итерация поискаоператор, который я пробовал:
$blap = $this->Entity->find('all', array('recursive'=>1,'fields'=> 'Entity.ticker','conditions'=>array('Country.id'=>78)));
И это SQL, который Cake генерирует, который генерирует ошибку SQL (он не пытается построить запрос с помощью таблицы соединения):
SELECT `Entity`.`ticker`, `Entity`.`id` FROM `entities` AS `Entity` WHERE `Country`.`id` = 78 LIMIT 1