Сохранение нескольких моделей в CakePHP с помощью saveAll () - PullRequest
2 голосов
/ 25 октября 2010

Я пытаюсь создать систему приглашений с CakePHP.У меня есть модель приглашения, которая имеет много людей, и человек имеет одно и принадлежит к приглашению.Я полагаю, что отношения работают, так как мое представление индекса приглашений может правильно получать доступ и отображать связанных с ним людей с помощью модели приглашений.Но вот как выглядят правила отношений:

class Invitation extends AppModel {

    var $name = 'Invitation';
    var $hasMany = array(
        'People' => array(
            'className' => 'Person',
            'foreignKey' => 'invitation_id',
            'dependent'=> true
        )
    );

    ...
}

class Person extends AppModel {

    var $name = 'Person';
    var $hasOne = 'Invitation';
    var $belongsTo = 'Invitation';

    ...
}

ОБНОВЛЕННЫЕ ОТНОШЕНИЯ МОДЕЛИ:

class Invitation extends AppModel {

    var $name = 'Invitation';
    var $hasMany = array('Person');

    ...
}

class Person extends AppModel {

    var $name = 'Person';
    var $belongsTo = array('Invitation');

    ...
}

Однако в моей функции добавления приглашений у меня возникают проблемы с сохранением данных для новых пользователей.Я хочу одновременно добавить одно приглашение и двух человек.

Вот моя функция добавления:

function add() {

        $this->autoRender = false;

        if($this->RequestHandler->isAjax()) {

            $this->layout = 'ajax';

            if(!empty($this->data)) {

                $this->Invitation->create();

             if($this->Invitation->saveAll($this->data)) {

                    //debug($this->data);       

                    $this->Session->setFlash('Saved');
                    $this->redirect('invitations/add_invitations');

                 } else {

                     echo('Didnt save<br />');

                 }

         }
       }

}

Вот вывод моей отладки ($ this-> data):

Array
(
    [Invitation] => Array
        (
            [code] => 001
            [password] => 85c8a3735499bf91d25e5960ab4ed9deeb0b457e
            [type] => 1
            [num_people] => 2
        )

    [Person] => Array
        (
            [0] => Array
                (
                    [fname] => Jane
                    [lname] => Doe

                )

            [1] => Array
                (
                    [fname] => John
                    [lname] => Doe
                )

        )

)

Я не получаю никакойошибки.Данные приглашения сохраняются правильно, а люди - нет.

ОБНОВЛЕНИЕ: я наконец-то начал работать с вышеупомянутыми обновленными модельными отношениями.Очевидно, что правила hasOne & ownTo в модели Person были противоречивыми.После этого я допустил ошибку (смущающую), которая препятствовала сохранению связанной связанной модели Person:

В модели приглашений у меня есть $ hasMany = array ('People');когда это должен был быть $ hasMany = array ('Person').

Мне также пришлось изменить конфигурацию моей базы данных, чтобы использовать InnoDB по умолчанию, так что это, безусловно, было необходимым исправлением.

1 Ответ

1 голос
/ 25 октября 2010
var $hasOne = 'Invitation';
var $belongsTo = 'Invitation';

Эти отношения к одной и той же модели должны иметь разные псевдонимы, в противном случае Cake будет сбит с толку, как я пытался снять его. Смотри http://book.cakephp.org/view/1046/Multiple-relations-to-the-same-model

...