Я использую CakePHP 1.3. У меня действительно странная проблема при сохранении моих отношений с HABTM.
Чтение здесь о том, что cakephp не сохраняет модели автоматически более чем на 2 уровня, я установил отношения HABTM с hasMany и serveTo.
У меня есть заявление-> Ребенок-> Членство-> Клубные отношения. Я изменил название модели на примеры из кулинарной книги cakephp, потому что настоящие названия моделей в моем приложении не на английском языке.
class Child extends AppModel {
var $hasMany = array(
'Membership' => array(
'foreignKey' => 'child_id'
),
}
class Membership extends AppModel {
var $belongsTo = array(
'Child' => array(
'foreignKey' => 'child_id'
),
'Club' => array(
'foreignKey' => 'club_id')
);
}
class Club extends AppModel {
var $hasMany = array(
'Membership' => array(
'foreignKey' => 'club_id'
)
);
}
Вот метод в дочернем контроллере, который правильно сохраняет мои дочерние-> членские-> клубные отношения
function saveRelated() {
$childId= $this->Child->getLastInsertId(); // get the last inserted child
if(isset($this->data['Club'])) {
foreach ($this->data['Club'] as $key => $value) {
if ($this->checkIfEmpty($value)) { // if there was no club submitted in form, then unset array
unset($this->data['Club'][$key]);
unset($this->data['Membership'][$key]);
}
else {
$this->data['Membership'][$key]['child_id'] = $childId; // get the child_id from membership join table
$this->Child->Membership->Club->saveAll($this->data['Club'][$key]); // save the club
// from saved club, get club_id
$this->data['Membership'][$key]['club_id'] = $this->Child->Membership->Club->getLastInsertId();
}
}
$this->Child->Membership->saveAll($this->data['Membership']); // save Membership join-table with right ID-s
}
}
Вот мой debug($this->data)
[Application] => Array
(
[id] => 361
[user_id] => 2
[created] => 2011-09-12 10:45:19
[modified] => 2011-09-12 10:45:19
[child_id] => 319
)
[Child] => Array
(
[child_id] => 319
[kkrid] => KAT-5684746
[name] => a33
[x] => 6400000
[y] => 640000
[coords] => X: 6400000, Y: 640000
[Membership] => Array
(
[0] => Array
(
[child_id] => 319
[modified] => 2011-09-12 10:45:21.14
[membership_id] => 75
[club_id] => 478
)
[1] => Array
(
[child_id] => 319
[modified] => 2011-09-12 10:45:21.14
[membership_id] => 76
[club_id] => 479
)
)
Так что я не могу видеть здесь клубный массив? Где это находится? Когда я хочу снова изменить форму в приложении, данные Клуба отсутствуют.
Данные клуба должны быть здесь $this->data['Child']['Membership']['Club']
, но, как вы можете видеть, в моем массиве данных их нет.
Все правильно сохраняется в базе данных, а мои другие таблицы, имеющие только отношение hasMany, сохраняются правильно, и данные находятся в $this->data
, но почему данные из модели Club ушли из $this->data
? Если так должно быть, и в моем коде нет ошибок, как я могу вручную сохранить данные клуба в $this->data
?