【问题标题】:CakePHP 2.3: Conditionally retrieve unique model information based on another model's use of itCakePHP 2.3:根据另一个模型对它的使用,有条件地检索唯一的模型信息
【发布时间】:2013-09-25 21:57:37
【问题描述】:

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

我能写的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) 的电话!

非常感谢任何和所有帮助。

【问题讨论】:

    标签: mysql cakephp cakephp-2.3


    【解决方案1】:

    假设关系AccountbelongsTo 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'));
    

    edit:缺少括号和句点而不是下划线。现在应该可以工作了

    【讨论】:

    • 是的!两个小的编辑,以防其他人希望为自己的解决方案建模;应该读为 '{n}.Account.province_id' 并且你对Account->find() 电话感到害羞。另外,我不止一次看到过这种语法:{n}.....——这是 Cake 约定,还是我不熟悉的 PHP 方面?从哪里得知?
    • 我编辑了。对不起,错别字。哈希语法见CakePHP manual
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多