Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP-同时更新多个表_Php_Mysql_Sql_Cakephp_Cakephp 1.3 - Fatal编程技术网

CakePHP-同时更新多个表

CakePHP-同时更新多个表,php,mysql,sql,cakephp,cakephp-1.3,Php,Mysql,Sql,Cakephp,Cakephp 1.3,我有一个Cakephp 1.3应用程序正在运行,我有以下设置: 此模型的排放量表: class Emission extends AppModel { var $name = 'Emission'; var $displayField = 'name'; } class EmissionMessage extends AppModel { var $name = 'EmissionMessage'; var $belongsTo = array (

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

此模型的排放量表:

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

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

}
以及一个名为emission_messages的表,该模型:

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

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

}
emission_消息表有一个外键名为emission_id的字段

当我创建一个新的emission实例时,我需要同时创建一个emission_消息的新实例,也就是说:在我将在数据库中插入一个新emission的形式中,我需要将emission_消息的输入与该相同的emission关联。编辑表单也是如此

我认为我这样做是错误的,因为一旦创建了排放,我就可以“手动”将相关id插入到排放消息表中,但我猜这不是正确的方法,cakePHP应该自动这样做。我不知道如何在表单上命名我的输入,以便正确保存信息,或者如果我的模型错误,这就是它无法工作的原因

编辑:

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

 echo $this->Form->input('EmissionMessage.field'); 
但是,当我尝试使用edit()操作更新同一条记录时,它只是将数据保存在新行中(使用外键,但保存在新行中,而不是更新上一行)

要保存我使用的字段,请执行以下操作:

$this->Emission->saveAll($this->data)
在编辑()和添加()操作中(插入和更新)

编辑2:似乎EmissionMessage表id的隐藏输入起了作用(我以前做得不正确,一旦我解决了这个问题,它工作得很好),正如这个答案所示:


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

只需按如下方式操作即可--

然后做表格

就像--

然后在行动电话中-

$this->Emission->saveAll($this->data); for saving all the data.

点击下面的链接了解更多细节

如果Emission只有一条Emission\u消息,您需要使用
hasOne
关联类型,将您的模型更改为:

class Emission extends AppModel {
    var $name = 'Emission';
    var $displayField = 'name';
    public $hasOne = array(
        'EmissionMessage' => array(
            'className' => 'Emission_message',
            'dependent' => true
        )
    );
}


在您的
Emission中声明
$hasMany
,以便与
EmissionMessage建立
hasMany
关系

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

    public $hasMany = array('EmissionMessage');
}
Emission
还将保存
EmissionMessage
模型的记录,一旦您将数据数组设置为这样。i、 e

$data = array(
    'Emission' => array(
        'field1' => 'value1',
        'field2' => 'value2'
    ),
    'EmissionMessage' => array(
        '0' => array(
            'field1' => 'value1',
        ),
        '1' => array(
            'field1' => 'value1',
        ),
        '2' => array(
            'field1' => 'value1',
        )
    )
);
您可以使用
表单帮助器创建上述数组。

$this->Form->create('Emission');
$this->Form->input('Emission.field1');
$this->Form->input('Emission.field2');
$this->Form->input('EmissionMessage.0.field1');
$this->Form->input('EmissionMessage.1.field1');
$this->Form->input('EmissionMessage.2.field1');
$this->Form->submit();

当您提交表单时,您可以在
$this->request->data

中从该链接获得类似上述数组的数据,我发现我应该使用echo$this->form->input('EmissionMessage.subject1');但这对我不起作用,我也没有收到错误消息,只是一个空输入,但这对我的模型不正确。每个排放只有一条排放信息。我现在编辑了答案,您可以根据需要申请。希望它能工作这是现在工作添加一个新的项目,但当我编辑相同的项目,它保存为一个新的一次,我不知道为什么?我在edit()和add()操作中都使用了saveAll。我尝试将id添加为隐藏输入,如下所示:但我得到的只是一个空的隐藏选择@Eline Mareley:对于编辑,只需添加这两行即可(因为存在一对一的关系,所以您必须添加这两行)--$this->Form->create('Emission.id')$这个->表单->输入('EmissionMessage.id');在您的ctp文件中,希望它能解决您的问题。如果仍然发生,请告诉我。这不是一个hasMany关系,而是一对一关系,但您在问题中没有提到关联类型
$this->Form->create('Emission');
$this->Form->input('Emission.field1');
$this->Form->input('Emission.field2');
$this->Form->input('EmissionMessage.0.field1');
$this->Form->input('EmissionMessage.1.field1');
$this->Form->input('EmissionMessage.2.field1');
$this->Form->submit();