YII2操作数据库方式有哪些?怎样操作?
Admin 2021-05-10 群英技术资讯 2129 次浏览
YII2操作数据库的方式有哪些?很多刚接触YII2框架的新手可能对于这个问题不是很了解,下面小编就给大家介绍一下,以createCommand方式和AR(Active Record)方式操作数据库的方法。
一、以createCommand方式:
// YII2中通过createCommand来处理数据库
// 查询多条记录
// {{%user}} 表示如果设置了表前缀,YII会自动帮你替换
$data1 = YII::$app->db->createCommand('select * from {{%user}}')->queryAll();
// 查询一条记录
// createCommand的第二个参数可以进行参数绑定
$data2 = YII::$app->db->createCommand('select * from {{%user}} where id=:id', ['id' => 2])->queryOne();
// 返回一列(第一列)数据
$data3 = YII::$app->db->createCommand('select name from {{%user}}')->queryColumn();
// 返回一个标量值,常用于统计
$data4 = YII::$app->db->createCommand('select count(*) as cnt from {{%user}}')->queryScalar();
// 绑定参数,防止SQL注入问题
// bindValue绑定一个参数
$data5 = YII::$app->db->createCommand('select * from {{%user}} where id=:id')
->bindValue(':id', 3)
->queryOne();
// 绑定多个参数
$data6 = YII::$app->db->createCommand('select * from {{%user}} where id=:id and name=:name')
->bindValues([':id' => 5, ':name' => 'eee'])
->queryOne();
// 绑定参数引用
$id = 7;
$data7 = YII::$app->db->createCommand('select * from {{%user}} where id=:id')
->bindParam(':id', $id)
->queryOne();
// 执行非查询语句
$data8 = YII::$app->db->createCommand('update {{%user}} set name=:name where id=:id')
->bindValues([':name' => 'abcdef', ':id' => 8])
->execute();
// 当然,我们也可以用更加简便的方法
// insert()插入
$data9 = YII::$app->db->createCommand()->insert('{{%user}}', [
'name' => 'test',
'sex' => 1,
'age' => 28,
])->execute();
// batchInsert()批量插入
$data10 = YII::$app->db->createCommand()->batchInsert('{{%user}}', ['name', 'sex', 'age'], [
['111', 1, 11],
['222', 1, 22],
])->execute();
// update()更新
$data11 = YII::$app->db->createCommand()->update('{{%user}}', [
'name' => '1242143214'
], 'id=:id', ['id' => 10])->execute();
// delete()删除
$data12 = YII::$app->db->createCommand()->delete('{{%user}}', 'id=:id', ['id' => 11])->execute();
// 执行事务
$trans = YII::$app->db->beginTransaction();
try {
YII::$app->db->createCommand()->update('{{%user}}', ['age' => 12], 'id=:id', ['id' => 13])->execute();
YII::$app->db->createCommand()->update('{{%user}}', ['age' => 22], 'id=:id', ['id' => 14])->execute();
$trans->commit();
} catch (\Exception $e) {
//如果语句中有一个执行失败,那么就将回滚
$trans->rollBack();
throw $e;
}
// 获取表的定义信息
$info = YII::$app->db->getTableSchema('{{%user}}');
二、以AR(Active Record)方式操作数据库
我们需要创建一个继承自\yii\db\ActiveRecord的模型,然后重写tableName()函数,返回要操作的表名。
<?php
namespace app\models;
use yii\db\ActiveRecord;
class MyUser extends ActiveRecord
{
public static function tableName()
{
return '{{%user}}';
}
}
常用操作如下:
// 查询一条记录
// asArray的作用是以数组形式返回结果
// find()会返回一个ActiveQuery对象,ActiveQuery对象继承自yii\db\Query,所以可以使用Query中的所有查询方法
$data1 = MyUser::find()->where(['id' => 1])->asArray()->one();
// 查询多条记录
$data2 = MyUser::find()->where([])->orderBy('id desc')->asArray()->all();
// 根据主键获取一条记录
$data3 = MyUser::findOne(3);
// 根据主键获取多条记录
$data4 = MyUser::findAll([4, 5, 6, 7]);
// 带条件查询多条记录
$data5 = MyUser::findAll(['sex' => 1]);
// 运行原生SQL
$data6 = MyUser::findBySql('select * from {{%user}} where id=:id', [':id' => 8])->asArray()->one();
// 添加数据
// 准备一个新的实例,然后设置对应字段属性,保存
$user = new MyUser();
$user->name = 'test';
$user->sex = 1;
$user->age = 22;
$user->save();
// 修改数据
// 先获取一个对象,然后设置对应字段属性,保存
$upd = MyUser::findOne(10);
$upd->name = 'abcdefg';
$upd->save();
// 修改多条数据
$data7 = MyUser::updateAll(['name' => 'update'], ['sex' => 1]);
// 删除一条数据
$del = MyUser::findOne(15);
$del->delete();
// 删除多条数据
$data8 = MyUser::deleteAll(['sex' => 0]);
// 事务操作
$user2 = MyUser::findOne(22);
$user3 = MyUser::findOne(33);
$trans = MyUser::getDb()->beginTransaction();
try {
$user2->name = '2222';
$user3->name = '3333';
//修改数据
$user2->save();
$user3->save();
$trans->commit();
} catch (\Exception $e) {
$trans->rollBack();
throw $e;
}
以上就是关于YII2框架中操作数据库的方式介绍,上述实例有一定的参考价值,有需要的朋友可以看下,想要了解更多YII2操作数据库的技巧,可以继续关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章带大家带大家了解一下PHP7.X各版本(7.0、7.1、7.2、7.3、7.4)的新特性,有需要的可以看看,希望对大家有所帮助!
PHP允许您从脚本直接发送电子邮件。本节将为你介绍PHP发送电子邮件的具体方法。下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
协程“协程”就是用户态的线程要理解是什么是“用户态的线程”,必然就要先理解什么是“内核态的线程”。内核态的线程是由操作系统来进行调度的,在切换线程上下文时,要先保存上一个线程的上下文,然后执行下一个线程,当条件满足时,切换回上一个线程,并恢复上下文。协程也是如此,只不过,用户态的线程不是由操作系统来调度的,而是由程序员来调度的,是在用户态的--摘自链接描述关于“用户态线程”,我们
PHP中常见的header头定义有哪些?对PHP新手来说,对这个问题可能不是很清楚,这篇文章就给大家介绍一下,了解一些常用header头定义还是很有用处的,下面一起来看一下。
这篇文章主要介绍了laravel框架中控制器的创建和使用方法,结合实例形式详细分析了laravel框架控制器的原理、创建、使用方法及相关注意事项,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008