# 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上傳插件