Kohana ORM. Используем выражения



kohanaЯ долго не мог понять, чего мне не хватает в штатном ORM от Kohana. А не хватало именно возможности использования выражений.

Бывало напишешь по-наивности какое-нибудь выражение прямо в where. Например, так:

1
where('concat(first_name," ",last_name)',"like","%$searchstring%")...

А потом получаешь ошибку, что нет такого поля 'concat(first_name," ",last_name)'

И вот однажды я в недрах интернетов нашёл решение, которое конечно же решил положить в мою копилку шпаргалок. Всё дело в использовании функции DB::expr. Вот например так:

1
2
3
4
5
6
7
$searchresult=ORM::factory("user")->
  where(   DB::expr('concat(first_name," ",last_name)'),
                           "like","%$searchstring%")->
  order_by("id","desc")->
  limit($data['per_page'])->
  offset($data['offset'])->
  find_all();

Воистину, ORM может всё, только нужно знать все его трещинки.

Посты по теме:

  1. Kohana 3.0. Мысли о том как надо писать модели.
  2. Kohana 3.0. Шпаргалка по ORM
  3. Kohana для чайников. Простейший ORM
  4. Kohana. Модуль Image
  5. Kohana. Query Builder. Правила хорошего тона.

Категории Kohana |
автор: altesack / Среда, Июнь 22, 2011 / 4 комментов »

4 комментов

    Это относится не к ORM, а к QueryBuilder и находится в соответствующих разделах гайда.

    @ nуч2hex:
    Во-во!Наверное именно поэтому я не сразу нашёл эту фишку.

    kohana 3.0

    $groupsmembercount = ORM::factory(’groupsusersmember’)
    ->select(array(’groupsusersmembers.groupsuser_id’, ‘groupsuser_id’), array(’COUNT(”*”)’, ‘count’) )
    ->where(’groupsuser_id’, ‘in’, $groups )
    ->group_by(’groupsuser_id’)
    ->find_all()
    ->as_array(’groupsuser_id’,'count’ );

    усьо работает
    ізучаєм мани

    або он так

    $actionsexists = ORM::factory(’grantscontroller’)
    ->select(array(’grantsactions.id’, ‘i’),array(’CONCAT(”grantscontrollers.name”,\’ \’, “grantsactions.action”)’, ‘new_name’) )

    сорі версія
    3.1 коханої
    і в попередньому пості теж )) 3.1