[TOC]
# ActiveRecord 类型的增删改查
![](https://box.kancloud.cn/cf49bc0b6bc8f878239763b95c3c2434_635x470.png)
![](https://box.kancloud.cn/d9112de485bc6d16b757408291e8cb56_514x410.png)
![](https://box.kancloud.cn/84867356fc564a9be8e860af333d4104_326x141.png)
# Query查询数据
![](https://box.kancloud.cn/b0aa99bb73fe924bc2cd03d5da024bd6_603x306.png)
# db进行查询
![](https://box.kancloud.cn/b8ec7e4a7a2bb0b7f2b85daf9b1d5628_667x562.png)
# 在更新前执行
要判断父类有没有成功
![](https://box.kancloud.cn/124d9b0db9c6cb0a38baafc24794c334_505x336.png)
# 普通sql查询
使用PDO的占位符方式,防止sql注入。
~~~
<?php
namespace app\controllers;
use app\models\Article;
use yii\web\Controller;
class HomeController extends Controller
{
public function actionIndex()
{
$id = \Yii::$app->request->get('id');
$sql = 'select * from article where id=:id';
$articles = $article = Article::findBySql($sql,[':id'=>$id])->all();
}
}
~~~
### 条件限制获取数据
以下查询`id`为数据表主键。
#### 查询单条数据
我们可以使用`where()`进行条件拼接查询也可以通过`findOne()`方法进行查询。
~~~
$article = Article::find()->where(['id'=>5])->one();
$article = Article::findOne(5);
$article = Article::findOne(['id'=>5]);
~~~
#### 查询`id`为`3`、`4`和`5`的数据
使用`findAll()`方法进行查询。
~~~
$articles = Article::findAll([3,4,5]);
~~~
#### 查询大于`3`的数据
~~~
$articles = Article::find()->where(['>','id',3])->all();
~~~
#### 查询大于`2`且小于`5`的数据
~~~
$articles = Article::find()->where(['between','id',2,5])->all();
~~~
#### 模糊查询
根据其他字段进行模糊查询,如根据`title`字段进行模糊查询。
~~~
$articles = Article::find()->where('like','title','模糊')->all();
~~~
### 将查询数据对象转成数组
在Laravel框架中,我们可以在使用连贯查询的时候使用`toArray()`方法将查询的数据对象转换成数组,方便使用。
那么在Yii2中,我们可以使用`asArray()`得到同样的效果。当然,如果查询的数据量比较大的话这样做能节省服务器内存,如:
~~~
$article = Article::find()->asArray()->all();
~~~
### 模型数据的新增
通过`add()`或者`save()`方法将数据写入到数据表,执行成功后它们返回的都是`true`。
~~~
public function actionCreate()
{
$article = new Article;
$article->title = 'insert title';
$article->views = 12;
$article->save(); // 也可以使用 $article->add();
// 获取写入的数据id
$id = $article->attributes['id'];
}
~~~
### 模型数据的删除
#### 删除单条数据
~~~
$article = Article::findOne(10);
$article->delete();
~~~
> 成功返回1。
#### 删除多条数据
~~~
Article::deleteAll('id=7'); // 删除id=7的数据
Article::deleteAll('id=:id',[':id'=>7]); // 同上
Article::deleteAll('id>:id',[':id'=>10]); // 删除id>10的数据
Article::delteteAll('id>:id AND views < :views',[':id'=>10,':views'=>100]); // 删除id>10并且查看次数小于100。
~~~
### 模型数据的修改
通过`update()`方法将数据更新到数据表,同时也可通过`save()`方法做同样的操作。如下:
~~~
public function actionUpdate()
{
$article = Article::findOne(9);
$article->title = 'update title';
// $res = $article->update(); // 成功返回 1
$res = $article->save(); // 成功返回 true
}
~~~
#### 更新数据表某个字段
更新`id = 9`的数据的`views`字段+1。成功返回1,失败返回0。
~~~
Article::updateAllCounters(['views'=>1],['id'=>9]);
~~~
> `updateAllCounters()`的第二个参数一定要指定,否则将出现当前表全部被更新的情况。
- 目录
- 配置
- 简介
- 别名
- gii
- 配置项
- 模型
- 简介
- 增删改查
- AR和model
- 模型事件
- 场景
- query查询
- 增删改
- AR查询器
- 模型关系定义
- AR模型连表查询
- fields
- where拼接
- 模块
- 创建模块
- 控制器
- 表单
- 跳转
- 响应
- 验证器
- Action
- 组件
- url
- 分页
- 验证码
- 缓存
- 文件上传
- 预启动组件
- 事件
- 自定义组件
- redis
- 日志
- 行为
- cookie和session
- 基础知识
- 创建一个类
- 配置一个类
- object基类
- component组件类特性
- phpstorm无法更改php等级
- url地址美化
- 过滤器
- 请求处理
- 请求组件
- 响应组件
- header
- 用户登录
- 实现IdentityInterface接口
- 登录
- 自动检测登录
- 获取用户信息
- 访问行为追踪
- phpstorm+postman断点调试