[TOC]
# ActiveRecord 類型的增刪改查



# Query查詢數據

# db進行查詢

# 在更新前執行
要判斷父類有沒有成功

# 普通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斷點調試