使用saveAll()在CakePHP中保存多个模型

时间:2010-10-24 23:52:36

标签: cakephp save models

我正在尝试使用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-&gt; 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&amp; belongs模型中的所有规则都是冲突的。之后我犯了一个错误(一个令人尴尬的错误),它阻止了与相关人员模型相关的保存:

在邀请模型中,我讨厌$ hasMany = array('People');什么时候它应该是$ hasMany = array('Person')。

我还必须更改数据库的配置以使用InnoDB作为默认值,因此这肯定是必要的修复。

1 个答案:

答案 0 :(得分:1)

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

这些与同一模型的关系应该有不同的别名,否则蛋糕会混淆,因为我试图解开它。见http://book.cakephp.org/view/1046/Multiple-relations-to-the-same-model