🍌

Laravel11 dbコマンド

2024/12/07に公開

この記事は 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.
  • 別の記事にも書いてありますので合わせて読んでみてください

https://zenn.dev/naopusyu/articles/72dc44dd5468aa

https://zenn.dev/naopusyu/articles/ecce9dafa38408

オプション 説明
--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. 

詳しくはこちらの記事を読んでみてください。
https://zenn.dev/naopusyu/articles/98ca9732f5c700

オプション 説明
--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.  
GitHubで編集を提案

Discussion