如何在Kohana ORM中使用BETWEEN子句

jim*_*imy 3 kohana kohana-3 kohana-orm kohana-db

我是kohana的新手.我正在使用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) 
Run Code Online (Sandbox Code Playgroud)

因为我正在做以下事情

    $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();
Run Code Online (Sandbox Code Playgroud)

但我得到这样的查询

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)
Run Code Online (Sandbox Code Playgroud)

有人可以指出如何使用BETWEEN子句

egi*_*gis 8

我认为您应该or_where('events.eventstart', 'BETWEEN', array($from, $to)); 在Kohana查询生成器上使用文档可以在这里找到 - > http://kohanaframework.org/3.2/guide/database/query/builder ORM使用查询生成器.


Don*_*ulo 5

我发现可靠工作的唯一方法就是使用DB::expr().

考虑以下:

or_where('events.eventstart', 'NOT BETWEEN', DB::expr('1312210800  AND 1312218000'));
Run Code Online (Sandbox Code Playgroud)

或者你可以把它全部放在变量中:

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