暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【干货】PHP处理-数据库迁移工具Phinx

Laravel技术社区 2022-02-17
573


文档地址:https://tsy12321.gitbooks.io/phinx-doc/content


1.安装

    composer require nhzex/think-phinx


    2.执行

      php vendor/bin/phinx

      直接运行 php vendor/bin/phinx init
       可生成配置文件
      另外一种方法是直接使用php文件做配置文件

      直接运行 php vendor/bin/phinx init 可生成配置文件 
      另外一种方法是直接使用php文件做配置文件


      3.使用phinx.php
      进行配置

        <?php
        $config = array(
        'DB_HOST' => 'localhost',
        'DB_NAME' => 'root',
        'DB_USER' => 'root',
        'DB_PWD' => '',
        );
        $settings = $config;


        #phinx.php
        <?php
        require 'db_config.php';
        return array(
        "paths" => array(
        "migrations" => "db/migrations",
        "seeds" => "db/seeds"
        ),
        "environments" => array(
        "defaut_migration_table" => "phinxlog",
        "default_database" => "lleg",
        "default_environment" => "development"
        "production" => array(
        "adapter" => "mysql",
        "host" => $settings["DB_HOST"],
        "name" => $settings["DB_NAME"],
        "user" => $settings["DB_USER"],
        "pass" => $settings["DB_PWD"],
        "port" => 3306,
        "charset" => "utf8"
        ),
        "development" => array(
        "adapter" => "mysql",
        "host" => $settings["DB_HOST"],
        "name" => $settings["DB_NAME"],
        "user" => $settings["DB_USER"],
        "pass" => $settings["DB_PWD"],
        "port" => 3306,
        "charset" => "utf8"
        )
        )
        );
        4.执行 php vendor/bin/phinx status 
        查看连接状态
        5.执行 php vendor/bin/phinx create Migration
        6.现在生成了created db/migrations/20180310020523_migration.php
        编辑这个文件,添加数据库创建内容.
          public function change() {
          $user = $this->table('user');
          $user->addColumn('open_id', 'string', ['limit'=>64]);
          $user->addColumn('register_time', 'timestamp', ['default' => 'CURRENT_TIMESTAMP']);
          $user->addColumn('favorite_music', 'integer', ['default'=> 0, 'comment'=>'喜欢的音乐']);
          $user->addColumn('favorite_vedio', 'integer', ['default'=> 0, 'comment'=>'喜欢的视频数']);
          $user->addColumn('favorite_article', 'integer', ['default'=> 0, 'comment'=>'喜欢的文章数']);
          $user->addColumn('baby_birthday', 'date', ['null'=>true, 'comment'=>'宝宝生日']);
          $user->addColumn('baby_sex', 'boolean', ['null'=>true, 'comment'=>'宝宝性别']);
          $user->addColumn('last_login', 'datetime', ['null'=>true, 'comment'=>'最后登陆日期']);
          $user->save();
          }
          7.默认会添加一个自增id,作为主键
          执行 php vendor/bin/phinx migrate

          8.初始化数据

          执行 php vendor/bin/phinx seed:create CategorySeeder

          系统自动创建 created ./db/seeds/CategorySeeder.php
          9.修改 CategorySeeder.php
          执行 php vendor/bin/phinx seed:run
          将会进行所有Seed
          10.如果想运行指定的Seed需要用- s
          参数指定
          php vendor/bin/phinx seed:run -s CategorySeeder

          11.更新表结构

          当需要更新表结构的时候,需要再创建一个migrate
          执行
          php vendor/bin/phinx create ChangeArtist

          再将需要更新的内容写到change
          函数


            public function change() {
            $this->execute('alter table resource drop column artist ;');
            $resource = $this->table('resource');
            $resource->addColumn('artist', 'string', ['limit'=>128, 'default'=>'']);
            $resource->update();
            }

            最后执行php vendor/bin/phinx migrate

            之前的已经执行过的migrate不会执行, 只会执行更新的部分。


            12.回滚

              php vendor/bin/phinx rollback


              13.数据填充

                php vendor/bin/phinx seed:create UserSeeder
                php vendor/bin/phinx seed:run -e product

                生成文件

                  <?php


                  use Phinx\Seed\AbstractSeed;


                  class UserSeeder extends AbstractSeed {
                      /**
                       * 插入数据
                       */
                      public function run() {
                          $data = array(
                            array(
                                'id'    => 1,
                            ),
                            array(
                                'id'    => 2,
                            )
                          );
                          $posts = $this->table('users');
                          $posts->insert($data)->save();
                      }
                  }


                  phinx特别适合在开发,测试,线上数据库同步字段信息,数据信息,生成和同步测试数据等,所以特别适合在团队开发流程中使用,尤其是对于一个新项目,只要在项目的开始就一直坚持使用phinx独立部署,那么每次变更数据库表信息团队成员都可以通过git或者svn的方式同步代码然后执行上面提到的执行命令来同步库表信息,以此避免传统开发时不同开发环境同步库表信息的繁琐和失误的情况。
                  在phinx.php 有一个配置项”default_migration_table” => “phinxlog” 这里是记录变更记录的,这也是保障不会重复执行的一个措施,所以不用担心丢失或者重复操作执行命令。

                  看完本文有收获?点赞、分享是最大的支持!


                  文章转载自Laravel技术社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论