【问题标题】:CakePHP: Select DISTINCT in ContainableBehaviourCakePHP:在 ContainableBehaviour 中选择 DISTINCT
【发布时间】:2011-05-13 10:00:39
【问题描述】:

我试图只选择不同的相关模型条目,但它似乎不起作用。

我有这个:

$active_questions = $this->Question->find('all', array('conditions' => array('test_id' => $active_tests), 'fields' => array('answer_style_id'), 'contain' => array(
        'Answer' => array(
            'fields' => array('capital_category_id'),
            'CapitalCategory' => array(
                'fields' => array('id', 'DISTINCT capital_id', 'DISTINCT category_id', 'delete_flag'),
                'Capital' => array(
                    'fields' => array('id', 'delete_flag')
                ),
                'Category' => array(
                    'fields' => array('id', 'delete_flag')
                )
            )
        )
    )));

但是 Cake 似乎会自动添加关联的模型键,即使 id 我用 DISTINCT 关键字指定它:

Query: SELECT `CapitalCategory`.`id`, DISTINCT `CapitalCategory`.`capital_id`, DISTINCT `CapitalCategory`.`category_id`, `CapitalCategory`.`delete_flag`, `CapitalCategory`.`capital_id`, `CapitalCategory`.`category_id` FROM `capital_categories` AS `CapitalCategory`   WHERE `CapitalCategory`.`id` = 217  

如何仅过滤掉 DISTINCT 大写字母或类别?对于当前示例,Cake 返回 20 个具有相同 id 的类别。我只想退回一个。

谢谢。

【问题讨论】:

  • 您找到解决方案了吗?我也在为同样的事情苦苦挣扎
  • 您必须为此使用自定义查询 $this->Model->query();方法

标签: cakephp distinct containable


【解决方案1】:

在我的脑海中,以下可能使用“组”选项起作用

$active_questions = $this->Question->find(
  'all', 
  array(
    'conditions' => array('Question.test_id' => $active_tests), 
    'fields' => array('answer_style_id'), 
    'contain' => array(
      'Answer' => array(
        'fields' => array('capital_category_id'),
        'CapitalCategory' => array(
          'fields' => array('id', 'capital_id', 'category_id', 'delete_flag'),
          'group' => array('capital_id', 'category_id'),
          'Capital' => array(
            'fields' => array('id', 'delete_flag')
          ),
          'Category' => array(
            'fields' => array('id', 'delete_flag')
          )
        )
      )
    )
  )
);

【讨论】:

  • 不,它不起作用。据我所知,groupcontain 中不起作用...您还有其他想法吗?
  • 对迟到的回复表示歉意。如果无法直接调试它,我什么都不会弹出。
  • 没关系。我后来读到 contain 键不支持 all find 键,因此 groupDISTINCT 不起作用。我想知道是否有其他方法可以做到这一点。
  • @AndreiHorak 有什么解决办法吗?
  • @MubasshirPawle 不,不幸的是我从那以后就没有玩过 PHP。找到此问题后,请随时发布答案!
【解决方案2】:

你为什么不把'group'放在'fields'下面而不是'contain'里面,你可能不得不完全删除'fields'。

【讨论】:

  • 因为我需要对包含模型的结果进行分组,而不是模型本身。
猜你喜欢
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多