Laravel 6でのSQLiteでのマイグレーション時のエラーへの対処

Laravelにはデータベースのテーブル作成や編集などを管理する方法として,マイグレーションと呼ばれる機構が用意されている。直接 CREATE TABLE文やALTER TABLE文などを発行せずに,PHPのソースコードとしてテーブル作成や変更を管理する仕組みだ。

マイグレーションの流れ

マイグレーションは,マイグレーションファイルとデータベースに作成されるmigrationsテーブルを利用して管理される。

具体的には以下の手順で行う。

  1. php artisan make:migration xxx コマンドを実行 (xxxは任意の名前)
  2. マイグレーションファイルyyyy_mm_dd_hhmmss_xxx がdatabase/migrations/に作成される。
  3. マイグレーションファイル内のupメソッド内に,テーブルの作成手順をスキーマビルダで記述する。
  4. マイグレーションファイル内のdownメソッド内にupメソッド内の手順を巻き戻す手順をスキーマビルダで記述する。
  5. php artisan migrateコマンドでマイグレーションを実行
  6. データベースにmigrationsテーブルが作成される (初回のみ)
  7. マイグレーションファイルの記述が実行され,テーブルが作成・変更される。
  8. migrationsテーブルに実行されたマイグレーションファイルが記録される。

作成日: ,https://senooken.jp/post/2020/03/30/

Laravel 6でのSQLiteでのマイグレーション時のエラーへの対処

Ubuntu 18.04上のLaravel 6.16.0でマイグレーションを試すとエラーが出てはまったので記録を残す。

ローカル環境で動作を確認したかったので,DBサーバーなしで済むSQLiteを使おうと,.envファイルでDB_CONNECTION=sqliteを指定した。

その後,以下のコマンドでマイグレーションを実行したところ,エラーが出てしまった。 

php artisan migrate
Illuminate\Database\QueryException  : Database (laravel) does not exist. (SQL: select * from sqlite_master where type = 'table' and name = migrations)

エラーを見ると,laravel名前ののデータベースがないというエラーが出ている。

調べたところ,config/database.php内で以下のようにコネクターの設定でDB_DATABASEの環境変数を参照していた。

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],

そのため,.env内でDB_DATABASE環境変数に値を空にするか,設定箇所をコメントアウトして,DB_DATABASE環境変数に値を入れないことで,対応できた。

ただし,今度は別のエラーが出てしまった。

php artisan migrate
Illuminate\Database\QueryException  : Database (/home/senooken/project/example/PHP/Laravel/example.chap2/database/database.sqlite) does not exist. (SQL: select * from sqlite_master where type = 'table' and name = migrations)

今度はdatabase/database.sqliteがないというエラーが出ている。

このファイルはデフォルトでは存在しないので,空ファイルを用意してやる。例えば,以下のtouchコマンドで用意する。

touch database/database.sqlite

今度はうまく実行できた。

「Laravelリファレンス[Ver 5.1LTS対応]」のサンプルを読みながら,Laravelについて勉強していた。

書籍内では説明や付属サンプルコードでは特に問題なかったのだが,おそらくconfig/database.phpがLaravel 5.1と6とで内容が変わったためだろう。

流行りのフレームワークはバージョン違いで細かい挙動が変わってくるのでなかなかやっかいだ。ひとまず解決できてよかった。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です