0

我有 3 个模型:A、B、C。

A 有很多 B

A hasMany C

B 有很多 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])电话保存它们?

4

1 回答 1

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']);
}
于 2015-11-26T11:30:43.467 回答