В настоящее время я получаю некоторые данные из базы данных с (примерно) следующим кодом:
$artists = $this->Artist->findAll($conditions);
foreach($artists as $artist) {
$photo_id = $artist['Artist']['photo_id'];
$uid = $this->Uid->field('id', array(
'Uid.type'=>'Photo',
'Uid.foreign_id'=>$photo_id
));
$photo_url = $this->ImageRef->field('url', array(
'ImageRef.type' => 'Photo',
'ImageRef.foreign_id' => $uid
), 'id ASC');
$artist['Artist']['photo_url'] = $photo_url;
$this->returnData[] = $artist;
}
Очевидно, что это довольно долгий путь к поиску photo_url каждого художника. В идеале я хотел бы указать это в модели, возможно, как отношение HasOne - у каждого художника есть один photo_url? Но я чувствую себя немного ошеломленным проблемой того, как это сделать в модели, когда это не простой случай поиска photo_id в таблице ImageRef, а промежуточная таблица Uid между ними.
Может ли кто-нибудь дать мне какие-нибудь советы о том, как правильно сформулировать в модели отношения с несколькими таблицами-охватами этого типа?
РЕДАКТИРОВАТЬ:
Мне кажется, я не очень хорошо себя объяснил. В основном модель Artist имеет отношение $ hasOne с Uid:
var $hasOne = array(
'Uid' => array(
'conditions' => "Uid.type = 'Artist'",
'foreignKey' => 'foreign_id',
'dependent' => true),
);
Затем я хочу, чтобы у него были отношения $ hasOne с ImageRef через Uid, что-то вроде:
'ImageRef' => array(
'conditions' => "Uid.type = 'Photo'",
'foreign_key' => "Uid.id"
)
хотя кажется, что такое было бы нелегко. Но если кто-нибудь знает более простой способ договориться об этих отношениях на один градус, я был бы рад!