2009-12-09 61 views
3

嗨CakePHP的专家!我找你dyanamic OPTGROUP一个dyanmic下拉列表上的帮助。假设我有两个表:下拉列表与dyanmic OPTGROUP有

countries: id, country_name, 

counties: id, county_name, country_id 

现在,我想,以显示与填充从县人口FRM国家表和列表项optgroups的下拉列表。

country_name1 

     county_name1 

     county_name2 

country_name2 

     county_name3 

     county_name4 

country_name3 

     county_name4 

     county_name5 

....... 

在此先感谢,并感谢任何帮助!

回答

19

蛋糕中的F ormHelper ::输入方法将呈现与optgroups一个选择标记,如果选项是正确的,例如

echo $form->input('county'); 

只要是在视图中提供一个变量名为$各县其中包含下列格式的数据:

$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; 
} 
+0

哇..这是可爱的..谢谢了很多仍然 – leo 2009-12-16 12:10:38

+0

非常很有帮助,谢谢。 – 2013-05-19 11:55:21

1

绑定tableB的在表A模型表A ,做

$hasMany = array("tableB"=>array("className"=>"tableB","foreignKey"=>"aId")); 

然后用

find("all") 

可能需要

$this->tableA->recursive->2 

右侧找到之前

+0

没有纨绔子弟的建议,它不工作 – leo 2009-12-09 20:41:23

0

您也可以使用哈希::结合起来,而不是一个嵌套循环功能通过@neilcrookes

 

$counties = Hash::combine($countries,'{n}.County.id','{n}.County.name','{n}.Country.name');