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