Я работаю над некоторыми миграциями баз данных в 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'])
внутри вызова для создания таблицы (так, у меня есть два вызова для создания индекса) я получаю ошибку, что индекс mapped_teams_team_index
уже существует.
Я использую:
Кажется, у вас есть небольшая ошибка при вызове индексной функции (использовал ее как массив вместо функции):
$table->index['venue'];
должно быть:
$table->index('venue');
Я действительно узнал, что индекс действительно создан. У меня была другая миграция, чтобы переименовать 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.