目前我正在使用(大致)以下代码从数据库中检索一些数据:
$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?但是我觉得有点不知道如何在模型中做这个的挑战,因为它不是在ImageRef表中查找photo_id的简单情况,而是介于两者之间的中间Uid表。
任何人都可以给我任何关于如何在模型中正确陈述此类型的多表关系的指示吗?
编辑:
我觉得我没有很好地解释自己。基本上Artist模型与Uid有一个$ hasOne关系:
var $hasOne = array(
'Uid' => array(
'conditions' => "Uid.type = 'Artist'",
'foreignKey' => 'foreign_id',
'dependent' => true),
);
我有点希望它与ImageRef 通过 Uid建立$ hasOne关系,例如:
'ImageRef' => array(
'conditions' => "Uid.type = 'Photo'",
'foreign_key' => "Uid.id"
)
虽然看起来这样的事情并不容易。但是,如果有人知道更简单的方式来协商这些一度取消的关系,我会很高兴!