Laravelでsqliteをデータベースとして使用する方法

Laravel

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ではデータベースを作成する際は、ファイルを作成するだけでいいのです!

MySQLPostgreSQLと違って、とても簡単です!

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_CONNECTIONsqliteに修正して、その他の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.sqlitedatabase.sqliteというファイル名は、config/database.phpで指定されていたことがわかるかと思います。

以下のようにconfig/database.phpdatabase項目を編集すれば、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の書籍をまとめて感想を書いていますので購入の際の参考にしてください!

筆者オススメの関連商品

コメント