Методы модели findBy и findAllBy

В документации как-то очень мельком упомянуты эти методы. Кроме того описание этих методов выглядит так:

findBy<fieldName>(string $value)

Хотя на самом деле это не совсем соответствует действительности. Для поиска одной записи по значению одного поля описание должно выглядеть так:

findBy<fieldName>(string $value, $fields=null, $order=null, $recursive=null)

и

finAlldBy<fieldName>(string $value, $fields=null, $order=null, $limit=null, $page=null, $recursive=null)

Разница есть. Лично я очень обрадовался параметру $recursive — не надо отдельно, перед вызовом метода устанавливать это значение или ображаться к Containable.

Но и это еще не все!

Можно задавать несколько полей для условия, объединяя их AND и OR. Вполне работает такая конструкция:

$this->User->findByIdAndActive(123, 1)

Получится запрос типа

SELECT * FROM User WHERE id=123 AND active=1

Если в условии участвуют несколько полей, то их значения для поиска должны быть первыми параметрами для вызова метода, в том порядке, в котором перечислены названия полей модели. А уж после значений для поиска можно добавлять аргументы $fields, $order и т.д.

Related Posts with Thumbnails
13.02.2009 • Метки: , , , , , • Рубрики: CakePHP
blog comments powered by Disqus