Модель HABTM сохраняет в базу данных, но не появляется в массиве данных - PullRequest
0 голосов
/ 12 сентября 2011

Я использую 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?

...