不同于 ActiveRecord 的使用,采用 createCommand
你可以使用相对原始的写法操作数据库,比如直接执行 SQL 查询、通过数组的方式将数据写入到数据等等
▪ 创建命令
Yii::app()->db->createCommand(); # 全局可用
parent::getDb()->createCommand(); # 仅可用于集成自 ActiveRecord 的类
Yii::app()->db->createCommand($sql); # 带 $sql 的命令
parent::getDb()->createCommand($sql); # 带 $sql 的命令 ActiveRecord
▪ 执行SQL
Yii::app()->db->createCommand($sql)->execute(); # 执行SQL
Yii::app()->db->createCommand($sql)->queryAll(); # 查询所有行数据
Yii::app()->db->createCommand($sql)->queryRow(); # 查询第一行数据
Yii::app()->db->createCommand($sql)->queryColumn(); # 查询第一列数据
Yii::app()->db->createCommand($sql)->queryScalar(); # 查询第一行的第一字段
▪ 写入数据
# 写入数据
# 备注:写入、更新、删除时需要调用 execute() 进行执行
# 备注:'[表名]' 为字符格式
# 备注:'[数据]' 为数组格式,例如 array('name'=>'','insert_time'=>'')
Yii::app()->db->createCommand()->insert('[表名]', '[数据]')->execute();
# 获取最新写入ID
Yii::app()->db->getLastInsertID();
▪ 更新数据
# 更新数据
# 备注:写入、更新、删除时需要调用 execute() 进行执行
# 备注:'[表名]' 为字符格式
# 备注:'[数据]' 为数组格式,例如 array('name'=>'','insert_time'=>'')
Yii::app()->db->createCommand()->update('[表名]', [数据]', array('id'=>$id))->execute();
);
▪ 删除数据
# 删除数据
# 备注:写入、更新、删除时需要调用 execute() 进行执行
# 备注:'[表名]' 为字符格式
Yii::app()->db->createCommand()->delete('[表名]', array('id'=>$id))->execute();
六、select其他写法
单表查询
$goodsTypes = Yii::app()->db->createCommand()
->select(‘type_id, type_name’)
->from(‘goods_type’)
->where(‘status=1’)
->queryAll();
连表查询
$goods = Yii::app()->db->createCommand()
->from(‘goods g’)
->select(‘g.good_id, g.good_name, gt.type_name, g.price, g.buy_nums, g.commit_nums, g.create_time’)
->join(‘goods_type gt’, ‘g.good_type=gt.type_id’)
->where(‘g.status
=1 and gt.status
=1’)
->order(‘g.create_time desc’)
->queryAll();
// 首先要实例化一个CDbCommand对象
$command = Yii::app()->db->createCommand(); // 注意参数留空了。。
// 可用的方法列表如下:
->select(): SELECT子句
->selectDistinct(): SELECT子句,并保持了记录的唯一性
->from(): 构建FROM子句
->where(): 构建WHERE子句
->join(): 在FROM子句中构建INNER JOIN 子句
->leftJoin(): 在FROM子句中构建左连接子句
->rightJoin(): 在FROM子句中构建右连接子句
->crossJoin(): 添加交叉查询片段(没用过)
->naturalJoin(): 添加一个自然连接子片段
->group(): GROUP BY子句
->having(): 类似于WHERE的子句,但要与GROUP BY连用
->order(): ORDER BY子句
->limit(): LIMIT子句的第一部分
->offset(): LIMIT子句的第二部分
->union(): appends a UNION query fragment