YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解

YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解

什么是YIIC migrate

YIIC migrate 可以帮助我们快速创建数据库表,其本质是一个命令行工具,通过对我们创建好的数据库模型文件进行分析和对比,自动创建出对应的数据表,便于我们快速搭建应用。

如何使用YIIC migrate

1. 创建数据表

我们首先需要创建好数据表的设计模型,以及相关的模型文件,我们通常将模型文件存放在app/protected/models/下,并且文件的命名应该与表名一致。

例如,我们希望创建一个user表,那么我们需要创建一个User.php文件,并且在其中使用YII ActiveRecord定义好表结构。

class User extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return 'tbl_user';
    }

    public function rules()
    {
        return array(
            array('username, password', 'required'),
            array('username', 'unique'),
            array('username, password', 'length', 'max'=>255),
        );
    }

    public function attributeLabels()
    {
        return array(
            'id' => 'ID',
            'username' => '用户名',
            'password' => '密码',
        );
    }
}

定义好模型之后,我们需要在app/protected/config/console.php文件中配置好数据库连接,以便migrate能够连接到正确的数据库。

return array(
  'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
  'name'=>'My Console Application',

  //定义相关组件和模块

  'components'=>array(
    'db'=>array(
      'connectionString' => 'mysql:host=localhost;dbname=mydatabase',
      'emulatePrepare' => true,
      'username' => 'myusername',
      'password' => 'mypassword',
      'charset' => 'utf8',
    ),
  ),
);

在完成以上两个步骤后,我们就可以使用以下命令来创建用户表:

$ yiic migrate create create_user_table

其中,create_user_table是我们自定义的表名,此时命令会在app/protected/migrations/下创建一个名为mxx_create_user_table.php的文件,其中xx代表创建迁移文件的时间戳。

编辑该文件,并在up()函数中添加对应的创建表的sql语句:

class m200601_000000_create_user_table extends CDbMigration
{
    public function up()
    {
        $this->createTable('tbl_user', array(
            'id' => 'pk',
            'username' => 'string NOT NULL',
            'password' => 'string NOT NULL',
        ));
    }

    public function down()
    {
        $this->dropTable('tbl_user');
    }
}

执行以下命令即可自动创建对应的数据表:

$ yiic migrate

2. 修改表结构

在修改之前,我们需要先查询出当前数据库中已有的迁移文件:

$ yiic migrate history

通过这个命令,我们可以查询出数据库中已有的迁移文件,以便于我们知道当前数据库的状态。

接着,我们使用以下命令创建修改迁移文件:

$ yiic migrate create modify_user_table

编辑名为mxx_modify_user_table.php的文件,在up()函数中添加以下代码:

class m200601_000001_modify_user_table extends CDbMigration
{
    public function up()
    {
        $this->addColumn('tbl_user', 'email', 'string');
    }

    public function down()
    {
        $this->dropColumn('tbl_user', 'email');
    }
}

我们可以在该文件中添加任意的修改表结构的sql语句,最后执行以下命令即可完成修改:

$ yiic migrate

migrate 常用命令

创建新的 migration 文件

yiic migrate create <migration_name>

其中,<migration_name> 为你所需的迁移文件命名。

执行所有的 migration 文件

yiic migrate

执行该命令将会对所有未执行的 migration 文件进行执行,需要注意的是,YII的 migration 是自动记忆已执行的文件的,所以对于已经执行的文件,不需要再执行一次。

回滚 migration

yiic migrate down <step>

其中,<step> 指代需要回滚的 migration 文件的数量,默认值为1,也就是回滚上一步 migration。需要注意的是,如果执行回滚操作后,某个 migration 文件被回滚,那么该 migration 文件之后的所有 migration 文件都将需要重新执行。

查看已执行的 migration 文件列表

yiic migrate history

执行该命令将会查询出已经执行过的 migration 文件列表,以便于我们知道当前的数据库状态。

总结

本文主要介绍了YIIC migrate的基本用法,以及相关命令的使用方法,通过本文的学习,我们可以快速掌握 migrate 的使用方法,同时避免出现很多常见的数据表结构问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 手动搭建redis集群(3台)

    1.搜索源中的redis包 apt-cache pkgnames | grep redis 2.安装redis-server apt-get install redis-server 根据端口号配置redis并开启集群配置 1.复制redis配置文件 cp redis.conf nodes7000.conf 2.搜索cluster-enabled变量 并设置…

    Redis 2023年4月12日
    00
  • MySQL 数据库跨操作系统的最快迁移方法

    MySQL 数据库跨操作系统的迁移主要涉及到以下几个步骤: 导出原始数据库的数据和结构 在目标系统上部署 MySQL 导入以前导出的数据库内容 以下是更详细的每个步骤: 步骤一:导出原始数据库的数据和结构 在原始 MySQL 数据库所在的系统上执行以下命令: mysqldump -u username -p database_name > backup…

    database 2023年5月22日
    00
  • 一文分析SQL Server中事务使用的锁

    下面是详细讲解“一文分析SQL Server中事务使用的锁”的完整攻略。 1. 什么是事务? 在数据库中,一个事务指的是一组数据库操作(比如插入、更新、删除等),这些操作要么全部执行,要么全部不执行。如果有任何一个操作失败,则整个事务就会回滚(撤销)。事务可以确保数据库的完整性,并且可以为多个用户提供并发性。 2. SQL Server 中的锁机制 SQL …

    database 2023年5月21日
    00
  • SQL中字符串中包含字符的判断方法

    下面是SQL中字符串中包含字符的判断方法的完整攻略: 1. LIKE操作符的使用 在SQL中进行字符串比较时,LIKE操作符是非常常用的一种操作符,用于匹配指定的字符串模式。其中,’%’和’_’是两个特殊的通配符,%表示零个或多个字符,_表示一个字符。通过LIKE操作符,我们可以判断一个字符串中是否包含某个字符。 例如,我们想要查询包含字母’o’的所有单词。…

    database 2023年5月21日
    00
  • [Go] redis分布式锁的go-redis实现

    在分布式的业务中 , 如果有的共享资源需要安全的被访问和处理 , 那就需要分布式锁 分布式锁的几个原则; 1.「锁的互斥性」:在分布式集群应用中,共享资源的锁在同一时间只能被一个对象获取。 2. 「可重入」:为了避免死锁,这把锁是可以重入的,并且可以设置超时。 3. 「高效的加锁和解锁」:能够高效的加锁和解锁,获取锁和释放锁的性能也好。 4. 「阻塞、公平」…

    Redis 2023年4月11日
    00
  • 利用reverse索引优化like语句的方法详解

    利用 Reverse 索引优化 Like 语句的方法详解 一、问题引入 在数据库查询语句中,Like 语句是非常常见的一种查询方式。但是,在查询过程中,Like 语句的性能是很有挑战性的,通常会造成很大的性能瓶颈。为了解决这个问题,我们可以使用 Reverse 索引来优化 Like 语句的性能。 二、什么是 Reverse 索引 Reverse 索引是指,对…

    database 2023年5月19日
    00
  • Mysql 如何查询时间段交集

    当我们需要查询两个时间段是否有交集时,可以使用 MySQL 中的 BETWEEN 运算符及逻辑运算符 AND,在查询时指定两个时间段,通过两个时间段的开始时间和结束时间来判断两个时间段是否存在交集。 以下是查询时间段交集的完整攻略: 1. 确认时间段字段 在进行查询时间段交集之前,首先需要确认所查询的表中存在两个时间段字段,例如:开始时间(start_tim…

    database 2023年5月22日
    00
  • SQL中表锁定(LOCK、UNLOCK)的具体使用

    SQL中的表锁定可以通过LOCK和UNLOCK语句实现,这可以保证在操作表的过程中并发执行的安全性。 LOCK和UNLOCK语句简介 LOCK语句 LOCK语句可以锁定指定的表,包括读锁和写锁(也称共享锁和排它锁)。 根据应用场景不同,可以使用以下两种方式: LOCK TABLE tablename READ:对指定表加读锁,可以允许其他事务通过SELECT…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部