好的,这有点复杂(反正对我来说)。我想从两个记录中提取图像以放入一个结果的视图中。
我有Unit,属于Complex。每个单元和每个复合体都可以在图像表中有记录。
我想让我的特定单位的结果显示图像表中单位的所有图像,以及其复合体中的一些图像(也存储在图像表中)。这是我的模特:
class Image extends AppModel {
public $name='Image';
var $belongsTo=array(
'Unit'=>array (
'className'=>'Unit',
'foreignKey'=>'unit_id'
),
'Complex'=>array (
'className'=>'Complex',
'foreignKey'=>'complex_id'
),
'Restaurant'=>array (
'className'=>'Restaurant',
'foreignKey'=>'restaurant_id'
)
);
}
class Complex extends AppModel {
public $name='Complex';
public $hasMany=array('Unit');
public $hasOne=array('Image');
public $belongsTo=array(
'Location'=>array(
'className'=>'Location',
'foreignKey'=>'location_id'
)
);
}
class Unit extends AppModel {
public $name='Unit';
public $belongsTo=array(
'User'=>array(
'className'=>'User',
'foreignKey'=>'user'
),
'Complex'=>array(
'className'=>'Complex',
'foreignKey'=>'complex_id'
),
'Location'=>array (
'className'=>'Location',
'foreignKey'=>'location_id'
),
);
public $hasOne=array('Image');
}
这是我的控制器逻辑:
$this->paginate['Unit']=array(
'limit'=>9,
'order' => 'RAND()',
'contain'=>array(
'User'=>array('email'),
'Complex'=>array('location_id'),
'Location',
'Image'
),
'conditions'=>array(
'Unit.active'=>1)
);
$data = $this->paginate('Unit');
$this->set('allaccommodations', $data);
您可以看到调试here:的结果。它为单元提取我的图像数据,但是我需要它来拉出一个包含unit_id和complex_id的Image数组。这可能吗?
答案 0 :(得分:2)
在这些情况下,您必须为Image模型使用不同的别名,因为关联数组不能容纳具有相同键的两个值。
class Complex extends AppModel {
//...
public $hasOne=array(
'ComplexImage' => array(
'className'=>'Image',
'foreignKey'=>'complex_id'
)
);
}
class Unit extends AppModel {
//...
public $hasOne=array(
'UnitImage' => array(
'className'=>'Image',
'foreignKey'=>'unit_id'
)
);
}
然后您的查询数组将更改为:
$this->paginate['Unit'] = array(
'limit' => 9,
'order' => 'RAND()',
'contain' => array(
'User' => array('email'),
'Complex' => array(
'fields' => array('id', 'location_id'),
'ComplexImage'
),
'Location',
'UnitImage'
),
'conditions' => array(
'Unit.active' => 1)
);
这也会影响您访问模型的方式。
$this->Unit->UnitImage->id;