用查询生成器来高级查询–kohana3使用手册
查询生成器能快速并简单的生成和运行简单的 SQL 查询。
然后某些文档缺少了更多复杂的查询。
语句和表达式
有些时候你想运行一个快速更新来使某列的数值增加,诸如一个视图或者列数。SQL 看起来就像这样
UPDATE `pages` SET `views` = views + 1 WHERE `id` = 1
假如是这样,我们能使用 DB::expr(‘’) 函数来创建表达式
DB::update('pages')
->set(array('views' => DB::expr('views + 1')))
->where('id', '=', 1)
->execute();
执行
当调用执行,例如在一个 InnoDB 数据库,我们的查询不是 SELECT,INSERT,UPDATE,或者 DELETE
BEGIN WORK;
我们能使用定制的查询函数来调用这个
DB::query(NULL, “BEGIN WORK”)->execute();
同样,如果你想的话,你可以回调 INSERT 和 UPDATE 查询所创建的 TRUE/FALSE 情况来决定是否委托(COMMIT)或者回滚(ROLLBACK)
DB::query(NULL, "BEGIN WORK")->execute();
// 页面数据数组
$page_data = array(
'id' => NULL,
'title' => 'My New Page',
);
$page = (bool) DB::insert('pages', array_keys($page_data))
->values($page_data)
->execute();
$page_cat_data = array(
'page_count' => DB::expr('page_count + 1'),
);
$page_cat = (bool) DB::update('page_categories')
->set($page_cat_data)
->where('id', '=', 1)
->execute();
if($page AND $page_cat)
{
DB::query(NULL, "COMMIT")->execute();
}
else
{
DB::query(NULL, "ROLLBACK")->execute();
}
联合(Joins)
用查询生成器来执行一个联合是非常简单的。在这个例子中我们得到了一个 articles 和 users 的表,我们希望得到user的username 和article的title
SQL:
SELECT `articles`.`title`, `users`.`username`
FROM `articles`
JOIN `users`
ON (`users`.`id` = `articles`.`user_id`)
WHERE `articles`.`id` = 1
LIMIT 1
查询生成器:
$query = DB::select('articles.title', 'users.username')
->from('articles')
->where('articles.id', '=', 1)
->join('users')
->on('users.id', '=', 'articles.user_id')
->limit(1)
->execute();