У меня есть «Сложная» модель, которая имеет много единиц.Мои ассоциации моделей правильные, все работает, просто у меня возникают проблемы с корректной работой другой модели / ассоциации, и это заставляет меня задуматься, нужно ли мне устанавливать эту модель по-другому.
Видите, не ВСЕПодразделение будет иметь комплекс, связанный с ним.Некоторые подразделения - это дома, некоторые - гостиничные номера, а некоторые - просто компании по аренде.
Поскольку у Комплексов есть много подразделений, я испытываю желание оставить это в покое, но мне интересно, не стоит ли переопределить отношения какКомплексная принадлежность к блоку.Я пытаюсь не повторяться в своей базе данных с добавлением в несколько экземпляров одного и того же комплекса.
Вот моя текущая модель объекта:
class Unit extends AppModel {
public $name='Unit';
public $belongsTo=array(
'User'=>array(
'className'=>'User',
'foreignKey'=>'user'
),
'Complex'=>array(
'className'=>'Complex',
'foreignKey'=>'complex_id'
)
);
public $hasOne=array(
'Location'=>array(
'className'=>'Location',
'foreignKey'=>'location_id'
)
);
}
, а вот моя текущая комплексная модель:
class Complex extends AppModel {
public $name='Complex';
public $hasMany=array('Unit');
public $hasOne=array(
'Location'=>array(
'className'=>'Location',
'foreignKey'=>'location_id'
)
);
}
Кстати, 'Location' - это модель, с которой у меня возникают проблемы (часть Location моего массива в настоящее время возвращается пустой, когда я вызываю свою единицу / сложную информацию в моем представлении, поэтому мне нужнопоймите правильно мою ассоциацию).
Если это кондоминиум с комплексом, я хочу, чтобы он возвращал Местоположение комплекса.Если это дом, гостиница или компания по прокату, я хочу, чтобы он вернул местонахождение объекта.Мне нужно сделать несколько таких ассоциаций (изображения, местоположение и т. Д.), Поэтому я хочу сразу все выяснить.
Верны ли мои нынешние отношения между модулем и комплексом или мне нужно все определитьиначе?
ОБНОВЛЕНИЕ Вот логика моего контроллера:
$this->paginate['Unit']=array(
'limit'=>9,
'order' => 'RAND()',
'contain'=>array(
'User'=>array(
'email'),
'Complex'=>array(
'id','complex_name', 'realname', 'photo1','photo2','photo3','photo4','photo5'),
'Location'=>array(
'complex_id','address', 'city','state','zip','area_code','exchange','sln','lat','lon','website')
),
'conditions'=>array(
'Unit.type'=>array('condo', 'rentalco'),
'Unit.active'=>1)
);
$data = $this->paginate('Unit');
$this->set('allcondos', $data);
}
И вы можете увидеть результат, который я получаю здесь:
В настоящее время я не заинтересован в отображении представления всех Комплексов, но логика страницы индекса имеет ContainableBehavior, ограниченный просто Complex (как изначально я собирался иметь представления для различных Комплексов):
public function index() {
$this->Complex->Behaviors->attach('Containable');
$this->Complex->contain();
$c=$this->Complex->find('all');
$this->set('complexes', $c);
}
ОБНОВЛЕНИЕ У меня это работает сейчас, для всех, кто сталкивается с этой проблемой.Мне пришлось изменить местоположение в корне и сделать комплекс принадлежать к местоположению.Вот мои обновленные модели:
class Location extends AppModel {
public $name='Location';
public $hasMany=array('Complex', 'Unit');
var $belongsTo=array(
'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');
}
Большое спасибо Уайли за помощь, это было офигительно!