<?php
...
$orders_read_unread = $this->Order->find( 'all', array(
'conditions' => array( 'Order.status' => array( 'unread', 'read' )),
'group' => array( 'Order.status' ),
));
/**
* Use this if you need 5 of EITHER canceled OR dispatched order
* if you need 5 of EACH you need to break it into two queries.
*/
$orders_dispatched_canceled = $this->Order->find( 'all', array(
'conditions' => array( 'Order.status' => array( 'canceled', 'dispatched' )),
'group' => array( 'Order.status' ),
'limit' => 5
));
/**
* Use these if you need 5 of EACH dispatched AND canceled orders
*/
$orders_dispatched = $this->Order->find( 'all', array(
'conditions' => array( 'Order.status' => 'dispatched' ),
'group' => array( 'Order.status' ),
'limit' => 5
));
$orders_canceled = $this->Order->find( 'all', array(
'conditions' => array( 'Order.status' => 'canceled' ),
'group' => array( 'Order.status' ),
'limit' => 5
));
...
?>
Должно помочь вам без необходимости иметь дело с синтаксисом клавиши «ИЛИ». Он сгенерирует немного менее эффективный синтаксис IN ARRAY ('..', '..'), но сделает PHP немного чище.
В качестве альтернативы вы можете посмотреть на любые подзапросы, которые являются проблемой для Cake. В книге приведен пример использования построителя запросов через источник данных для внедрения запроса в массив условий обычного вызова поиска торта.
http://book.cakephp.org/view/1030/Complex-Find-Conditions
И помните, что обе эти находки должны быть в модели внутри функции - вы можете либо определить пользовательский тип поиска, либо просто вызвать функцию модели непосредственно из вашего контроллера.
http://www.pixelastic.com/blog/88:using-custom-find-and-paginate-methods-in-cakephp-1-3