# Yii2模型
[TOC]
模型需要继承自`yii\db\ActiveRecord`。
## 普通SQL查询
使用PDO的占位符方式,防止sql注入。
```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();
}
}
```
## 使用模型连贯操作
### 查询所有数据
获取`article`表中所有数据。
```php
$articles = Article::find()->all();
```
### 条件限制获取数据
以下查询`id`为数据表主键。
#### 查询单条数据
我们可以使用`where()`进行条件拼接查询也可以通过`findOne()`方法进行查询。
```php
$article = Article::find()->where(['id'=>5])->one();
$article = Article::findOne(5);
$article = Article::findOne(['id'=>5]);
```
#### 查询`id`为`3`、`4`和`5`的数据
使用`findAll()`方法进行查询。
```php
$articles = Article::findAll([3,4,5]);
```
#### 查询大于`3`的数据
```php
$articles = Article::find()->where(['>','id',3])->all();
```
#### 查询大于`2`且小于`5`的数据
```php
$articles = Article::find()->where(['between','id',2,5])->all();
```
#### 模糊查询
根据其他字段进行模糊查询,如根据`title`字段进行模糊查询。
```php
$articles = Article::find()->where('like','title','模糊')->all();
```
### 将查询数据对象转成数组
在Laravel框架中,我们可以在使用连贯查询的时候使用`toArray()`方法将查询的数据对象转换成数组,方便使用。
那么在Yii2中,我们可以使用`asArray()`得到同样的效果。当然,如果查询的数据量比较大的话这样做能节省服务器内存,如:
```php
$article = Article::find()->asArray()->all();
```
### 模型数据的新增
通过`add()`或者`save()`方法将数据写入到数据表,执行成功后它们返回的都是`true`。
```php
public function actionCreate()
{
$article = new Article;
$article->title = 'insert title';
$article->views = 12;
$article->save(); // 也可以使用 $article->add();
// 获取写入的数据id
$id = $article->attributes['id'];
}
```
### 模型数据的删除
#### 删除单条数据
```php
$article = Article::findOne(10);
$article->delete();
```
> 成功返回1。
#### 删除多条数据
```php
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()`方法做同样的操作。如下:
```php
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。
```php
Article::updateAllCounters(['views'=>1],['id'=>9]);
```
> `updateAllCounters()`的第二个参数一定要指定,否则将出现当前表全部被更新的情况。
[TOC]
- 开始
- Yii2开发小技巧
- Yii2使用不同的方式进行邮件发送逻辑处理
- Yii2 Serialization of 'Closure' is not allowed 错误
- Yii创建应用
- Yii应用结构和流程
- Yii的路径别名
- Yii的请求
- Yii的响应
- Sessions 和 Cookies
- Yii自定义全局工具函数
- Yii2模型
- Yii2视图
- Yii2控制器
- 大数据节省内存处理
- 关联查询hasMany、hasOne
- Yii2 URL地址美化
- Yii2整合AdminLTE后台主题
- Yii2模型中的场景
- Yii2中的RBAC
- Yii2项目后台整合yii2-admin模块
- RBAC集成AdminLTE后台主题对菜单进行控制
- Yii2自定义Gii模板
- 修复AdminLTE引用外部字体文件导致访问变慢的情况
- Yii2事件简单使用
- Yii2模型事件
- Yii2使用GridView新增操作按钮
- Yii2向loyout模板文件中传值
- Yii2数据缓存
- Yii2缓存
- Yii2数据缓存之增删改查
- Yii2拓展
- Yii2日期时间插件-datetimepicker
- kartik-v/yii2-widget-fileinput上传插件