cakephp:如何通过 saveAssociated 保存 hasmany 链
cakephp: How to save hasmany chain by saveAssociated
基本上有3个型号:
Class Model1 {
Public $hasMany = array {
'Model2' => array(
'className' => 'Model2',
'foreignKey' => 'model1id'
)
};
}
Class Model2 {
Public $belongsTo = array {
'Model1' => array(
'className' => 'Model1',
'foreignKey' => 'model1id'
)
};
Public $hasMany = array {
'Model3' => array(
'className' => 'Model3',
'foreignKey' => 'model2id'
)
};
}
Class Model3 {
Public $belongsTo = array {
'Model2' => array(
'className' => 'Model2',
'foreignKey' => 'model2id'
)
};
}
在Model1s视图文件夹下的ctp文件中,我有如下代码:
echo $this->Form->create('Model1');
echo $this->Form->input('[some_model1_field]');
echo $this->Form->input('Model2.0.[some_field]');
echo $this->Form->input('Model3.0.[some_field]');
echo $this->Form->end('Save');
在Controller中,有如下功能:
$this->Model1->saveAssociated($this->request->data, array('deep' => true));
结果是所有字段都插入到数据库中,包括由框架自动保存到模型2中的外键model1id table。唯一的问题是 model2id 无法由框架自动保存到 model3 table 中。如何处理?
Model1
与 Model3
没有关联,但是您输入的字段名称和生成的请求数据代表了这种关联。调试请求数据并将其与文档显示的内容进行比较
结构的问题应该很明显,会是这样的
[
// ...
'Model2' => [
[/* ... */]
]
'Model3' => [
[/* ... */]
]
]
如果您想为 Model2
保存 Model3
s,那么您必须像
这样正确地嵌套数据
echo $this->Form->input('Model2.0.Model3.0.[some_field]');
结果应该是
[
// ...
'Model2' => [
// ...
'Model3' => [
[/* ... */]
]
]
]
基本上有3个型号:
Class Model1 {
Public $hasMany = array {
'Model2' => array(
'className' => 'Model2',
'foreignKey' => 'model1id'
)
};
}
Class Model2 {
Public $belongsTo = array {
'Model1' => array(
'className' => 'Model1',
'foreignKey' => 'model1id'
)
};
Public $hasMany = array {
'Model3' => array(
'className' => 'Model3',
'foreignKey' => 'model2id'
)
};
}
Class Model3 {
Public $belongsTo = array {
'Model2' => array(
'className' => 'Model2',
'foreignKey' => 'model2id'
)
};
}
在Model1s视图文件夹下的ctp文件中,我有如下代码:
echo $this->Form->create('Model1');
echo $this->Form->input('[some_model1_field]');
echo $this->Form->input('Model2.0.[some_field]');
echo $this->Form->input('Model3.0.[some_field]');
echo $this->Form->end('Save');
在Controller中,有如下功能:
$this->Model1->saveAssociated($this->request->data, array('deep' => true));
结果是所有字段都插入到数据库中,包括由框架自动保存到模型2中的外键model1id table。唯一的问题是 model2id 无法由框架自动保存到 model3 table 中。如何处理?
Model1
与 Model3
没有关联,但是您输入的字段名称和生成的请求数据代表了这种关联。调试请求数据并将其与文档显示的内容进行比较
结构的问题应该很明显,会是这样的
[
// ...
'Model2' => [
[/* ... */]
]
'Model3' => [
[/* ... */]
]
]
如果您想为 Model2
保存 Model3
s,那么您必须像
echo $this->Form->input('Model2.0.Model3.0.[some_field]');
结果应该是
[
// ...
'Model2' => [
// ...
'Model3' => [
[/* ... */]
]
]
]