SQLite не создает индекс

Я работаю над некоторыми миграциями баз данных в 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 уже существует.

Я использую:

  • Laravel 5.4.36
  • Учение DBal 2.6.2
  • SQLite 3.19.3

0

Решение

Кажется, у вас есть небольшая ошибка при вызове индексной функции (использовал ее как массив вместо функции):

    $table->index['venue'];

должно быть:

    $table->index('venue');
1

Другие решения

Я действительно узнал, что индекс действительно создан. У меня была другая миграция, чтобы переименовать 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.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector