我正在尝试创建一个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)
来电!
真正感谢任何和所有帮助。
答案 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'));
编辑:错过括号和句点而不是下划线。现在应该工作