YII2操作数据库方式有哪些?怎样操作?
Admin 2021-05-10 群英技术资讯 2360 次浏览
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
swoole能设置多个定时器,swoole定时器的最小颗粒是1秒。支持多个定时器。注意不能存在2个相同间隔时间的定时器。 增加定时器后需要写一个回调函数。
这篇文章主要介绍了PHP架构及原理知识点以及相关实例讲解,需要的朋友们参考下。
访问workerman的方法:创建一个入口文件,在文件中使用“require_once__DIR__.'/Workerman/Autoloader.php';”语句引入Workerman/Autoloader.php,然后运行入口文件即可。
PHP自动加载的方法有哪些?想要实现php自动加载,我们有两种方法,用__autoload函数和用spl自动加载,下面我们就来具体了解一下。
所有php里面的值都可以使用函数 serialize()来返回一个包含字节流的字符串来表示。 unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
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