Я пишу приложение 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);
(Статус = 1, потому что я использую обратимое удаление.)
Это создает упорядоченный список всех имен first_names. Но там есть дубликаты.
Покопавшись в Cookbook, я нашел пример с использованием ключевого слова 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, но я не могу от него избавиться.
Спасибо, Фрэнк Люк.