Вы можете сделать это 4 или более различными способами ... самый простой, но не рекомендуемый, использовать
$this->Model->query($query);
, где $query
- запрос, указанный выше.
Второйпуть, но может быть не тем, что вы хотите, это повторить ваш sql-запрос, вы получите тот же результат (но не разделенный псевдонимом), как это:
SELECT * FROM `videos` AS `U1`
WHERE `U1`.`level_id` = '1' AND (`U1`.`submitted_date` > '2011-09-11' OR `U1`.`submitted_date` < '2011-09-11')
ORDER BY submitted_date DESC
LIMIT 0,10
Этот запрос может быть легко выполнен с помощью команды find, подобной этой
$conditions = array(
'Video.level_id'=>1,
'OR' => array(
'Video.submitted_date <'=> '2011-09-11',
'Video.submitted_date >'=> '2011-09-11'
)
);
$this->Video->find('all', array('conditions'=>$conditions))
Третий путь - это тот, о котором говорит Абба Брайант, подробно объясненный здесь Синтаксис объединения в cakePhp , который работает для построения оператора напрямую.
Четвертый способ понравится первому еще меньше, вам нужно будет создать поведение, которое имеет функцию beforeFind, и там вам нужно будет проверить, объединяет ли опция параметр, и создать запрос или создать что-то вроде третьего варианта.
вы будете называть это находкой, подобной этой
$this->Video->find('all', array('conditions'=>$conditions, 'union'=> $union));
Это будет что-то более менее похожее на связываемое или сдерживаемое поведение.
Пятый способ заключается в том, чтобы модифицировать ваш драйвер CakePHP SQL ... этот, я действительно не знаю, какие изменения вы должны сделать, но это способ добраться до этого ... Эти драйверыответственный за интерпретацию и создание запросов, подключение к БД и выполнение запросов ...
ПОМНИТЕ, что находка cakephp делает проверки, необходимые для предотвращения SQLInyection и других рисков ... $model->query
НЕ будет этого делатьтесты, так что будьте осторожны