Можно использовать bindModel & unbindModel в CakePHP для создания отношений, не основанных на автоматическом совершенстве Cake.
Так как вы были заинтересованы в поиске модели Product ,Я приведу пример, который можно вызвать из контроллера Products :
// unbind Artist
$this->Product->unbindModel(array(
'belongsTo' => array('Artist')
));
// bind Artist & Person using explicit conditions
$this->Product->bindModel(array(
'hasOne' => array(
'Artist' => array(
'foreignKey' => false,
'conditions' => array('Artist.id = Product.artist_id')
),
'Person' => array(
'foreignKey' => false,
'conditions' => array('Person.id = Artist.person_id')
),
)
));
// return the person
$person = $this->Product->find('first', array(
'conditions' => array(
'Product.id' => 1 // or any other condition
),
'fields' => array(
'Person.first_name',
'Person.last_name'
)
));
Что здесь происходит?
Во-первых, мы отсоединяем ProductОтношения модели с моделью Artist .
Во-вторых, мы связываем модели Artist и Person , явно определяя отношения и отключаяАвтоматические соединения forigenKey от Cake.
Наконец, мы делаем «первый» поиск по модели Product и запрашиваем только « first_name » & ' last_name из Персона .