Yii2的无编程migrate示例

认识老是在不断进步的,其实事情远远没有这么复杂,咱们只须要安装一个插件就够了:php

composer require -dev --prefer-dist insolita/yii2-migration-generator:~2.3

而后你只须要访问Yii的gii页面,就能够从原有的数据库里自动导出migrate文件了。不过如下方法依然有用,就是在你建立一个新的数据库表的时候。html


关于Yii2的migrate使用的文章网上已有很多,但不少已经旧了,大量的仍是教你如何编写代码,但实际上最新版Yii2的migrate能够尽可能减小编写代码的工做,至少能够减小编写php代码而只经过命令行的方式就能达到目的。mysql

咱们直接分析如下命令行:linux

./yii migrate/create create_fac_item_table --fields="idfac_item:primaryKey,item_name:string(12):notNull,fac_id:integer:notNull:foreignKey(facility idfacility)"

虽然看上去很长,可是想清楚了写出来仍是不难的。它分为这么几个部分:sql

  1. ./yii,这是linux下的标准执行命令,没什么好说的。数据库

  2. migrate/create,前面migrate这是Yii2里执行migrate的标准命令,后面create是说明咱们要建立一个新的migrate文件。yii2

  3. create_fac_item_table,这里create_xxx_table是一个标准格式,就是说咱们要建立的这个migrate文件要完成的任务是建立名称为xxx的数据库表,我这里要建立的表的名称是fac_item,因此是这种格式。app

  4. --fields="",引号里的内容详细说明了咱们要建立的这张数据库表中的字段名称及类型等。下面详细说明:composer

  5. idfac_item:primaryKey,这个地方的意思是说这个表的主键名称为idfac_itemyii

  6. item_name:string(12):notNull,这是第2个字段,它是一个string类型,长度为12,不容许为空

  7. fac_id:integer:notNull:foreignKey(facility idfacility),这是第3个字段,它是一个数字型,非空,而且还有一个外键,链接到一个名称为facility的数据库表,链接的主键名称为idfacility,中间以空格区格。

所有写好以后回车,它会问你是否要执行,以下:

Yii Migration Tool (based on Yii v2.0.12-dev)

Create new migration '/Library/WebServer/Documents/project/console/migrations/m170602_002220_create_fac_item_table.php'? (yes|no) [no]:yes
New migration created successfully.

它会自动在console/migrations下生成一个新的.php文件,以下:

<?php
use yii\db\Migration;

class m170602_002220_create_fac_item_table extends Migration
{
    public function up()
    {
        $this->createTable('fac_item', [
            'idfac_item' => $this->primaryKey(),
            'item_name' => $this->string(12)->notNull(),
            'fac_id' => $this->integer()->notNull(),
        ]);

        // creates index for column `fac_id`
        $this->createIndex(
            'idx-fac_item-fac_id',
            'fac_item',
            'fac_id'
        );

        // add foreign key for table `facility`
        $this->addForeignKey(
            'fk-fac_item-fac_id',
            'fac_item',
            'fac_id',
            'facility',
            'idfacility',
            'CASCADE'
        );
    }

    public function down()
    {
        // drops foreign key for table `facility`
        $this->dropForeignKey(
            'fk-fac_item-fac_id',
            'fac_item'
        );

        // drops index for column `fac_id`
        $this->dropIndex(
            'idx-fac_item-fac_id',
            'fac_item'
        );

        $this->dropTable('fac_item');
    }
}

up和down的做用就不详细解释了,官方文档有详细解释,大意是说up是向上执行,down让你有个后悔的余地。

缺省状况下,你的console/migrations目录下应该还有另一个关于user表的建立文件,因此若是你如今就执行./yii migrate的话,它会问你是否要执行全部的操做:

Yii Migration Tool (based on Yii v2.0.12-dev)

Total 2 new migrations to be applied:
    m130524_201442_init
    m170602_002220_create_fac_item_table

Apply the above migrations? (yes|no) [no]:no

在这里,咱们选择no,由于咱们数据库里已经有user这张表了,不须要再建立一遍,咱们须要标记一下,免得它之后老问咱们这个问题:

./yii migrate/mark m130524_201442_init

而后再执行./yii migrate

Yii Migration Tool (based on Yii v2.0.12-dev)

Total 1 new migrations to be applied:
    m170602_002220_create_fac_item_table

Apply the above migrations? (yes|no) [no]:yes
*** applying m170602_002220_create_fac_item_table
    > create table fac_item ... done (time: 0.555s)
    > create index idx-fac_item-fac_id on fac_item (fac_id) ... done (time: 0.649s)
    > add foreign key fk-fac_item-fac_id: fac_item (fac_id) references facility (idfacility) ... done (time: 0.529s)
*** applied m170602_002220_create_fac_item_table (time: 1.986s)


1 migration were applied.

Migrated up successfully.

用mysql workbench检查数据库,发现表已成功创建:

clipboard.png

外键也是正确的:

clipboard.png

我这里举的例子只是建立数据库表,其它好比删除数据库表,添加字段,删除字段等工做均可以用这种命令行的方式完成,具体就不细讲了,你们能够去参考Yii2的官方文档

相关文章
相关标签/搜索