我有一个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/