我有3个型号:A,B,C。
a hasMany B
a hasMany C
B hasMany C
A
/ \
/ \
/ \
| |
^ ^
B ----< C
我创建了视图和控制器添加方法。
表格数据:
$data = array(
'A' => array(
'id' => '',
'name' => 'alpha',
'B' => array(
'id' => '',
'name' => 'beta',
'C' => array(
'id' => '',
'name' => 'gamma'
)
)
)
)
我使用$this->A->saveAssociated($data, ['deep' => true])
电话保存表单数据。
如果我查询新创建的A模型,我会得到以下数据:
array(
'A' => array(
'id' => (int) 111,
'name' => 'alpha',
'B' => array(
'id' => (int) 9,
'a_id' => (int) 111,
'name' => 'beta',
'C' => array(
'id' => (int) 78,
'b_id' => (int) 9,
'a_id' => (int) 0,
'name' => 'gamma'
)
)
)
)
我的问题是C模型a_id
字段与新创建的A模型没有很好的价值/不相关。
是否可以通过一次saveAssociated($data, ['deep' => true])
来保存它们?
答案 0 :(得分:0)
我认为这是一个奇怪的情况,而CakePHP在没有一些帮助的情况下无法处理。当CakePHP保存外键时,它与其直接关系有关。因此,在Cake保存模型C
的情况下,它只知道设置C.b_id
外键。您的C
数据必须是A
的子数组才能设置C.a_id
,但它不会设置C.b_id
。
可能有更好的方法来解决这个问题,但一种解决方案是在保存后添加C.a_id
外键: -
if ($this->A->saveAssociated($data, ['deep' => true]) !== false) {
// Set the a_id foreign key for the newly created C record.
$cData = [
'id' => $this->A->B->C->id,
'a_id' => $this->A->id
];
$this->A->C->save($cData, true, ['id', 'a_id']);
}