CakePHP 2.3:根据另一个模型对它的使用,有条件地检索唯一的模型信息

时间:2013-09-25 21:57:37

标签: mysql cakephp cakephp-2.3

我正在尝试创建一个AJAX表单,其中select字段的内容根据前面的select字段的选择填充(你可以通过'country'填充'state / province'看到很多)。在我的情况下,我希望用户只有在其中存在有效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)来电!

真正感谢任何和所有帮助。

1 个答案:

答案 0 :(得分:1)

假设关系Account属于Province,您可以尝试以下代码:

$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'));

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