我有一个Cakephp 1.3应用程序正在运行,并且具有以下设置:

该模型的排放表:

class Emission extends AppModel
{
    var $name = 'Emission';
    var $displayField = 'name';
}


此模型的表称为mission_messages:

class EmissionMessage extends AppModel
{
    var $name = 'EmissionMessage';

    var $belongsTo = array
    (
        'Emission' => array
        (
            'className' => 'Emission',
            'foreignKey' => 'emission_id'
        )
    );

}


mission_message表的外键字段名为mission_id。

当我创建一个新的mission实例时,我需要同时创建一个新的mission_message实例,即:在我要在数据库中插入一个新的mission的形式中,我将需要与之关联的mission_message的输入。同样的排放。编辑表单也一样。

我想我做错了方法,因为一旦创建了发射,我就可以“手动”插入具有相关ID的mission_message表中,但我猜这不是正确的方法,并且cakePHP应该可以自动执行此操作。我不知道如何在表单上命名我的输入,以便正确保存信息或我的模型错误,这就是为什么它不起作用的原因。

编辑:

为了使事情更清楚:Emission和EmissionMessage是一对一的关系,在Emissions中添加hasOne使它工作了一半,我现在可以使用以下方式保存字段:

 echo $this->Form->input('EmissionMessage.field');


但是,当我尝试更新同一条记录的edit()操作时,它只是将数据保存在新行中(使用外键,但是保存在新行中,而不是更新前一行)

要保存我使用的字段:

$this->Emission->saveAll($this->data)


在edit()和add()操作中(插入和更新)

编辑2:看来,带有EmissionMessage表ID的隐藏输入可以解决问题(我以前没有正确地做过,一旦我解决了这个问题,它就可以正常工作),如以下答案所示:saveAll() inserts new row instead of updating

我觉得很奇怪,我需要添加该隐藏的输入,但至少可以解决问题。

最佳答案

就像这样-

class Emission extends AppModel
{
    var $name = 'Emission';
    var $displayField = 'name';
var $hasOne = array('EmissionMessage' => array
        (
            'className' => 'EmissionMessage',
            'foreignKey' => 'emission_id'
        ));
}

然后制作表格。
就像-
$this->Form->create('Emission');
$this->Form->input('Emission.id');
$this->Form->input('Emission.fieldsname');
$this->Form->input('EmissionMessage.id');
$this->Form->input('EmissionMessage.fieldsname2');
$this->Form->input('EmissionMessage.fieldsname3');
$this->Form->submit();

然后在行动电话中

请通过下面的链接获取更多详细信息。 http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Models.html

关于php - CakePHP-同时更新多个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21043445/

10-09 07:35
查看更多