CakePHP包含多维数组层次结构

时间:2014-07-07 06:19:10

标签: cakephp multidimensional-array cakephp-2.4

如果我这样做:

$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执行此操作,如果是这样的话?谢谢!

1 个答案:

答案 0 :(得分:0)

正如我在评论中已经提到的,你无法改变数据格式的可格式,它将根据你的关联格式化为CakePHP约定。

更改格式必须在查找操作后手动完成,但实际上不需要这样做,而是坚持关于关联和形式帮助器使用的约定,这样CakePHP可以自动粘贴根据需要,一切都在一起。

假设关联是Party hasMany Person,您应该只在表单中使用Person.0.first_name,这样帮助者可以正确填充字段,并在传递给Model::saveAll()或{{1}时CakePHP可以根据模型上定义的关联来确定需要保存的内容。

有关详细信息,请参阅Saving Related Model Data (hasOne, hasMany, belongsTo)