Я долго не мог понять, чего мне не хватает в штатном 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 может всё, только нужно знать все его трещинки.
Посты по теме:
RSS-подписка
Это относится не к 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