Laravelで使用するデータベースをSQLiteにしたい
Laravelは初期インストール時だと、DBの設定をしないとマイグレーションやDBへ接続する操作ができません。
ちょっとLaravelで試したいだけなどの時は、DBの設定をするのが面倒ってときもあります。
その時に軽量なSQLiteをデータベースとして使用すればすぐに作業を始められるので便利です。
LaravelでSQLiteを使用する方法について解説していきたいと思います!
SQLiteとは
SQLiteってなに?という方のために簡単に解説しておきます。
SQLiteとは、一言でいうと軽量なデータベースになります。
SQLiteはデータを単一のファイルで管理するため、設定等が不要ですぐに使い始められるという特等があります。
LaravelのSQLiteデータベース設定方法
それでは、実際にLaravelでSQLiteを使用するための設定手順を解説していきます。
SQLiteのデータベースファイルの作成
まずSQLiteのデータベースファイルの作成をします。
Laravelのプロジェクトディレクトリへ移動して、以下のコマンドでデータベースファイルを作成してください!
$ touch database/database.sqlite
Windowsの場合は、上記のtouchコマンドが使えません。
そのためテキストエディタなどを使用して上記のパスにdatabase.sqliteを作成して配置してください。
SQLiteではデータベースを作成する際は、ファイルを作成するだけでいいのです!
MySQLやPostgreSQLと違って、とても簡単です!
Laravelの設定ファイル.envの編集
今度は、LaravelからSQLiteへ接続する際の情報が記載されている.envファイルを編集しましょう!
初期状態の.env
初期状態の.envはこのようになっていると思います。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
変更後の.env
DB_CONNECTIONをsqliteに修正して、その他のDB接続用の項目は使用しないため、コメントアウトしてしまいましょう!
.env
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=homestead
# DB_USERNAME=homestead
# DB_PASSWORD=secret
マイグレーション
マイグレーションの実行
ここまででデータベースの設定は完了していますので、マイグレーションを実行してSQLiteへ接続できるか確認してみましょう!
$ php artisan migrate
実行結果
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migration table created successfully.と表示されて、エラーが発生しなければこれで完了です。
早速Laravelでデータベースを使用したプログラミングを始めましょう!
もしマイグレーションでエラーが発生する場合は、次項に考えられる対応をまとめていますので確認してみてください。
PHPからSQLiteへの接続用ドライバーをインストールする
Ubuntuの場合
エラー内容
Ubuntuを使用していて、マイグレーション時にcould not find driverのエラーが発生する場合はこちらの解決策を参考にしてください。
$ php artisan migrate
Illuminate\Database\QueryException : could not find driver (SQL: PRAGMA foreign_keys = ON;)
at /home/***/***/***/src/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667| }
668|
Exception trace:
1 PDOException::("could not find driver")
/home/***/***/***/src/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
2 PDO::__construct("sqlite:/home/ubuntu/git/LaraClean/src/database/database.sqlite", [])
/home/***/***/***/src/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
Please use the argument -v to see more details.
解決策
UbuntuでPHPのcould not find driverのエラーの解決策は、別途詳しくまとめています。
こちらの記事を確認してください!
Windowsの場合
エラー内容
Windowsを使用していて、マイグレーション時にcould not find driverのエラーが発生する場合はこちらの解決策を参考にしてください。
>php artisan migrate
In Connection.php line 664:
could not find driver (SQL: select * from sqlite_master where type = 'table' and name = migrations)
In Connector.php line 67:
could not find driver
解決策
Windowsでのエラーの解決策は、こちらをご覧下さい。
SQLiteのデータベースファイル名の変更方法
デフォルトの設定を確認する
SQLiteのデータベースファイル名の設定は、config/database.phpで指定されていますので見てみましょう!
config/database.php
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
‘database’ => env(‘DB_DATABASE’, database_path(‘database.sqlite’)),で.envファイルから設定が変更できることがわかりますね!
データベースファイル名を変更したい場合
上記のconfig/database.phpの設定内容から、SQLiteのデータベースファイルの作成で作成したdatabase/database.sqliteのdatabase.sqliteというファイル名は、config/database.phpで指定されていたことがわかるかと思います。
以下のようにconfig/database.phpのdatabase項目を編集すれば、SQLiteで使用するデータベースファイルの名前を簡単に変更することができます。
'database' => env('DB_DATABASE', database_path('database.sqlite')),
↓
'database' => env('DB_DATABASE', database_path('sample.sqlite')),
ただ直接config/database.phpを書き換えるのはあまり良くないので、次項で説明する.envファイルに指定する方法を推奨します。
データベースファイルの配置場所も変更したい場合
上記のconfig/database.phpの設定内容から、.envファイル内のDB_DATABASEの項目に値を指定すれば可能なことがわかります。
コメントアウトしていた.env内のDB_DATABASE項目に絶対パスを指定すれば、データベースファイルの配置場所も変更できます。
.env
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
DB_DATABASE=/path/to/sqlite/database/file.sqlite
# DB_USERNAME=homestead
# DB_PASSWORD=secret
まとめ
いかがでしたでしょうか?
LaravelでSQLiteを使えるととても便利ですので、活用していきましょう!
またPHPフレームワーク Laravelの参考になる記事を書いていますので是非みていってください!
Laravel始めて間もない方は、Laravelの上達方法についても詳しく記事をまとめていますので見てみてくださいね!
Laravelの学習をこれから始めたい!という方は、Laravelの入門記事も書いていますので是非見て下さい!
Laravelでオススメな本を探している!という方は、こちらで僕がLaravelの書籍をまとめて感想を書いていますので購入の際の参考にしてください!
コメント