首页 > PHP开源 > 用查询生成器来高级查询–kohana3使用手册

用查询生成器来高级查询–kohana3使用手册

2011年2月12日 发表评论 阅读评论

查询生成器能快速并简单的生成和运行简单的 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();

分类: PHP开源 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.