Laravel11 dbコマンド
この記事は Laravel11にあるArtisanコマンドを全部調べる Advent Calendar 2024 7日目の記事です。
今回はdbコマンドについて調べました。
環境
- PHP 8.4.1
- laravel/laravel 11.3.3
- laravel/framework 11.33.2
db
新しいデータベースのCLIセッションを開始する。
php artisan db [<connection>]
実行するとCLIでデータベースに接続します。
advent-calendar-2024 % php artisan db
SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite>
引数 | 説明 |
---|---|
connection |
データベース接続名を指定 |
-
connection
にはconfig/database.phpに書かれているデータベース接続名を指定できます。
未指定の場合はデフォルトのデータベースに接続します
php artisan db mysql
オプション | 説明 |
---|---|
--read |
読み取り専用のデータベースに接続 |
--write |
書き込み専用のデータベースに接続 |
-
--read
を付けると指定した接続先の読み取り専用のデータベースに接続します -
--write
を付けると指定した接続先の読み取り専用のデータベースに接続します - オプションを付ける場合は片方のみ、両方付けた場合はreadが優先される
db:monitor
データベースの接続数を監視する。
php artisan db:monitor
実行するとデータベースの接続数を監視します。
このコマンドは主にMySQLやPostgreSQLなどのデータベースの接続数を定期的に監視するのが良さそうです。
SQLiteのような多くの同時接続を想定していないデータベースではあまり必要ないかもしれないです。
オプション | 説明 |
---|---|
--databases[=DATABASES] |
データベース接続名を指定 |
--max[=MAX] |
最大接続数を指定 |
-
--databases
にはconfig/database.phpに書かれているデータベース接続名を指定できます
複数指定可能です
未指定の場合はデフォルトのデータベースに接続します -
--max
に最大接続数を指定できます
指定した数を超えると\Illuminate\Database\Events\DatabaseBusyイベントを発行できます
php artisan db:monitor --databases=mysql,pgsql --max=50
db:seed
シーダクラスを実行する。
php artisan db:seed [<class>]
実行するとテーブルにデータが作成します。
本番環境(.envのAPP_ENVがproduction)で実行すると実行確認のメッセージが表示します。
Yesを選択することでシーダクラスが実行します。
引数 | 説明 |
---|---|
class |
シーダクラスを指定 |
-
class
には実行するシーダクラスを指定します
未指定の場合は\Database\Seeders\DatabaseSeederクラスを実行します - ネームスペースを指定せずクラスのみの場合、自動でDatabase\Seeders\がクラスの前につくので注意が必要です
advent-calendar-2024 % php artisan db:seed UserSeeder
INFO Seeding database.
Illuminate\Contracts\Container\BindingResolutionException
Target class [Database\Seeders\UserSeeder] does not exist.
- 別の記事にも書いてありますので合わせて読んでみてください
オプション | 説明 |
---|---|
--class[=CLASS] |
シーダクラスを指定 |
--database[=DATABASE] |
データベース接続名を指定 |
--force |
本番環境で強制的に実行 |
-
--class
は引数のclass
と一緒です、両方付けたは場合は引数のclass
が優先されます -
--databases
にはconfig/database.phpに書かれているデータベース接続名を指定できます
未指定の場合はデフォルトのデータベースに接続してシーダを実行します -
--force
を付けると本番環境でも強制的に実行します
db:show
データベースに関する情報を表示する。
php artisan db:show
実行するとデータベースの種類、サイズ、接続情報、接続数、テーブルの一覧などデータベースの情報を表示します。
オプション | 説明 |
---|---|
--database[=DATABASE] |
データベース接続名を指定 |
--json |
JSON形式で表示 |
--counts |
テーブルの行数を表示 |
--views |
ビューの情報を表示 |
--types |
ユーザー定義型を表示 |
-
--databases
にはconfig/database.phpに書かれているデータベース接続名を指定できます
未指定の場合はデフォルトのデータベースに接続して情報を表示します -
--json
を使うことでJSON形式で表示します -
--counts
を付けるとテーブルの行数を表示します -
--views
を付けるとビューの情報を表示します
php artisan db:show --counts --views
-
--types
を付けるとユーザー定義タイプの情報を表示します- ユーザー定義型をサポートしていないデータベースで
--types
を付けるとエラーになります
- ユーザー定義型をサポートしていないデータベースで
advent-calendar-2024 % php artisan db:show --types
LogicException
This database driver does not support user-defined types.
db:table
テーブルに関する情報を表示する。
php artisan db:table [<table>]
実行すると表示するテーブルを選択できます。
選択後テーブルのカラム、型、インデックスなどのテーブルの情報を表示します。
引数 | 説明 |
---|---|
table |
テーブル名を指定 |
-
table
にはテーブル名を指定すると選択肢を表示しないでテーブルの情報を表示します
オプション | 説明 |
---|---|
--database[=DATABASE] |
データベース接続名を指定 |
--json |
JSON形式で表示 |
-
--databases
にはconfig/database.phpに書かれているデータベース接続名を指定できます
未指定の場合はデフォルトのデータベースに接続します -
--json
を使うことでJSON形式で表示します
db:wipe
すべてのテーブル、ビュー、ユーザー定義型を削除する。
php artisan db:wipe
実行するとすべてのテーブルを削除します。
db:seedコマンドと一緒で本番環境(.envのAPP_ENVがproduction)で実行すると実行確認のメッセージが表示します。
Laravel11からは確認ではなく実行を止めるために\Illuminate\Console\Prohibitableトレイトが用意されています。
こちらを利用すれば本番環境の実行ができなくなります。(書き方次第ではほかの環境でも止めることができます。)
下記が\Illuminate\Console\Prohibitableトレイトを利用して実行した結果です。
advent-calendar-2024 % php artisan db:wipe
WARN This command is prohibited from running in this environment.
詳しくはこちらの記事を読んでみてください。
オプション | 説明 |
---|---|
--database[=DATABASE] |
データベース接続名を指定 |
--drop-views |
すべてのビューを削除 |
--drop-types |
すべてのユーザー定義型を削除 |
--force |
本番環境で強制的に実行 |
-
--databases
にはconfig/database.phpに書かれているデータベース接続名を指定できます
未指定の場合はデフォルトのデータベースに接続します -
--drop-views
を付けるとすべてのビューも削除します -
--drop-types
を付けるとすべてのユーザー定義型も削除します- ユーザー定義型をサポートしていないデータベースで
--drop-types
を付けるとエラーになります
- ユーザー定義型をサポートしていないデータベースで
advent-calendar-2024 % php artisan db:wipe --drop-types
INFO Dropped all tables successfully.
LogicException
This database driver does not support dropping all types.
-
--force
を付けると本番環境でも強制的に実行します
ただし、さきほどの\Illuminate\Console\Prohibitableトレイトを利用していると--force
をつけても実行できないです
advent-calendar-2024 % php artisan db:wipe --force
WARN This command is prohibited from running in this environment.
Discussion