yii2 数据库和ActiveRecord
Yii2数据库和 ActiveRecord 类
1、在 common/config/main-local.php 里面配置数据账号和密码。
2、ActiveRecord(活动记录,简称AR类),提供了一套面向对象的接口,用以访问数据库中的数据
- 一个AR类关联一张数据表,每个AR对象对应表中的一行;
- AR类的属性,对应为数据库中的列
- 可以以面向对象的方式来操纵数据库中的数据,这样就不用谢 sql 语句来实现数据库的访问。
- find() 方法返回一条记录;
$model = Post::find()->where(['id'=>1])->one();
$model = Post::findOne(1);
- find() 方法返回所有记录;
$model = Post::find()->where(['status'=>1])->all();
$model = Post::findAll(['status'=>1]);
$total = User::find()->count(); // 查询总数(count(*))
3、ActiveQueryInterface 常用方法:
- all() 、one() --------- 执行查询,并返回 AR 对象
- orderBy()、andOrderBy() --------- 排序
- count() --------- 返回符合查询条件的记录数
- limit() --------- 取出查询结果的条数
- with() --------- 指定关联表的字段
- where()、andWhere()、orWhere() --------- 查询条件
4、where() 查询条件的写法:
where 参数的写法 | sql 语句 | |
and | ['and','id=1','id=2'] | id=1 AND id=2 |
or | ['or','id=1','id=2'] | id=1 OR id=2 |
in | ['in','id',[1,2,3]] | IN(1,2,3) |
between | ['between','id',1,10] | id BETWEEN 1 AND 10 |
like | ['like','name',['test','sample']] | name LIKE '%test%' AND name LIKE '%sample%' |
比较 | ['>=','id',10] | id >= 10 |
5、findBySql()
$sql = "SELECT * FROM post WHERE status = 1";
$post = Post::findBySql($sql) -> all();
6、CRUD 操作数据
AR 提供下面这些方法来实现插入、更新、删除等功能
a、yii\db\ActiveRecord::insert() // 插入
$customer = new Customer();
$customer -> name = 'Carroll';
$customer -> email = 'Carroll@qq.com'
$customer -> save(); // 等同于 $customer -> insert()
b、yii\db\ActiveRecord::update() // 更新
$customer = Customer::findOne($id);
$customer -> email = '123456@qq.com'
$customer ->save(); // 等同于 $customer -> update()
c、yii\db\ActiveRecord::delete() // 删除
$customer = Customer::findOne($id);
$customer -> delete();
d、yii\db\ActiveRecord::save() // 可同时替代 insert() 和 update(),开发中常用 save()方法
7 、ActiveRecord 的生命周期
方法 | 生命周期 | 事件 |
new() | 1、constructor | |
2、init() | EVENT_INIT | |
find() | 1、constructor | |
2、init() | EVENT_INIT | |
3、afterFind() | EVENT_AFTER_FIND | |
save() | 1、beforeValidate() | EVENT_BEFORE_VALIDATE |
2、执行数据验证,如通不过,则第三部后面的步骤会被略过 | ||
3、afterValidate() | EVENT_AFTER_VALIDATE | |
4、beforeSave() | EVENT_BEFORE_INSERT or EVENT_BEFORE_UPDATE | |
5、执行数据插入或修改 | ||
6、afterSave() | EVENT_AFTER_INSERT or EVENT_AFTER_UPDATE | |
delete() | 1、beforeDelete() | EVENT_BEFORE_DELETE |
2、执行数据删除 | ||
3、afterDelete() | EVENT_AFTER_DELETE | |
refresh() | 1、afterRefresh() | EVENT_AFTER_REFRESH |
可以根据 ActiveRecord 的什么周期来重写方法,注入自己的代码控制流程
例如重写beforeSave(),如果这个方法执行后的结果为 false,后面的步骤就不会执行
/**
* @purpose : 将数据插入时间和更新时间插入数据库
* @param bool $insert
* @return bool
*/
public function beforeSave($insert){
if(parent::beforeSave($insert)){ // 需要首先继承父类的 beforeSave()
if($insert){
$this->create_time = time();
$this->update_time = time();
}else{
$this->update_time = time();
}
return true;
}else{
return false;
}
}
查询所有的记录:
$dataProvider->query->each() 查询当前页的数据:
$dataProvider->getModels() 获取当前模型的默认值:
$model = new Test();
$model->loadDefaultValues(); // 当前模型的默认值
Yii 中的回滚操作,此处用于 当遇到 try .... cache() 的时候
$transacton = Yii::$app->dbName->beginTransaction();
try{
...
$model->save();
$transacton->commit();
}cache(Exception $e){
$transacton->rollBack();
var_dump($e->getMessage());
}
注:本文为作者(44106-kangaroo) 看完魏羲教你学Yii2.0 视频后所记,如有转载请注明出处:http://www.cnblogs.com/chrdai/p/8006425.html
yii2 数据库和ActiveRecord的更多相关文章
- yii2 数据库查询
下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...
- Yii2数据库分页操作方法介绍
本章节将介绍怎样怎样创建一个从数据表 country 中获取国家数据并显示出来的页面. 为了实现这个目标,你将会配置一个数据库连接.创建一个活动记录类,而且创建一个操作及一个视图. 贯穿整个章节,你将 ...
- YII2数据库依赖缓存
首先配置一下缓存,自己选择是用文件缓存还是数据库缓存等. 'cache' => [ 'class' => 'yii\caching\FileCache', ], 然后就可以通过 Yii:: ...
- yii2 数据库操作(转)
开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.php),DSN( Data Source Name ...
- YII2数据库操作出现类似Database Exception – yii\db\Exception SQLSTATE
yii2安装后,连接数据库,必须要安装pdo_mysql扩展
- Yii2 数据库操作汇总
对象操作 查询 //1.简单查询 $admin=Admin::model()->findAll($condition,$params); $admin=Admin::model()->fi ...
- Yii2 数据库查询汇总
1.基础查询 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find( ...
- yii2 数据库操作详解(转载)
开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.php),DSN( Data Source Name ...
- yii2数据库简单操作
1.简单查询: one(): 根据查询结果返回查询的第一条记录. all(): 根据查询结果返回所有记录. count(): 返回记录的数量. sum(): 返回指定列的总数. average(): ...
随机推荐
- Faster-RCNN tensorflow 程序细节
tf-faster-rcnn github:https://github.com/endernewton/tf-faster-rcnn backbone,例如vgg,conv层不改变feature大小 ...
- textarea文本域宽度和高度width及height自动适应实现代码
<HTML> <HEAD> <TITLE>textarea宽度.高度自动适应处理方法</TITLE> <!-- 控制宽度的自动适应 --> ...
- JSP基础知识➣结构及生命周期(一)
概述 网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面.容器负责截获对JSP页面的请求.本教程使用内嵌JSP容器的Apache来支持JSP开发. JSP容器与Web服务器协同合作,为JSP ...
- 调整LaTeX文档页面的大小
看下面这张图片便一目了然!!! 借助 geometry 包,可以很方便地调整页面大小,常用的参数如图所示,这些参数都可以通过LateX支持的单位(mm, cm, pt, in)去重新设置. ...
- Factorial Trailing Zeroes Add to List
https://leetcode.com/problems/factorial-trailing-zeroes/#/description 想到了要找2x5:也想到了只要找5,剩下的2 管够.也想到了 ...
- day9.初识函数
python3 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你 ...
- TensorFlow图像预处理-函数
更多的基本的API请参看TensorFlow中文社区:http://www.tensorfly.cn/tfdoc/api_docs/python/array_ops.html 下面是实验的代码,可以参 ...
- 找bug hhh
http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4434 没有用队列,疯狂找不到bug,后来发现很简单的判断时==n和m了,本来心花怒放,测试 ...
- Java 之 XML
1.XML a.定义:可扩展标记语言 b.用途:现在主要用来以一种格式化的形式来存储数据 c.注意:XML中是区分大小写的 2.DTD a.定义:文档类型定义 b.作用:定义 XML 文档的合法构建模 ...
- web服务-1、http协议的三次握手四次挥手
知识点:http协议:它是基于tcp协议的,浏览器访问服务器,服务器把资源回给浏览器,这个过程都是遵循http协议的,否则无法完成,http早些年是1.0版本,现在基本上都是1.1版本了,俩个版本的区 ...