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

使用saveAll()在CakePHP中保存多个模型,cakephp,save,models,Cakephp,Save,Models,我正在尝试用CakePHP构建一个邀请系统。我有一个邀请模型,它有很多人,每个人都有一个并属于邀请。我相信这些关系正在发挥作用,因为我的邀请索引视图可以通过邀请模型正确访问和显示其关联人员。但关系规则是这样的: class Invitation extends AppModel { var $name = 'Invitation'; var $hasMany = array( 'People' => array( 'classNam

我正在尝试用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 />');

                 }

         }
       }

}
我没有发现任何错误。邀请数据已正确保存,但人员未正确保存

更新:我终于通过上面更新的模型关系得到了这个结果。显然,人模型中的hasOne&belongsTo规则是相互冲突的。在那之后,我犯了一个错误(一个令人尴尬的错误),阻止保存到相关人员模型:

在邀请模型中,我hade$hasMany=array('People');当它应该是$hasMany=array('Person')时

我还必须更改数据库的配置,以使用InnoDB作为默认设置,因此这当然是一个必要的修复

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

这些与同一个模型的关系应该有不同的别名,否则Cake会变得混乱,就像我尝试取消拾取它时所做的那样。请参见

我猜您的人员没有通过验证测试。您是否有
人员
表?请在保存操作后尝试
调试($this->Invitation->invalidFields())
。我当然有一个带有邀请id字段的“人员”表。如上所述的调试输出一个空数组,因此我假设这意味着数据已验证。有趣。在更仔细地研究了关系类型之后,我删除了“Person hasOne Invitation”规则,现在只有“Person belongsTo Invitation”,因为这里只有一个关系。我在邀请模型中没有关系规则,以及“邀请有很多人”的情况下尝试了这个方法,两种情况都得到了相同的结果:邀请数据被保存,而人数据没有保存。另外。。。我尝试分离模型保存,并使用$this->Invitation->Person->saveAll($this->data['Person']),这给了我一个错误:未定义的属性Invitation::$Person。。。或者类似的东西。这似乎表明关系没有正确定义,因为Person在受邀时不可用,将尝试在单个事务中保存所有记录。如果数据库/表不支持事务,则应设置为false。如果为false,我们将返回一个与传递的$data数组类似的数组,但根据每个记录是否成功保存,将值设置为true/false。另外,请注意,您可能没有使用事务性e谢谢你的建议。我遵循了您提供的文档中的步骤,并确保我的数据库默认为InnoDB。然而,同样的问题仍然存在。我不太确定我应该使用什么关系规则。。。“邀请很多人”就足够了吗?我是否也需要“邀请所属人员”?我从您最初的问题中了解到,您有邀请所属人员的关系。我当然会把它放进去,虽然我不确定它在这里是否有用。您能否将这两个表的sql和当前的模型关联追加到原始Q中?
var $hasOne = 'Invitation';
var $belongsTo = 'Invitation';