ピックアップ
LaravelのTestDatabases.phpで「syntax error, unexpected ‘)’」が起きたときの対処方法

Laravelの初期設定時に、
初期ページを表示しようとすると
syntax error, unexpected ‘)’
のエラーが出て困ったので、
その時の対処方法をメモ。
同じようなエラーでうまく事象が解決できる人がいれば幸い。
LaravelのTestDatabases.phpで「syntax error, unexpected ‘)’」が起きたときの対処方法
Laravelのバージョン
$ php artisan --version Laravel Framework 8.29.0
Laravelの設定の状況
このエラーが起きた時点では、
create-projectでLaravelのプロジェクトを作り、
envファイルの設定、key:generateまでやった状況。
また、特にwebサーバ等の設定は問題なく、
ページを表示しようとする段階で、
Laravel側でエラーが起きている状態。
エラー内容
エラーログとしては、以下のエラーログが残っていた。
local.ERROR: syntax error, unexpected ')' {"exception":"[object] (ParseError(code: 0): syntax error, unexpected ')' at 【laravelのフォルダ】/vendor/laravel/framework/src/Illuminate/Testing/Concerns/TestDatabases.php:164)
対応方法
まず、対象ファイルの「TestDatabases.php」の164行目あたりは、
protected function switchToDatabase($database)
{
DB::purge();
$default = config('database.default');
$url = config("database.connections.{$default}.url");
if ($url) {
config()->set(
"database.connections.{$default}.url",
preg_replace('/^(.*)(\/[\w-]*)(\??.*)$/', "$1/{$database}$3", $url),
);
} else {
config()->set(
"database.connections.{$default}.database",
$database,
);
}
}
このようなコードになっている。
このコードでsyntaxエラーなので、
とりあえず、文法エラーで弾かれている箇所を調整。
config()->set(
"database.connections.{$default}.url",
preg_replace('/^(.*)(\/[\w-]*)(\??.*)$/', "$1/{$database}$3", $url),
);
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
setメソッドの末尾の「,」を削除
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
config()->set(
"database.connections.{$default}.url",
preg_replace('/^(.*)(\/[\w-]*)(\??.*)$/', "$1/{$database}$3", $url)
);
同じ関数の中に2つ同じ箇所があるので、
どちらも同じように調整するとうまくいく。




内容がわかりやすくて助かります!
ありがとうございます!