Используйте обратный вызов beforeFind()
(http://book.cakephp.org/view/680/beforeFind) для такого рода вещей. Вот один, который я использую время от времени, который гарантирует, что возвращаются только активные записи:
function beforeFind( $queryData )
{
$conditions = $queryData['conditions'];
if( !is_array( $conditions ) ) {
if( !$conditions ) {
$conditions = array();
}
else {
$conditions = array( $conditions );
}
}
if( !array_key_exists( $conditions, 'active' ) && !isset( $conditions[$this->alias . '.active'] ) ) {
$conditions[$this->alias . '.active'] = 1;
}
return true;
}
Это немного не так, поэтому синтаксис может быть не точным, но он должен дать вам кое-что для начала. Я думаю, что все в порядке, за исключением, возможно, порядка аргументов в нескольких вызовах функций. Во всяком случае, это должно быть близко.