вторник, 16 сентября 2008 г.

Сортировка в find. Зачем нужны conditions

Для того чтобы найти что-то в БД используется метод Find(из фреймворка ActiveRecord), который имеет следующий вид:

result=
User.find(:all/:first/:last,
:conditions=>"some conditions",
:order=>"some order",
:limit=>"count records in result")


:all/:first/:last - альтернативы поиска, разделены косой чертой чисто схематически, на самом деле для любого запроса испольовать разрешено только один из параметров. Соответственно они указывают что вернуть в запросе - все записи/первую/последнюю запись.

:conditions=>"some conditions" - это условия выборки, например:
:conditions=>"id = 1 and name='some name'"
или
:conditions=>["name= ? and lastname = ? ", name, lastname] - параметры передаются как Хеш.

:order=>"some order" - условие сортировки, например:
:order=>"name, age DESC" - сортируем сначала по имени(по алфавиту, параметр ASC можно опускать, так как это сортировка по-умолчанию), потом сортируем по возрасту, по
убыванию(указать надо явно).

:limit=>"count records in result" - количество возвращаемых записей, например:
:limit=>"10"

Дополнительные параметры добавлю в статью позже, если она будет пользоватся интиресом у читателей (:joins,:select,:offset,:from,:group,:lock,:readonly)

5 комментариев:

  1. Как в conditions засунуть регулярное выражене?

    ОтветитьУдалить
  2. я бы посоветовал использовать like
    User.find(:all,:conditions=>["name like ?",params[:name]+"%"])

    причем само выражения шаблона надо описывать в параметре,а не выражении(пример выше).

    ОтветитьУдалить
  3. пример того как пользоваться Like смотрите тут: http://www.mysql.ru/docs/man/Pattern_matching.html

    ОтветитьУдалить
  4. афтар пиши исчо! в смысле что там говорилось про продолжение?!

    ОтветитьУдалить
  5. раз есть желающие почитать - пожалуйста. Завтра читайте первую статью из цикла - связывание моделей

    ОтветитьУдалить