1

假设我有一个模型 A、B 和 C:

class A extends AppModel {
    public $hasOne = array(
        'B1' => array(
            'className' => 'B',
            ...
        ),
        'B2' => array(
            'className' => 'B',
            ...
        )
    );

    ...
}

class B extends AppModel {
    public $belongsTo = 'A';

    public $hasOne = array(
        'C' => array(
            'className' => 'C',
            ...
        )
    );

    ...
}

class C extends AppModel {
    public $belongsTo = 'B';
}

我想允许用户编辑 A 的实例/行以及 A.B1、A.B2、A.B1.C 和 A.B2.C 的关联实例/行的字段。我知道我能做到

echo $this->Form->create('A');
echo $this->Form->input('A.some_field');

echo $this->Form->input('B1.some_field');
echo $this->Form->input('B2.some_field');
...

echo $this->Form->submit();
echo $this->Form->end();

并使用 saveAll 保存请求,但是如何引用 A.B1.C 和 A.B2.C 中的字段?我尝试了 B1.C.some_field 和 B2.C.some_field 但没有奏效。

4

1 回答 1

1

取决于你使用的是什么版本的 Cake

从 2.1 开始,saveAll 可以无限保存深度,因此答案与您的上一个问题相同/相似:

echo $this->Form->create('A');
echo $this->Form->input('A.id');

echo $this->Form->input('B.0.some_field');
echo $this->Form->input('B.0.C.name');
echo $this->Form->input('B.1.some_field');
echo $this->Form->input('B.0.C.name');
...

echo $this->Form->submit();
echo $this->Form->end();

如果使用deep 选项,这将生成与 saveAll 期望的格式相同的数据:

function edit($id) {
    ...
    $success = $this->A->saveAll($data, array('deep' => true));
}
于 2013-07-19T07:09:53.233 回答