我想为 Optgroup 下拉列表设置数据库布局

I want to Database Layout for Optgroup Dropdown

我想以 optgroup 下拉列表的形式在页面上显示一些数据,所以我只想像

这样的数据库布局
$arr = array(
    'optgroup' => array(
        '1','2','3'),
    'optgroup2' => array(
        '1','2','3')
);   

db table 结构应该是 -

国家

id | name

id | country_id | name

关系应该是 -

Country HasMany State

在通过 -

获取所有国家之后
$countries = ClassRegistry::init('Country')->find(
   'all', 
   array(
    'conditions' => your conditions,
    'fields'     => array(fields),
    'contain'    => 'State',
   )
)

根据需要通过遍历数组生成 optGroup 数组。

根据 BOSE 中士描述的数据库。

国家

id | name

id | country_id | name

SQL

CREATE TABLE IF NOT EXISTS `countries` (
`id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `states` (
`id` int(11) NOT NULL,
  `country_id` int(11) NOT NULL,
  `name` varchar(60) CHARACTER SET utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `countries`
 ADD PRIMARY KEY (`id`);
ALTER TABLE `states`
 ADD PRIMARY KEY (`id`);
ALTER TABLE `countries`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
ALTER TABLE `states`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

还有两个型号:

<?php // File: Model/Country.php
App::uses('AppModel', 'Model');
class Country extends AppModel {
  public $hasMany = array('State');
}


<?php // File: Model/State.php
App::uses('AppModel', 'Model');
class State extends AppModel {
    public $belongsTo  = 'Country';
}

CountriesController.php:

public function test(){ 
    $countries = $this->Country->find('all');
    $countries = Set::combine($countries, '{n}.Country.name', '{n}.State.{n}.name');
    $this->set('countries', $countries);
}

$countries 现在持有问题中描述的数组并发送到视图

array(
    'Norway' => array(
        (int) 0 => 'Oslo',
        (int) 1 => 'Bergen'
    ),
    'Sweeden' => array(
        (int) 0 => 'Stockholm',
        (int) 1 => 'Göteborg',
        (int) 2 => 'Malmö'
    )
)

在视图中(View/Countries/test.ctp 在我的例子中)

<?php
echo $this->Form->select('field', $countries);
?>

将创建以下 html 代码:(这是一个下拉列表)

<select name="data[field]" id="field">
  <option value=""></option>
    <optgroup label="Norway">
    <option value="0">Oslo</option>
    <option value="1">Bergen</option>
  </optgroup>
  <optgroup label="Sweeden">
    <option value="0">Stockholm</option>
    <option value="1">Göteborg</option>
    <option value="2">Malmö</option>
  </optgroup>
</select>