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的更多相关文章

  1. yii2 数据库查询

    下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...

  2. Yii2数据库分页操作方法介绍

    本章节将介绍怎样怎样创建一个从数据表 country 中获取国家数据并显示出来的页面. 为了实现这个目标,你将会配置一个数据库连接.创建一个活动记录类,而且创建一个操作及一个视图. 贯穿整个章节,你将 ...

  3. YII2数据库依赖缓存

    首先配置一下缓存,自己选择是用文件缓存还是数据库缓存等. 'cache' => [ 'class' => 'yii\caching\FileCache', ], 然后就可以通过 Yii:: ...

  4. yii2 数据库操作(转)

    开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.php),DSN( Data Source Name ...

  5. YII2数据库操作出现类似Database Exception – yii\db\Exception SQLSTATE

    yii2安装后,连接数据库,必须要安装pdo_mysql扩展

  6. Yii2 数据库操作汇总

    对象操作 查询 //1.简单查询 $admin=Admin::model()->findAll($condition,$params); $admin=Admin::model()->fi ...

  7. Yii2 数据库查询汇总

    1.基础查询 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find( ...

  8. yii2 数据库操作详解(转载)

    开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.php),DSN( Data Source Name ...

  9. yii2数据库简单操作

    1.简单查询: one(): 根据查询结果返回查询的第一条记录. all(): 根据查询结果返回所有记录. count(): 返回记录的数量. sum(): 返回指定列的总数. average():  ...

随机推荐

  1. nodejs 环境安装

    参考网站 http://www.runoob.com/nodejs/nodejs-http-server.html https://github.com/nodesource/distribution ...

  2. Go语言之闭包

    闭包的最初目的是为了减少全局变量,在函数调用过程中,隐式的传递共享变量. 但这样的编辑,带来的坏处是不够直接清晰. 所以,如非必要,不要使用. 对象是附有行为的数据,它在类中集中定义, 而闭包是附有数 ...

  3. jQuery数字滚动(模拟网站人气、访问量递增)原创

    插件描述:实现数字上下滚动,模拟网站人气.访问量递增的动画效果,兼容性如下: 使用方法 $(el).runNum(val,params);   参数详解 val:数值型(默认70225800): pa ...

  4. javascript 对象(四)

    一.对象概述 对象中包含一系列的属性,这些属性是无序的.每个属性都有一个字符串key和对应的value. var obj={x:1,y:2}; obj.x; obj.y; 1.为什么属性的key必须是 ...

  5. Java集合源码学习(一)Collection概览

    1.集合框架 Java集合框架包含了大部分Java开发中用到的数据结构,主要包括List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Coll ...

  6. Windows 7 编译64位boost库

    1. 官网下载boost 2. 解压boost到D:\Library\boost_1_64_0 3. 打开 VS2015 x64 本机工具命令提示符,输入 "d:" 回车,再输入 ...

  7. Genius ACM

    题解: 发现匹配一定会选最大和最小匹配,确定左右端点之后nlogn排序后算 比较容易想到二分 最坏情况每次1个 $n^2*(logn)^2$ 没错暴力的最差复杂度是$n^2*logn$的 发现长度与次 ...

  8. 【UOJ 209】【UER #6】票数统计

    题解: jls的题目还是比较好的 首先比较显然我们可以分析出 当x<y时,显然只能满足前缀条件 针对这一档部分分,是个简单的组合数 考虑一下后缀限制,发现真的不好搞.. 看了题解发现,枚举总共的 ...

  9. Storm——Android SQLite数据库管理类库

    Storm是一个Android SQLite数据库管理类库,可以通过注解创建表和迁移数据库.它不是ORM框架.   特性: 1.通过@Annotations创建表: 2.通过@Annotations迁 ...

  10. Oracle impdp的ignore及 fromuser / touser 功能

    作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:http://www.eygle.com/archives/2009/09/oracl ...