可包含的多维数组层次结构



我这样做:

$cdata = $this->Party->find('first',
        array('contain' => array(
            'Person' => array(
                'Employee' => array(
                    'Volunteer'),
                'Title'))));
Debugger::dump($cdata, 10);

我得到这个:

array(
    'Party' => array(
        'id' => '9',
        'save_bit' => true
    ),
    'Person' => array(
        'id' => '5',
        'title_id' => '1',
        'first_name' => 'bob',
        'middle_name' => '',
        'last_name' => 'brown',
        'is_active' => false,
        'date_of_birth' => '1999-07-07',
        'gender' => 'M',
        'party_id' => '9',
        'Title' => array(
            'id' => '1',
            'title' => 'Ms',
            'description' => ''
        ),
        'Employee' => array(
            'id' => '5',
            'person_id' => '5',
            'Volunteer' => array(
                'id' => '5',
                'employee_id' => '5'
            )
        )
    )
)

但是我真的很想得到这个:

array(
    'Party' => array(
        'id' => '9',
        'save_bit' => true,
        'Person' => array(
            'id' => '5',
            'title_id' => '1',
            'first_name' => 'bob',
            'middle_name' => '',
            'last_name' => 'brown',
            'is_active' => false,
            'date_of_birth' => '1999-07-07',
            'gender' => 'M',
            'party_id' => '9',
            'Title' => array(
                'id' => '1',
                'title' => 'Ms',
                'description' => ''
            ),
            'Employee' => array(
                'id' => '5',
                'person_id' => '5',
                'Volunteer' => array(
                    'id' => '5',
                    'employee_id' => '5'
                )
            )
        )
    )
)

这种方式的数组是遵循我的数据库表的自然层次结构,也与我的网站形式保存和编辑,我已经声明如下:

echo $this->Form->input('Party.Person.first_name');
echo $this->Form->input('Party.Person.is_active');

对于Containable是否可以做到这一点,如果可以,如何做到?谢谢!

正如我在评论中已经提到的,你不能改变如何格式化数据的方式,它将根据你的关联被格式化为CakePHP约定。

更改格式必须在查找操作之后手动完成,但实际上没有必要这样做,而是坚持有关关联和表单帮助器使用的约定,这样CakePHP可以根据需要自动将所有内容粘合在一起。

假设关联是Party hasMany Person,您应该简单地在表单中使用Person.0.first_name,这样助手就可以正确地填充字段,当传递到Model::saveAll()Model::saveAssociated()时,CakePHP可以根据模型上定义的关联确定需要如何保存。

参见Saving Related Model Data (hasOne, hasMany, belongsTo)获取更多信息。

最新更新