Cakephp 创建具有嵌套关联的窗体

Cakephp 创建具有嵌套关联的窗体,cakephp,Cakephp,假设我有一个模型a、B和C,其中: class A extends AppModel { public $hasOne = array( 'B1' => array( 'className' => 'B', ... ), 'B2' => array( 'className' => 'B', ... )

假设我有一个模型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_字段和B2.C.some_字段,但没有成功。

取决于您使用的蛋糕版本 从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();
function edit($id) {
    ...
    $success = $this->A->saveAll($data, array('deep' => true));
}