讨论
为什么使用迁移文件来创建数据库?
- 对数据库的变更操作有日志记录。
- 便于生成一对多和多对多结构的数据库。
新建数据库
请参考 http://www.yiiframework.com/doc-2.0/guide-db-migrations.html
- 编写数据库迁移文件
- 应用迁移文件,创建数据库
- 生成Model
案例:Restaurant & Review
# 添加Restaurant表
yii migrate/create create_restaurant
$this->createTable("restaurant", [
"id" => $this->primaryKey(),
"name" => $this->string(),
"city" => $this->string(),
"province" => $this->string()
]);
yii migrate
# 添加Review表
yii migrate/create create_review
$this->createTable("review", [
"id" => $this->primaryKey(),
"rating" => $this->integer(),
"body" => $this->text()
]);
$this->addColumn("review", "restaurant_id", $this->integer());
$this->createIndex("idx-review-restaurant_id", "review", "restaurant_id");
$this->addForeignKey("fk-review-restaurant_id", "review", "restaurant_id", "restaurant", "id", "CASCADE");
yii migrate
# 生成Model
yii gii/model --tableName=restaurant --modelClass=Restaurant --ns=commonmodels
yii gii/model --tableName=review --modelClass=Review --ns=commonmodels
添加初始数据
- 通过phpMyAdmin
- 通过程序方式
yii migrate/create seed_restaurant_review
$restaurant = new Restaurant();
$restaurant->name = "老乡鸡";
$restaurant->city = "合肥";
$restaurant->province = "安徽省";
$restaurant->save();
$review = new Review();
$review->rating = 9;
$review->body = "真是美味的快餐";
$review->restaurant_id = $restaurant->id;
$review->save();
$review = new Review();
$review->rating = 6;
$review->body = "随便吃吃";
$review->restaurant_id = $restaurant->id;
$review->save();
yii migrate
### 添加字段
yii migrate/create add_reviewer_to_review --fields="reviewer_name:string"
$this->addColumn("review", "reviewer_name", $this->string());
yii migrate
### 修改字段
yii migrate/create alter_reviewer_to_review
$this->alterColumn("review", "reviewer_name", $this->string(100));
yii migrate