2011-08-03 35 views
3

我是kohana的新手。我使用ORM獲取數據。如何在Kohana ORM中使用BETWEEN子句

我想建立一個查詢,其中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) 

有人能指出如何BETWEEN子句

使用

回答

8

我認爲您應該使用or_where('events.eventstart', 'BETWEEN', array($from, $to)); 文檔在Kohana查詢生成器可以在這裏找到 - >http://kohanaframework.org/3.2/guide/database/query/builder ORM使用查詢生成器。

+0

感謝@egis爲,但如何使用'NOT BETWEEN'條款 – jimy

+0

嘗試'or_where(」 events.eventstart','NOT BETWEEN',array($ from,$ to));' – egis

+0

沒有運氣,它不工作 – jimy

5

我發現可靠工作的唯一方法是使用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)); 
+0

這項技術對我來說效果不錯!乾杯 – Opentuned

相關問題