如何在PHP项目中使用phinx进行数据迁移和建表

建表

phinx\bin\phinx.bat migrate -e production

建设 phinx.yml文件

paths:
    migrations: %%PHINX_CONFIG_DIR%%\database\migrations
    seeds: %%PHINX_CONFIG_DIR%%\database\seeds

environments:
    default_migration_table: phinxlog
    default_database: development
    production:
        adapter: mysql
        host: localhost
        name: jitamin2
        user: root
        pass: ‘‘
        port: 3306
        charset: utf8

    development:
        adapter: mysql
        host: localhost
        name: development_db
        user: root
        pass: ‘‘
        port: 3306
        charset: utf8

    testing:
        adapter: mysql
        host: localhost
        name: testing_db
        user: root
        pass: ‘‘
        port: 3306
        charset: utf8
%%PHINX_CONFIG_DIR%%\database\migrations下面的文件示例20161222061456_create_users_table.php如下:
<?php

/*
 * This file is part of Jitamin.
 *
 * Copyright (C) Jitamin Team
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

use Phinx\Migration\AbstractMigration;

class CreateUsersTable extends AbstractMigration
{
    /**
     * Change Method.
     */
    public function change()
    {
        $table = $this->table(‘users‘);
        $table->addColumn(‘username‘, ‘string‘, [‘limit‘=>50])
              ->addColumn(‘password‘, ‘string‘, [‘null‘ => true])
              ->addColumn(‘is_ldap_user‘, ‘boolean‘, [‘null‘ => true, ‘default‘ => false])
              ->addColumn(‘name‘, ‘string‘, [‘null‘ => true])
              ->addColumn(‘email‘, ‘string‘)
              ->addColumn(‘google_id‘, ‘string‘, [‘null‘=> true, ‘limit‘ => 30])
              ->addColumn(‘github_id‘, ‘string‘, [‘null‘ => true, ‘limit‘ => 30])
              ->addColumn(‘notifications_enabled‘, ‘boolean‘, [‘null‘ => true, ‘default‘ => false])
              ->addColumn(‘timezone‘, ‘string‘, [‘null‘ => true, ‘limit‘ => 50])
              ->addColumn(‘language‘, ‘string‘, [‘null‘ => true, ‘limit‘ => 5])
              ->addColumn(‘disable_login_form‘, ‘boolean‘, [‘null‘ => true, ‘default‘ => false])
              ->addColumn(‘twofactor_activated‘, ‘boolean‘, [‘null‘ => true, ‘default‘ => false])
              ->addColumn(‘twofactor_secret‘, ‘string‘, [‘null‘ => true, ‘limit‘ => 16])
              ->addColumn(‘token‘, ‘string‘, [‘null‘=> true, ‘default‘ => ‘‘])
              ->addColumn(‘notifications_filter‘, ‘integer‘, [‘null‘ => true, ‘default‘ => 4])
              ->addColumn(‘nb_failed_login‘, ‘integer‘, [‘null‘ => true, ‘default‘ => 0])
              ->addColumn(‘lock_expiration_date‘, ‘biginteger‘, [‘null‘ => true])
              ->addColumn(‘gitlab_id‘, ‘integer‘, [‘null‘ => true])
              ->addColumn(‘role‘, ‘string‘, [‘limit‘ => 25, ‘default‘ => ‘app-user‘])
              ->addColumn(‘is_active‘, ‘boolean‘, [‘null‘ => true, ‘default‘ => true])
              ->addColumn(‘avatar_path‘, ‘string‘, [‘null‘ => true])
              ->addColumn(‘skin‘, ‘string‘, [‘null‘ => true, ‘limit‘=>15])
              ->addIndex([‘username‘], [‘unique‘ => true])
              ->addIndex([‘email‘], [‘unique‘ => true])
              ->create();
    }
}

  

数据迁移命令如下:

phinx\bin\phinx.bat seed:run -e production
%%PHINX_CONFIG_DIR%%\database\seeds下面的文件示例CreateGroupsTable.php如下:
<?php

/*
 * This file is part of Jitamin.
 *
 * Copyright (C) Jitamin Team
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

use Jitamin\Foundation\Security\Role;
use Phinx\Seed\AbstractSeed;

class UserSeeder extends AbstractSeed
{
    /**
     * Run Method.
     */
    public function run()
    {
        $data = [
          [
              ‘username‘    => ‘admin‘,
              ‘password‘    => bcrypt(‘admin‘),
              ‘email‘       => ‘[email protected]‘,
              ‘role‘        => Role::APP_ADMIN,
          ],
        ];

        $users = $this->table(‘users‘);
        $users->insert($data)
              ->save();
    }
}

  

时间: 2024-10-06 18:07:48

如何在PHP项目中使用phinx进行数据迁移和建表的相关文章

EF 中 Code First 的数据迁移以及创建视图

写在前面: EF 中 Code First 的数据迁移网上有很多资料,我这份并没什么特别.Code First 创建视图网上也有很多资料,但好像很麻烦,而且亲测好像是无效的方法(可能是我太笨,没搞成功),我摸索出了一种简单有效的方法,这里分享给大家. EF是Entity Framework(实体框架)的简写,是微软出品的用来操作数据库的一个框架,会ASP.NET MVC的朋友对他肯定都不陌生.由于学艺不精,我对EF存在一疑虑,就不以[提问]的方式来问了,我以[总结]的方式来表达,如果总结有误的地

如何在NodeJS项目中优雅的使用ES6

如何在NodeJS项目中优雅的使用ES6 NodeJs最近的版本都开始支持ES6(ES2015)的新特性了,设置已经支持了async/await这样的更高级的特性.只是在使用的时候需要在node后面加上参数:--harmony.但是,即使如此node也还是没有支持全部的ES6特性.所以这个时候就需要用到Babel了. 现在开始Babel 在开始使用Babel之前,假设 1. 你已经安装了nodejs,并且已经熟悉了Js. 2. 你也可以使用npm安装各种依赖包. 3. 而且你也对ES6(后来改为

如何在maven项目中使用spring

今天开始在maven项目下加入spring. 边学习边截图. 在这个过程中我新建了一个hellospring的项目.于是乎从这个项目出发开始研究如何在maven项目中使用spring.鉴于网上的学习资料都是spring与jsp的整合.所以在这里我也使用spring+jsp. 从一个新建的maven项目hellospring出发开始研究.

如何在Vue项目中使用vw实现移动端适配

https://www.w3cplus.com/mobile/vw-layout-in-vue.html  原文网址 如何在Vue项目中使用vw实现移动端适配 作者:大漠 日期:2018-01-25 点击:10362 vw Layout 布局 Vue mobile 编辑推荐:使用 Coding.net 搭建静态博客,自定义域名,全站 HTTPS 加密,自动实时部署, 立即托管您的网站! 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页

如何在Vue项目中使用Typescript

0.前言 本快速入门指南将会教你如何在Vue项目中使用TypeScript进行开发.本指南非常灵活,它可以将TypeScript集成到现有的Vue项目中任何一个阶段. 1.初始化项目 首先,创建一个新的项目目录. mkdir typescript-vue-tutorial cd typescript-vue-tutorial 接着,在目录中创建如下目录结构. typescript-vue-tutorial/ ├─ dist/ └─ src/ └─ components/ TypeScript文件

如何在Vue项目中给路由跳转加上进度条

1.前言 在平常浏览网页时,我们会注意到在有的网站中,当点击页面中的链接进行路由跳转时,页面顶部会有一个进度条,用来标示页面跳转的进度(如下图所示).虽然实际用处不大,但是对用户来说,有个进度条会大大减轻用户的等待压力,提升用户体验.本篇文章就来教你如何在Vue项目中实现这样的进度条. 2.安装Nprogress 虽然我们也可以自己手动实现这样的功能,但是,nprogress.js已经帮我们把进度条的样式呀,功能呀都已经封装的很好了,既然有现成的轮子,我们就直接使用轮子就好啦! npm inst

项目中 2个或者多个EF模型 表名称相同会导致生成的实体类 覆盖的解决方法

场景:  2个数据库, 一个新,一个旧,  把旧的 数据库中的数据,导入到新的数据库中,  使用到了2个 EF实体模型, 新数据库 和 旧数据库中的表,有的名称是相同的 (但是结构是不同的) 旧的数据库中的 tb_area 表,只有2个字段 新数据库中的 tb_area 有很多字段  ,结果新数据库里面的 表,由于和旧数据库的表 重名,导致旧数据库里面的  表生产的cs文件 没有了, 只剩下新数据库中的表实体   那么现在问题就来了,我要调用旧表里面的 model 实体模型,怎么拿呢? 拿不到了

Android中使用Sqlite数据库 (一) 建表

一.实现一个类,继承SQLiteOpenHelper类,并实现构造函数,onCreate()  onUpgrade() import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; impo

Django项目与mysql交互进行数据迁移时报错:AttributeError: &#39;str&#39; object has no attribute &#39;decode&#39;

问题描述 Django项目启动,当我们执行命令 python manage.py makemigrations 出现如下错误: File "/usr/local/lib/python3.6/dist-packages/django/db/backends/mysql/operations.py", line 147, in last_executed_query query = query.decode(errors='replace') AttributeError: 'str' o