Я пишу приложение CakePHP 1.2. У меня есть список людей, которых я хочу, чтобы пользователь мог фильтровать по разным полям. Для каждого фильтруемого поля у меня есть выпадающий список. Выберите комбинацию фильтров, нажмите «Фильтр», и на странице отобразятся только соответствующие записи.
В people_controller у меня есть этот бит кода:
$first_names = $this->Person->find('list', array(
'fields'=>'first_name',
'order'=>'Person.first_name ASC',
'conditions'=> array('Person.status'=>'1')
));
$this->set('first_names', $first_names);
(Status = 1, потому что я использую мягкое удаление.)
Это создает упорядоченный список всех имен. Но там есть дубликаты.
Копаясь в Поваренной книге, я нашел пример использования ключевого слова DISTINCT и изменил свой код, чтобы использовать его.
$first_names = $this->Person->find('list', array(
'fields'=>'DISTINCT first_name',
'order'=>'Person.first_name ASC',
'conditions'=> array('Person.status'=>'1')
));
Это дает мне ошибку SQL, подобную этой:
Query: SELECT `Person`.`id`, DISTINCT `Person`.` first_name` FROM `people` AS `Person` WHERE `Person`.`status` = 1 ORDER BY `Person`.`first_name` ASC
Проблема очевидна. Фреймворк добавляет Person.id к запросу. Я подозреваю, что это происходит от использования «списка».
Я буду использовать выбранный фильтр для создания оператора SQL при нажатии кнопки фильтра. Мне не нужно поле is, но я не могу от него избавиться.
Спасибо,
Фрэнк Люк