我正在Laravel 5.4中进行一些数据库迁移。迁移在MySQL数据库中运行良好,但是对于测试我想使用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'])
的创建(所以,我有两个调用来创建索引)我得到了索引{{1}的错误已经存在。
我正在使用:
答案 0 :(得分:1)
调用索引函数时似乎有一点小错误(用它作为数组而不是函数):
$table->index['venue'];
应该是:
$table->index('venue');
答案 1 :(得分: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。