laravel11でlaravel-adminがエラーになる話

みなさんこんにちは!本日はlaravelの最新バージョンであるlaravel11にlaravel-adminを入れて運用できるかどうかを確認した時のお話をします。

結論から言うと「laravel-admin自体は動くけどartisan adminの一部のコマンドが動かない」という状況になります。laravel11ではこちらのリンクにあるようにDoctrine DBALの依存関係がなくなっています。

https://laravel.com/docs/11.x/upgrade#doctrine-dbal-removal

なのでlaravel-adminを使いたい場合は、laravel10の導入が選択肢となりそうです。

laravel11とlaravel-adminの導入

laravel11導入とlaravel-adminのインストールを順を追って説明すると、まずは公式の

https://readouble.com/laravel/11.x/ja/installation.html

にあるインストールコマンド(下記はMacOSの場合)

curl -s "https://laravel.build/laravel11" | bash

でlaravel11をインストールします(URLの末尾はアプリのディレクトリとなる)。インストールが終わったらコンテナを起動しましょう

cd laravel11
./vendor/bin/sail up

コンテナが起動したら

./vendor/bin/sail artisan migrate

これだけでlaravel11はインストール完了です。とっても簡単ですね。

次に、laravel-adminを導入していきます。

./vendor/bin/sail composer require encore/laravel-admin
./vendor/bin/sail artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
./vendor/bin/sail artisan admin:install

こちらもとっても簡単ですね。

次に、モデル用のコントローラーを生成するためにいつものコマンドを叩いたところエラーが発生。

./vendor/bin/sail artisan admin:make UserController --model=App\\Models\\User
   BadMethodCallException 

  Method Illuminate\Database\MySqlConnection::isDoctrineAvailable does not exist.

  at vendor/laravel/framework/src/Illuminate/Macroable/Traits/Macroable.php:112
      108▕      */
      109▕     public function __call($method, $parameters)
      110▕     {
      111▕         if (! static::hasMacro($method)) {
  ➜ 112▕             throw new BadMethodCallException(sprintf(
      113▕                 'Method %s::%s does not exist.', static::class, $method
      114▕             ));
      115▕         }
      116▕ 

  i   Bad Method Call: Did you mean Illuminate\Database\MySqlConnection::availableAt() ? 

んん?なんでしょうこれは。と思って調べるとバッチリ「Laravel11ではDoctrine DBAL関連のメソッドが削除された」と出てきますね。

代替としてSchema::xxxを使えとあるのですが、現時点ではlaravel-adminがこれに対応するかどうか不明ですので、一旦laravel11とlaravel-adminの組み合わせは選択肢から外すのが良さそうです。