みなさんこんにちは!本日は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の組み合わせは選択肢から外すのが良さそうです。