CakePHP: выберите DISTINCT в ContainableBehaviour
Я пытаюсь выбрать только отдельные связанные записи модели, но, похоже, это не работает.
У меня есть это:
$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, кажется, автоматически добавляет связанный ключ модели, даже если я указал его с помощью ключевого слова 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 категорий с одинаковым идентификатором. Я хочу, чтобы только один был возвращен.
Спасибо.
2 ответа
Почему бы вам не поместить "группу" чуть ниже "полей", а не внутри "содержать", также вам, возможно, придется полностью удалить "поля".
Вне моей головы, следующее может работать, используя опцию "группа"
$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')
)
)
)
)
)
);