Как использовать предложение BETWEEN в Kohana ORM - PullRequest
3 голосов
/ 03 августа 2011

Я новичок в кохане.Я использую ORM для получения данных.

Я хочу создать запрос, в котором есть предложение BETWEEN.следующим образом

SELECT `rooms`.* FROM `rooms` LEFT JOIN `events` ON (`rooms`.`id` = `events`.`room_id`) 
WHERE `events`.`room_id` IS NULL 
OR (`events`.`eventstart` NOT BETWEEN 1312210800  AND 1312218000) 

для этого я делаю следующее

    $rooms = $room->join('events', 'LEFT')
                  ->on('rooms.id', '=', 'events.room_id')
                  ->where('events.room_id', 'IS', NULL)
                  ->and_where_open()
                  ->or_where('events.eventstart' , 'NOT BETWEEN', $from)
                  ->and_where_close()
                  ->find_all();

Но я получаю запрос, подобный этому

SELECT `rooms`.* FROM `rooms` LEFT JOIN `events` ON (`rooms`.`id` = `events`.`room_id`)
WHERE `events`.`room_id` IS NULL AND (`events`.`eventstart` NOT BETWEEN 1312210800)

Может кто-нибудь указать, какиспользовать предложение между

Ответы [ 2 ]

8 голосов
/ 03 августа 2011

Я думаю, вы должны использовать or_where('events.eventstart', 'BETWEEN', array($from, $to)); Документацию по Kohana Query Builder можно найти здесь -> http://kohanaframework.org/3.2/guide/database/query/builder ORM использует Query Builder.

5 голосов
/ 21 марта 2012

Я обнаружил, что надежно работает только один способ - использовать DB::expr().

Примите во внимание следующее:

or_where('events.eventstart', 'NOT BETWEEN', DB::expr('1312210800  AND 1312218000'));

Или вы можете вставить все это в переменные:

$range = "{$from} AND {$to}";
or_where('events.eventstart', 'NOT BETWEEN', DB::expr($range));
...