本文发布于 https://www.xstnet.com/article-112.html
使用Query Builder
关于Query Builder
查询构建器调用的方法CDbConnection::createCommand()
, 可以先通过以下代码得到:
/**
* @var $db CDbConnection
*/
$db = Yii::app()->db;
/**
* @var $command CDbCommand
*/
$command = $db->createCommand();
查询构建器的获取结果有以下几种方法
query
: 返回一个CDbDataReader
对象, 需要自己去获取结果queryAll
: 返回一个包含所有结果的二维数组, 如果没有查询到数据,返回一个空数组queryRow
: 返回一个包含所有结果的一维数组, 如果没有查询到数据,返回falsequeryScalar
返回第一行第一列的值, 如果没有查询到数据, 返回falsequeryScalar
返回包含第一列的一维数组。如果没有查询到数据,则为空数组。execute
执行语句, 无结果,返回受影响的行数
使用自定义的sql
// 方法1
$result = Yii::app()->db->createCommand('select * from tbl_user')->queryAll();
// 方法2, 使用参数绑定
$command->text = 'select * from tbl_user where id = :id';
$result = $command->queryAll(true, [':id' => 5]);
// 方法3
$result = $command->setText('select * from tbl_user')->queryAll();
使用构建器
使用select()方法
echo $command->select('id, name')->getText();
// SELECT `id`, `name`
echo $command->select("id, name, FROM_UNIXTIME(created_at, '%Y-%m-%d') as create_time")->getText(); // 使用mysql表达式
// SELECT id, name, FROM_UNIXTIME(created_at, '%Y-%m-%d') as create_time
// 使用数组
echo $command->select(['id, name'])->getText();
// SELECT `id`, `name`
echo $command->select(['id', 'name username', 'count(*) as count'])->getText();
// SELECT `id`, `name` AS `username`, count(*) as count
// 此处使用数组时, 如果元素包含`()`括号, 则不会被转义, 如果不包含括号, 但是包含空格, 会被`as`替换
使用selectDistinct()方法
echo $command->selectDistinct(['id', 'name'])->getText();
// SELECT DISTINCT `id`, `name`
echo $command->selectDistinct('id, name, now() now_time')->getText();
SELECT DISTINCT id, name, now() now_time
使用from()方法
echo $command->from('tbl_user')->getText();
// SELECT * FROM `tbl_user`
echo $command->from('{
{user}}')->getText(); // 使用表前缀, 需要先配置`db.tablePrefix`
// SELECT * FROM