资讯专栏INFORMATION COLUMN

Yii2的无编程migrate示例

张红新 / 788人阅读

摘要:它分为这么几个部分,这是下的标准执行命令,没什么好说的。,前面这是里执行的标准命令,后面是说明我们要创建一个新的文件。,引号里的内容详细说明了我们要创建的这张数据库表中的字段名称及类型等。

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

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

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


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

我们直接分析以下命令行:

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

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

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

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

create_fac_item_table,这里create_xxx_table是一个标准格式,就是说我们要创建的这个migrate文件要完成的任务是创建名称为xxx的数据库表,我这里要创建的表的名称是fac_item,所以是这种格式。

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

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

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

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文件,如下:

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检查数据库,发现表已成功建立:

外键也是正确的:

我这里举的例子只是创建数据库表,其它比如删除数据库表,添加字段,删除字段等工作都可以用这种命令行的方式完成,具体就不细讲了,大家可以去参考Yii2的官方文档。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23069.html

相关文章

  • YII2快速学习笔记

    摘要:高性能始终是的首要目标之一。版是上代的老版本,现在处于维护状态。版是一个完全重写的版本,采用了最新的技术和协议,包括依赖包管理器代码规范命名空间特质等等。所以,我们学习版本。启用本镜像服务系统全局配置即将配置信息添加到的全局配置文件中。 工作中需要用到YII框架,于是乎,系统的学习下这套框架,详细教程请看考该站完整系列:YII2教程 一、YII简介 1、什么是YII Yii 是一个高性...

    kbyyd24 评论0 收藏0
  • Yii2系列教程七:Behaviors And Validations

    摘要:原文来自这一篇文章的开头就无需多言了,紧接着上一篇的内容和计划,这一篇我们来说说的和。,那既然这样,我们就来实现一下呗。所以我们首先需要将表中的几条数据删掉。下一节再详细讲讲吧,这一节写下来貌似要说的实在有点多。 原文来自:https://jellybool.com/post/programming-with-yii2-behaviors-and-validat... 这一篇...

    fasss 评论0 收藏0
  • 打通Laravel和Yii2任督二脉

    摘要:于是直接暴力开干,找说明书查询。测试登录,果然不通。一般情况下,这时候应该遵照官方手册,开始建立自己相配套的数据库体系。数据库是连通了,出现了熟悉的错误找不到表。登入登出完全正常,终于可以和和和美美地住在一个小房子里了。 Yii2与Laravel相爱相杀已经很久了,导致广大PHP爱好者必须选边站队,生怕自己站错了阵营。作为一个已经上了Yii2贼船很久的人想换船是需要很大勇气的,能不能就...

    kohoh_ 评论0 收藏0
  • Yii2 restful接口方式开发,权限控制(yii2-rest-rbac)

    摘要:根据修改,只是方式,这个相当于的版本。适合用于前后端分离项目,方式提供接口,实现对接口的权限控制。 根据yii2-admin(https://github.com/mdmsoft/yi...)修改,yii2-admin只是web方式,这个相当于yii2-admin的rest版本。适合用于前后端分离项目,rest方式提供接口,实现对接口的权限控制。项目地址:https://github....

    whataa 评论0 收藏0
  • Yii2系列教程五:简单的用户权限管理

    摘要:原文来自上一篇文章讲了用户的注册,验证和登录,这一篇文章按照约定来说说之中的用户和权限控制。探寻上面的一些列设置和代码更改,已经实现了一小部分的用户控制登录的用户才能发表。 原文来自: https://jellybool.com/post/programming-with-yii2-user-access-controls 上一篇文章讲了用户的注册,验证和登录,这一篇文章按照...

    livem 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<