У меня есть две таблицы пользователь и расположение
пользователь имеет идентификатор (первичный) и поля местоположения/столбцы
местоположение имеет id (первичный) и столбцы города
Теперь я хочу связать две таблицы по user.location с помощью location.city Как я могу сделать это, считая город не первичным ключом, а уникальным. Я использую cakephp 1.2.
Также в mysql можно связать/объединить таблицы без первичного ключа, но уникальный ключ
Либо в модели, либо с привязкой "на лету" вы можете создавать объединения с непервичными ключами следующим образом
public $hasOne = array(
'RelatedModel' => array(
'className' => 'RelatedModel',
'foreignKey' => false,
'conditions' => array(
'`MainModel`.`random_field` = `RelatedModel`.`some_field`'
)
)
}
трюк устанавливает для foreignKey значение false, поэтому cake ничего не пытается и затем устанавливает условия вручную, также обратите внимание, что поля выделены и в одной строке как-то вроде
'`MainModel`.`random_field`' => '`RelatedModel`.`some_field`'
выводит
SELECT ..... FROM ... LEFT JOIN ... ON (`MainModel`.`random_field` = '`RelatedModel`.`some_field`')
который попытается объединить строки, которые == 'RelatedModel
. some_field
' (фактическая строка)