Извините за природу OCD / ADD, но мне всегда приходится возвращаться к реальному замыслу функциональности. Кажется, слышат, что в модели могут быть некоторые несоответствия. Почему у вас есть идентификатор команды в таблице задач? Если пользователь может быть в более чем одной команде, я понимаю, почему. Но если пользователь только в одной команде, то идентификатор команды в задачах может быть получен из отношений между пользователем и командой. Таким образом, назначая пользователя для задачи, вы фактически можете получить команду от пользователя.
Как говорится, я так и сделаю. Сначала добавьте фильтры в форму:
echo $this->Form->input('filter_user_id', array('type' => 'checkbox', 'label' => 'Mine'));
echo $this->Form->input('filter_team_id', array('type' => 'checkbox', 'label' => 'Team'));
echo $this->Form->input('filter_other', array('type' => 'checkbox', 'label' => 'Other'));
Затем в функции контроллера проверьте фильтры:
// process the filters
if($this->data['Task']['filter_user_id']) {
$filter['Task.user_id'] = 'Task.user_id = ' . $user_id;
}
if($this->data['Task']['filter_team_id']) {
$filter['Task.team_id'] = '(Task.team_id = ' . $team_id . ' AND Task.user_id <> ' . $user_id . ')';
}
if($this->data['Task']['filter_other']) {
$filter['Task.id'] = '(Task.team_id <> ' . $team_id . ' AND Task.user_id <> ' . $user_id . ')';
}
$query = join(' or ', $filter);
$this->set('data', $this->Task->find('all', array('conditions' => array($query))));
Это решение будет работать. Вы, конечно, можете адаптировать его для своих нужд.
ПРИМЕЧАНИЕ. Я обновил запрос, чтобы он соответствовал вашему запросу. Это будет работать больше, чем вы ожидаете. И хотя запросы не могут быть оптимизированы, они все равно работают довольно хорошо.