我有一个Cakephp 1.3应用程序,我有以下设置:
使用此模型称为排放的表格:
class Emission extends AppModel
{
var $name = 'Emission';
var $displayField = 'name';
}
这个模型名为emission_messages的表格:
class EmissionMessage extends AppModel
{
var $name = 'EmissionMessage';
var $belongsTo = array
(
'Emission' => array
(
'className' => 'Emission',
'foreignKey' => 'emission_id'
)
);
}
emission_message表有一个名为emit_id的字段用于外键。
当我创建一个新的发射实例时,我需要同时创建一个新的emission_message实例,即:在我将在数据库中插入新发射的形式中,我需要输入emission_message与相同的排放有关。编辑表单也是如此。
我认为我这样做是错误的,因为一旦创建了发射,我就可以“手动”插入具有相关id的emission_message表但是我猜这不是正确的方式而且cakePHP应该做这是自动的。我不知道如何在表单上命名我的输入,以便正确保存信息或者我的模型是错误的,这就是为什么它不起作用。
编辑:
为了使事情变得更清楚:Emission和EmissionMessage是一对一的关系,将hasOne添加到Emissions让它工作一半,我现在可以使用以下方法保存字段:
echo $this->Form->input('EmissionMessage.field');
但是当我尝试更新同一条记录时,edit()动作只是将数据保存在一个新行中(使用外键,但是在新行中,而不是更新前一行)
要保存我使用的字段:
$this->Emission->saveAll($this->data)
edit()和add()动作(插入和更新)
编辑2:似乎隐藏的输入与EmissionMessage表的id做了伎俩(之前我没有正确地做,一旦我修复它,它工作正常),因为这个答案表明:saveAll() inserts new row instead of updating < / p>
我觉得很奇怪,我需要添加隐藏的输入,但至少可以解决问题。
答案 0 :(得分:1)
只是按照 -
的方式做事情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();
然后在动作调用中 -
$this->Emission->saveAll($this->data); for saving all the data.
通过以下链接了解更多详情。 http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Models.html
答案 1 :(得分:0)
如果Emission只有一个Emission_message,则需要使用hasOne
关联类型,将模型更改为:
class Emission extends AppModel {
var $name = 'Emission';
var $displayField = 'name';
public $hasOne = array(
'EmissionMessage' => array(
'className' => 'Emission_message',
'dependent' => true
)
);
}
和
class EmissionMessage extends AppModel {
public $belongsTo = array(
'Emission' => array(
'className' => 'Emission',
'foreignKey' => 'emission_id'
)
);
}
答案 2 :(得分:-1)
在$hasMany
中声明Emission
与hasMany
建立EmissionMessage
class Emission extends AppModel {
var $name = 'Emission';
var $displayField = 'name';
public $hasMany = array('EmissionMessage');
}
一旦你把这样的数据数组放在一起, Emission
也会保存EmissionMessage
模型的记录。即
$data = array(
'Emission' => array(
'field1' => 'value1',
'field2' => 'value2'
),
'EmissionMessage' => array(
'0' => array(
'field1' => 'value1',
),
'1' => array(
'field1' => 'value1',
),
'2' => array(
'field1' => 'value1',
)
)
);
您可以使用form helper.
$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
中获取上述数组中的数据。