Указание сложных отношений в модели - PullRequest
0 голосов
/ 22 августа 2011

В настоящее время я получаю некоторые данные из базы данных с (примерно) следующим кодом:

$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"
    )

хотя кажется, что такое было бы нелегко. Но если кто-нибудь знает более простой способ договориться об этих отношениях на один градус, я был бы рад!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...