laravel框架学习---migration

        对数据库管理操作之前,我们需要先建一个本地数据库。打开 Navicat 可视化数据库管理工具,在本机 localhost 下面新建一个 laravel 数据库,设置 字符集 utf8mb4 -- UTF-8 Unicode,排序规则选择 utf8mb4_general_ci。这样数据库就建好了。

        建好数据库后,需要我们修改 laravel 项目的数据库配置项,我们可以看到项目根目录有一个 config 文件夹,在这里面是各种配置,打开后,我们可以看到 database.php 数据库配置文件,但是这个文件也只是读取的配置信息,那数据库的具体详细配置信息到底在哪里呢?

        全文搜索 env() 的方法定义,可以找到 vendor/laravel/framework/src/Illuminate/Support/helpers.php 该文件。可知,通过getenv() 函数获取系统环境变量,找到实际当前加载 环境配置文件。

        查阅官方说明,我们可以看到在项目根目录 有两个文件,.env  、.env.example ;打开 .env 就可以看到具体信息了,这样做有什么好处呢?

    一、动态切换数据库(研发、测试、灰度、线上),修改配置即可;

    二、我们会把 .env 问价放入到 项目根目录 .gitignore 文件中,这样在规避提交数据库敏感信息,不加到版本库中。并且方便运维部署。


        现在,我们来看一下, migration 到底是什么东西?字面理解即迁移。。

        打开项目根目录, database文件夹目录下 migrations文件夹里面,laravel已经默认给我们生成两个migration文件

     .
    ├── 2014_10_12_000000_create_users_table.php
    ├── 2014_10_12_100000_create_password_resets_table.php

        然后修改 .env的数据库配置信息:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

       

        创建表:

        现在执行一下 php artisan migrate,使用 laravel的这个 migration 自动生成一下表:

php artisan migrate

        冷暖自知一抹茶ck

        执行上述语句之后,发现在命令行下会报错--特殊字段太长报错;查询相关信息之后,有如下解释:

        laravel 5.4 改变了默认的数据库字符集,现在utf8mb4包括存储emojis支持。如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情。当你试着在一些MariaDB或者一些老版本的的MySQL上运行 migrations 命令时,就会碰到上述错误。然后贴出官方说明:https://laravel.com/docs/master/migrations#creating-indexes

        如何解决呢?我们可以在 AppServiceProvider.php(app/Providers/AppServiceProvider.php) 文件里的 boot 方法里设置一个默认值:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191);
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

        清空该数据库的表,然后再执行 php artisan migrate 该命令:

        冷暖自知一抹茶ck

        在laravel数据库即可看到,已经成创建users表、migrations表、password_resets表,即使用 migration 成功的对数据库进行了操作管理。


        删除之前创建的表:

        现在,如果我们的user表信息  name字段写错了,如何操作呢?

        通过 php artisan 查看 帮助信息,我们可以看到 包含migrate 的更多操作命令:

        冷暖自知一抹茶ck


        回到上述场景,我们执行 php artisan migrate:rollback 命令,即可看到表  恢复到了之前 的状态,即删除了 users表、password_resets表

D:\software\wamp64\www\laravel5>php artisan migrate:rollback
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back:  2014_10_12_100000_create_password_resets_table
Rolling back: 2014_10_12_000000_create_users_table
Rolled back:  2014_10_12_000000_create_users_table

        然后,修改 user表(2014_10_12_000000_create_users_table.php 该文件)的字段,name修改成 username。再次执行 php artisan migrate 命令。看到laravel数据库又重新生成了user表、password_resets表,并且  user表的name字段也修改成了username

D:\software\wamp64\www\laravel5>php artisan migrate
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

       

        创建一个新的 migration 文件,生成一个新的表:

        使用 migrate 命令自动生成我们想要创建的表的 migration 文件,执行命令:php artisan make:migration create_articles_table --create=articles ,看到在 database\migrations 文件夹下,新增加了一个使用migration  创建的 生成articles表的语句文件。

D:\software\wamp64\www\laravel5>php artisan make:migration create_articles_table --create=articles
Created Migration: 2018_07_08_144156_create_articles_table

        修改 2018_07_08_144156_create_articles_table.php 该文件的 up方法,给表新增加几个字段。

public function up()
{
    Schema::create('articles', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();
    });
}

修改成:

public function up()
{
    Schema::create('articles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->text('content');
        $table->timestamp('published_at');
        $table->timestamps();
    });
}

        执行 php artisan migrate 命令,创建 articles表:

D:\software\wamp64\www\laravel5>php artisan migrate
Migrating: 2018_07_08_144156_create_articles_table
Migrated:  2018_07_08_144156_create_articles_table


        修改表结构(添加表字段)

        当表上线了之后,需要改表的结构怎么办?这时就不能再使用 rollback,因为已经有了数据,那就需要用到 php artisan make:migration add_intro_column_to_articles --table=articles 命令。可以看到 migration 该目录下 又多了一个文件 2018_07_08_150115_add_intro_column_to_articles.php。

D:\software\wamp64\www\laravel5>php artisan make:migration add_intro_column_to_articles --table=articles
Created Migration: 2018_07_08_150115_add_intro_column_to_articles

        修改该文件内容:

/**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('articles', function (Blueprint $table) {
            //
            $table->string('intro');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('articles', function (Blueprint $table) {
            //
            $table->dropColumn('intro');
        });
    }

        然后在执行 php artisan migrate 命令。

D:\software\wamp64\www\laravel5>php artisan migrate
Migrating: 2018_07_08_150115_add_intro_column_to_articles
Migrated:  2018_07_08_150115_add_intro_column_to_articles

        这样,intro字段就加入到了 articles 表中。

        需要注意的是,如果需要使用 dropColumn() 方法的时候,需要我们引入一个另外包,我们可以通过composer来将这个包下到我们的项目当中。官方文档说明:https://docs.golaravel.com/docs/5.6/migrations/#renaming-and-dropping-tables 

D:\software\wamp64\www\laravel5>composer require doctrine/dbal


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论