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

Yii2 ActiveRecord 完整實戰:資料庫配置、Gii 代碼生成、Migration 遷移、關聯查詢

     編輯:PHP 綜合知識

Yii2 的 ActiveRecord (AR) 是操作數據庫的核心層。本文串聯從資料庫配置、Gii 自動生成模型/CRUD、Migration 版本控制到日常 AR 用法的完整工作流。

1. 資料庫配置 config/db.php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=yii2basic',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
    // 生產環境建議開啟
    'enableSchemaCache' => true,
    'schemaCacheDuration' => 3600,
    'schemaCache' => 'cache',
];

2. Gii 代碼生成器(可視化建模)

  1. 訪問 https://localhost/basic/web/index.php?r=gii
  2. Model Generator:輸入表名、模型類名、勾選「生成關聯」→ 預覽 → 生成 models/TableName.php
  3. CRUD Generator:基於模型生成 Controller、View、搜索模型、數據提供者 → 即得完整後台管理頁

3. Migration 資料庫版本控制

修改表結構(加欄位、改索引、建表)一律寫 Migration,禁止手動操作生產庫。

# 創建遷移文件
./yii migrate/create "add_book_desc_column"

# 生成 migrations/m150225_022640_add_book_desc_column.php
class m150225_022640_add_book_desc_column extends Migration {
    public function up() {
        $this->addColumn('book', 'book_desc', $this->text());
    }
    public function down() {
        $this->dropColumn('book', 'book_desc');
    }
}

# 執行遷移
./yii migrate

# 回滾最後一條
./yii migrate/down

4. AR 日常核心用法速查

操作代碼
查單條Book::findOne(10) / Book::find()->where(['id'=>10])->one()
查列表Book::find()->where(['status'=>1])->orderBy('id DESC')->all()
分頁new ActiveDataProvider(['query'=>Book::find(), 'pagination'=>['pageSize'=>20]])
新增$m=new Book; $m->title='...'; $m->save();
更新Book::updateAll(['status'=>0], ['id'=>5])
刪除Book::deleteAll(['<','id',10])
關聯急切加載Book::find()->with('author','categories')->all()
統計Book::find()->count() / sum('price')
事務\Yii::$app->db->transaction(function(){ $m1->save(); $m2->save(); });

5. 關聯定義(模型內)

// Book.php
public function getAuthor() {
    return $this->hasOne(Author::className(), ['id' => 'author_id']);
}
public function getCategories() {
    return $this->hasMany(Category::className(), ['id' => 'category_id'])
                ->viaTable('book_category', ['book_id' => 'id']);
}

最佳實踐清單

  • 所有結構變更走 Migration,Git 管理遷移文件
  • Gii 生成代碼後**務必手動審查**,補充驗證規則 rules()、屬性標籤 attributeLabels()
  • 列表頁統一使用 ActiveDataProvider + GridView/ListView,支援排序、分頁、篩選零代碼
  • 避免在 View 觸發關聯查詢(N+1),控制器預先 with()
  • 大量寫入用 batchInsert() 或事務包裹 insert()

掌握「配置 → Gii → Migration → AR」閉環,即可在團隊協作中實現數據庫結構與代碼的同步演進,消除「線上庫跟代碼不一致」的頂級隱患。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved