3

コハナ初心者です。データの取得に 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)

誰かがBETWEEN句の使い方を指摘できますか

4

2 に答える 2

8

or_where('events.eventstart', 'BETWEEN', array($from, $to)); Kohana Query Builder のドキュメントはここにあります -> http://kohanaframework.org/3.2/guide/database/query/builder ORM は Query Builder を使用します。

于 2011-08-03T06:40:37.443 に答える
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));
于 2012-03-21T00:44:10.980 に答える