0

我正在尝试创建一个 AJAX 表单,其中选择字段的内容根据前面选择字段的选择进行填充(您会在“国家”填充“州/省”时看到很多)。province就我而言,我希望用户只有在其中存在活动时才能选择他们accounts

我可以写的Javascript没有问题。获取数据是我的工作……与其说是做太多工作,不如说是卡住了。CakePHP 喜欢在表单数组中构建带有选项的选择字段

$options = array(select_option_value => display_text)

我的策略虽然是功能性的,但必须比蛋糕预期的更复杂(这是控制器方法的一部分)。

$provinceData = $this->Account->find('all',array('recursive' => 0,
                                                      'joins' => array(
                                                                      array(
                                                                        'table' => 'provinces',
                                                                        'type' => 'LEFT',
                                                                        'conditions' => array('Account.province_id = provinces.id')
                                                                      )),
                                                       'fields'=>array('provinces.id', 'provinces.name', 'provinces.abbrev'),
                                                       'conditions' => array('registration > 2')));
$provinces = array();
foreach($provinceData as $pd) {
    /*note: lowercase, plural below b/c can't get 'alias' => 'Province' 
      to work in joins array above : ( */
    $id = $pd['provinces']['id'];
    $name = $pd['provinces']['name'];
    $provinces[$id] = $name;
}
$this->set(compact('provinces'));

谁能指出一个更合适的方法来做到这一点?我认为必须有一个 MySQL 查询可以做到这一点,但我一开始就不擅长编写复杂的 MySQL 查询,更不用说通过 Cake 的约定了(而且,对于你的 MySQL 专家,我很乐意这样做这来自一个Model->query(//MySQL code)电话!

任何和所有的帮助真的很感激。

4

1 回答 1

1

假设关系AccountbelongsToProvince你可以试试这个代码:

$accounts = $this->Account->find(
    'all', 
    array(
      'fields' => array('Account.province_id', 'Province.name'),
      'conditions' => array('Account.registration > 2'),
      'group' => 'Account.province_id'
   )
);

$provinces = Hash::combine($accounts, '{n}.Account.province_id', '{n}.Province.name');

$this->set(compact('provinces'));

编辑:错过括号和句点而不是下划线。现在应该工作

于 2013-09-26T07:03:19.043 回答