我这样做:
$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)获取更多信息。