countries: id, country_name,
counties: id, county_name, country_id
现在,我想显示一个下拉列表,其中包含填充了分组国家/地区表格和列表项目的县组。
country_name1
county_name1
county_name2
country_name2
county_name3
county_name4
country_name3
county_name4
county_name5
.......
提前致谢并感谢任何帮助!
答案 0 :(得分:19)
如果选项正确,Cake的FormHelper :: input方法将呈现带有optgroups的select标签,例如。
echo $form->input('county');
如果视图中有一个名为$ counties的变量,它包含以下格式的数据:
$counties = array(
'Country Name 1' => array(
'county_1_id' => 'County 1 Name',
'county_2_id' => 'County 2 Name',
'county_3_id' => 'County 3 Name',
),
'Country Name 2' => array(
'county_4_id' => 'County 4 Name',
'county_5_id' => 'County 5 Name',
'county_6_id' => 'County 6 Name',
),
);
因此,在您的控制器中,执行以下操作:
$this->set('counties', ClassRegistry::init('Country')->getCountiesByCountry());
在您的国家/地区模型中,执行以下操作:
function getCountiesByCountry() {
$countries = $this->find('all', array('contain' => array('County')));
$return = array();
foreach ($countries as $country) {
foreach ($country['County'] as $county) {
$return[$country['Country']['name']][$county['id']] = $county['name'];
}
}
return $return;
}
答案 1 :(得分:1)
将tableB绑定到tableA 在tableA模型中,执行
$hasMany = array("tableB"=>array("className"=>"tableB","foreignKey"=>"aId"));
然后使用
find("all")
可能需要
$this->tableA->recursive->2
在找到之前
答案 2 :(得分:0)
你也可以使用Hash :: combine函数代替@neilcrookes建议的嵌套循环
$counties = Hash::combine($countries,'{n}.County.id','{n}.County.name','{n}.Country.name');