2017-09-12 81 views
0

我正在Laravel 5.4中進行一些數據庫遷移。遷移工作正常與MySQL數據庫,但爲了測試我想使用SQLite但遷移失敗。下面的代碼SQLite不會創建索引

public function up() 
    { 
     Schema::create('mapped_venues', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->unsignedInteger('upload_job_id')->nullable(); 
      $table->string('venue')->default(''); 
      $table->unsignedInteger('venue_id')->nullable(); 

      $table->timestamps(); 

      $table->index(['venue']); 
     }); 

     Schema::create('mapped_teams', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->unsignedInteger('upload_job_id')->nullable(); 
      $table->string('team')->default(''); 
      $table->unsignedInteger('team_id')->nullable(); 

      $table->timestamps(); 

      $table->index(['team']); 
     }); 
    } 

當我運行php artisan migrate沒有建立在mapped_teams.team列的索引,但mapped_venues.venue的一個!

$ sqlite3 database/database.sqlite 
SQLite version 3.19.3 2017-06-08 14:26:16 
Enter ".help" for usage hints. 
sqlite> .indexes mapped_teams 
sqlite> .indexes mapped_venues 
mapped_venues_venue_index 
sqlite> 

我也試圖在一個單獨的呼叫

Schema::table('mapped_venues', function (Blueprint $table) { 
      $table->index(['venue']); 
     }); 
Schema::table('mapped_teams', function (Blueprint $table) { 
      $table->index(['team']); 
     }); 

創建索引但結果是一樣的。有趣的是,當(由於錯誤)我創建索引$table->index['team'])創建表(所以,我有兩個調用來創建索引),我得到的索引mapped_teams_team_index已經存在的錯誤。

我使用:

  • Laravel 36年5月4日
  • 主義DBAL 2.6.2
  • SQLite的3.19.3

回答

1

好像你有小失誤調用索引時函數(用作數組而不是函數):

$table->index['venue']; 

應該是:

$table->index('venue'); 
+0

謝謝@ inet123,這只是一個打字錯誤的問題。實際的代碼很好。儘管我已經編輯了這個問題。 – giuliot

0

其實我已經發現該指數確實產生。我有另一個遷移到team列重命名爲mapped_team,我想刪除索引第一

Schema::table('mapped_teams', function (Blueprint $table) { 
    $table->dropIndex(['team']); 
    $table->renameColumn('team', 'mapped_team'); 
    $table->index(['mapped_team']); 
} 

其中索引被丟棄抱怨指數mapped_teams_team_index不存在該行。我已經修改我的遷移不刪除並重新創建索引,但只是重命名它。結果是名爲mapped_teams_team_index的索引仍然存在,但它現在正確地索引了mapped_team列。這適用於Mysql和SQLite。