如果我这样做:
$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执行此操作,如果是这样的话?谢谢!
答案 0 :(得分:0)
正如我在评论中已经提到的,你无法改变数据格式的可格式,它将根据你的关联格式化为CakePHP约定。
更改格式必须在查找操作后手动完成,但实际上不需要这样做,而是坚持关于关联和形式帮助器使用的约定,这样CakePHP可以自动粘贴根据需要,一切都在一起。
假设关联是Party hasMany Person
,您应该只在表单中使用Person.0.first_name
,这样帮助者可以正确填充字段,并在传递给Model::saveAll()
或{{1}时CakePHP可以根据模型上定义的关联来确定需要保存的内容。
有关详细信息,请参阅Saving Related Model Data (hasOne, hasMany, belongsTo)。