首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Yii 2 數據庫增刪改查(CRUD)操作完整總結

     編輯:PHP 相關知識

Yii 2 數據庫增刪改查(CRUD)操作完整總結

Yii 2 提供 ActiveRecord(模型)、Query Builder、DAO 三層封裝。本文匯總最常用的增刪改查寫法,適合作為開發速查表。

1. ActiveRecord(模型)風格

新增

// 方式一:實例化 + save()
$user = new User();
$user->username = 'phpernote';
$user->password = '123456';
$user->save(); // 返回 bool

// 方式二:create() 靜態方法(批量賦值需 $fillable)
User::create([
    'username' => 'phpernote',
    'password' => '123456',
]);

// 方式三:insert() 明確插入(不觸發驗證/事件)
$user = new User();
$user->username = 'phpernote';
$user->insert();

修改

// 方式一:查詢後修改 + save()
$user = User::findOne(1);
$user->username = 'admin';
$user->save();

// 方式二:updateAll() 條件批量更新
User::updateAll(['username' => 'admin'], 'id = 1');

// 方式三:updateCounters() 數值字段原子增減
User::updateCounters(['login_count' => 1], 'id = 1'); // +1
User::updateCounters(['login_count' => -1], 'id = 1'); // -1

刪除

// 方式一:模型實例 delete()
$user = User::findOne(1);
$user->delete();

// 方式二:deleteAll() 條件批量刪除
User::deleteAll('id IN (1,2,3)');

// 方式三:deleteByPk() 主鍵刪除(單個或數組)
User::deleteByPk(1);
User::deleteByPk([1, 2, 3]);

查詢

User::findOne(1);                    // 主鍵查單條
User::find()->where(['status' => 1])->all(); // 條件查多條
User::find()->where(['status' => 1])->one(); // 條件查單條
User::find()->count();               // 計數
User::find()->select(['id', 'username'])->column(); // 單列數組

2. Query Builder(查詢構建器)

use yii\db\Query;

$rows = (new Query())
    ->select(['id', 'username'])
    ->from('user')
    ->where(['status' => 1])
    ->orderBy('id DESC')
    ->limit(10)
    ->all();

$count = (new Query())->from('user')->where(['status' => 1])->count();

3. DAO(底層 SQL)

$cmd = Yii::$app->db->createCommand();

// 查詢
$rows = $cmd->queryAll('SELECT * FROM user WHERE status=1');
$row  = $cmd->queryOne('SELECT * FROM user WHERE id=1');
$col  = $cmd->queryColumn('SELECT username FROM user');
$scalar = $cmd->queryScalar('SELECT COUNT(*) FROM user');

// 寫入
$cmd->insert('user', ['username' => 'test', 'password' => '123'])->execute();
$cmd->update('user', ['username' => 'new'], 'id=1')->execute();
$cmd->delete('user', 'id=1')->execute();

// 事務
Yii::$app->db->transaction(function ($db) {
    $db->createCommand()->insert('user', ['username' => 'a'])->execute();
    $db->createCommand()->insert('user', ['username' => 'b'])->execute();
});

4. 關鍵差異對比

特性ActiveRecordQuery BuilderDAO
易用性最高中低
性能較低(事件/驗證)高最高
關聯查詢原生支援手寫 JOIN手寫 SQL
批量操作updateAll/deleteAll批量構建批量 SQL
適用場景業務邏輯層複雜報表/統計底層優化/遷移

5. 進階技巧

  • 批量插入:Yii::$app->db->createCommand()->batchInsert('user', ['username', 'password'], $data)->execute()
  • 悲觀鎖:User::findOne(1, ['lock' => true])(SELECT ... FOR UPDATE)
  • 樂觀鎖:模型添加 version 字段,optimisticLock() 返回字段名。
  • 讀寫分離:配置 db 組件的 slaveConfig,Yii::$app->db->slave 獲取從庫連接。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved