CakePHP вытащить более одной записи из одной таблицы для каждого результата - PullRequest
0 голосов
/ 31 января 2012

Хорошо, это немного сложно (для меня в любом случае).Я хотел бы вытащить изображения из двух записей, чтобы увидеть их в ОДНОМ результате.

У меня есть юнит, который принадлежит комплексу.Каждый юнит и каждый комплекс могут иметь запись в таблице изображений.

Я бы хотел, чтобы мой результат для конкретного юнита показывал все изображения юнита в таблице изображений, а также несколько изображений из его комплекса (также хранится в таблице изображений).Вот мои модели:

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);

Вы можете увидеть результаты отладки здесь: .Он извлекает данные моего изображения для модуля, но мне нужно получить массив изображений с unit_id и complex_id.Это возможно?

1 Ответ

2 голосов
/ 31 января 2012

В этих случаях вы должны использовать разные псевдонимы для модели 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;

...