Laravel 5.2數據庫--遷移migration


   Laravel中的migrations文件存放的是數據庫表文件等結構,可以說是一個跟git差不多的,可以說像是數據庫的版本控制器,所以可以叫做遷移。因為它可以很快速的很容易地構建應用的數據庫表結構。

  1. 生成遷移

  使用 Artisan 命令make:migration來創建一個新的遷移:

1 php artisan make:migration create_users_table

  就會在database/migrations目錄下生成新的遷移文件,而已名稱都是包含時間戳,因此預先laravel判斷其順序。

      2.遷移文件的目錄結構

   里面包含了兩個方法:updownup方法用於新增表,列或者索引到數據庫,而down方法就是up方法的反操作,和up里的操作相反。

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFlightsTable extends Migration{
    /**
     * 運行遷移
     *
     * @return void
     */
    public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('airline');
            $table->timestamps();
        });
    }

    /**
     * 撤銷遷移
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('flights');
    }
}

    3.進行文件遷移

php artisan migrate 

    4、遷移回滾

    想要回滾最新的一次遷移”操作“,可以使用rollback命令,注意這將會回滾最后一批運行的遷移,可能包含多個遷移文件:

php artisan migrate:rollback

    migrate:reset命令將會回滾所有的應用遷移:

php artisan migrate:reset

    migrate:refresh命令將會先回滾所有數據庫遷移,然后運行migrate命令。這個命令可以有效的重建整個數據庫:

php artisan migrate:refresh
php artisan migrate:refresh --seed

 

    在up方法里面創建列的時候,發現想要用varchar字符類型找不到,原來laravel的varchar類型變成了string()方法了,在用的時候:

$table->string('name', 100);   //等同於數據庫中的 VARCHAR,帶一個長度

  

    二、創建索引

  1、一般可用索引類型有:主鍵索引、混合索引、唯一索引、自定義索引名稱、普通索引。

命令 描述
$table->primary('id'); 添加主鍵索引
$table->primary(['first', 'last']); 添加混合索引
$table->unique('email'); 添加唯一索引
$table->unique('state', 'my_index_name'); 指定自定義索引名稱
$table->index('state'); 添加普通索引

 

命令 描述
$table->dropPrimary('users_id_primary'); 從 “users”表中刪除主鍵索引
$table->dropUnique('users_email_unique'); 從 “users”表中刪除唯一索引
$table->dropIndex('geo_state_index'); 從 “geo”表中刪除普通索引

 

 

 

 

  出錯誤問題:                                                          

  [Symfony\Component\Debug\Exception\FatalThrowableError] 

  Call to a member function comment() on null             

       出現這個問題的原因是我在添加列$table->timestamps();時間戳的時候,后面鏈式調用了注釋方法$table->timestamps()->comment('時間');

這是由於$table->timestamps();這個timestamps()方法里面是沒有return  $this; 的結果導致的。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM