Я работаю над приложением CakePHP, которое, ну, в общем, приложение - как, например, приложение для поступления в университет.Он состоит из серии форм, каждая из которых хранится в таблице базы данных, а также нескольких инструментов администрирования.
Связывание всех таблиц представляет собой таблицу application , в которой метаданные хранятся вприложение.Все различные таблицы, из которых состоит заявка предполагаемого учащегося, принадлежат к таблице приложения - иными словами, они имеют однозначное отношение.
Приложение позволяет людям уйти в середине его заполнения.и вернуться позже.Вследствие этого интерфейс администрирования становится загроможденным неполными приложениями.Пользователи интерфейса хотят видеть только неполные заявки, которые были завершены до определенного момента.Требуемая информация поступает из обязательных полей формы в определенной таблице, поэтому, если человек выполнил этот шаг, требуемая информация будет присутствовать.
Все это означает, что мне нужен способ отфильтровать приложенияв которой отсутствует запись в одной из таблиц, связанных с applications
.Самый простой способ сделать это - отфильтровать их после того, как они возвращаются из базы данных, и это действительно то, что я впервые попробовал.Но я не просто запрашиваю, я использую paginator, поэтому фильтрация набора результатов после того, как он был возвращен, портит нумерацию страниц.Мне нужно иметь возможность отфильтровать его в параметре conditions
массива конфигурации $paginate
.
Здесь приведен соответствующий код контроллера, включая текущий механизм фильтрации, который работает, но не работает с нумерацией страниц.:
var $paginate = array(
'limit'=>100,
// We want apps that are complete at the top of the list, ordered by the date they were finished.
// We want to order incomplete apps by dateStarted because they don't have a dateFinished yet.
'order'=>array('stepsCompleted'=>'desc', 'dateFinished'=>'desc', 'dateStarted'=>'desc'),
);
function admin_index() {
$this->Nsapp->recursive = 0;
$this->Nsapp->unbindModel(array('hasOne'=>array('Essay', 'Religion', 'SpecialNeed')), false);
$nsapps = $this->paginate('Nsapp');
// Filter out the apps that are too incomplete to do anything about
foreach ($nsapps as $key => $nsapp) {
// This fairly horrible conditional says, "If they provided us with at least one name and an email, do not filter them out"
if ((empty($nsapp['Person']['name1']) &&
empty($nsapp['Person']['name2']) &&
empty($nsapp['Person']['surName'])) ||
empty($nsapp['Person']['email']))
{
unset($nsapps[$key]);
}
}
$this->set('nsapps', $nsapps);
}
Итак, подведем итог и повторим: мой текущий запрос нумерации страниц возвращает массив пустых полей для связанных таблиц, у которых нет записи.Мне нужен способ удалить результаты, в которых отсутствует определенная связанная запись, не с помощью пост-фильтрации (потому что это портит нумерацию страниц), а с помощью параметра условий в массиве конфигурации $paginate
, но я не знаю, как сделать запросза отсутствие записи.
Заранее благодарен за любую помощь!