[Laravel7.x]「Declaration of Doctrine\DBAL\Driver\PDOConnection::query() must be compatible with PDO::query(string $query, ?int $fetchMode = null, mixed …$fetchModeArgs)」が発生する…

Laravel

はじめに

フィールドの追加をやりたかったわけですよ。そしたらこんなエラーが発生した。

結果

PHP7.4で動かさないといけないところをPHP8.0で動かしたのでエラーが出てた。
Laravel7と8が混在しているとちょっと面倒だな…

環境

  • PHP 8.0.1
  • Laravel Framework 7.28.4
  • doctrine/dbal 2.11.3
% php -v
PHP 8.0.1
% php artisan --version       
Laravel Framework 7.28.4
% composer show -i | grep dbal
doctrine/dbal                      2.11.3

あれ?いつの間にPHP8になったんだろ…

エラーを検索してみる

ここ(https://github.com/doctrine/dbal/pull/3770)によると、解決している模様。
それなら、アップデートすれば行けそうだよね。

アップデートしてみる

とりあえず、composer update してみる。

% composer update
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - laravel/socialite[v4.4.0, ..., v4.4.1] require php ^7.1.3 -> your php version (8.0.1) does not satisfy that requirement.
    - Root composer.json requires laravel/socialite ^4.4 -> satisfiable by laravel/socialite[v4.4.0, v4.4.1].

これちょっと入り込むとヤバイやつかな…そもそも、WebサーバはPHPは7.4で動かしているわけだし…

PHPのバージョンを下げよう。

まずは、現状のバージョン

% brew list php
/usr/local/Cellar/php/8.0.1_1/.bottle/etc/ (4 files)
/usr/local/Cellar/php/8.0.1_1/.bottle/var/log/php-fpm.log
/usr/local/Cellar/php/8.0.1_1/bin/pear
/usr/local/Cellar/php/8.0.1_1/bin/peardev
/usr/local/Cellar/php/8.0.1_1/bin/pecl
/usr/local/Cellar/php/8.0.1_1/bin/phar
/usr/local/Cellar/php/8.0.1_1/bin/phar.phar
/usr/local/Cellar/php/8.0.1_1/bin/php
/usr/local/Cellar/php/8.0.1_1/bin/php-cgi
/usr/local/Cellar/php/8.0.1_1/bin/php-config
/usr/local/Cellar/php/8.0.1_1/bin/phpdbg
/usr/local/Cellar/php/8.0.1_1/bin/phpize
/usr/local/Cellar/php/8.0.1_1/homebrew.mxcl.php.plist
/usr/local/Cellar/php/8.0.1_1/include/php/ (294 files)
/usr/local/Cellar/php/8.0.1_1/lib/httpd/modules/libphp.so
/usr/local/Cellar/php/8.0.1_1/lib/php/ (15 files)
/usr/local/Cellar/php/8.0.1_1/pecl
/usr/local/Cellar/php/8.0.1_1/sbin/php-fpm
/usr/local/Cellar/php/8.0.1_1/share/man/ (8 files)
/usr/local/Cellar/php/8.0.1_1/share/php/ (159 files)

PHP7.4をインストールしてみる

% brew install php@7.4
    <<< 省略 >>>
######################################################################## 100.0%
Error: Your Command Line Tools (CLT) does not support macOS 11.
It is either outdated or was modified.
Please update your Command Line Tools (CLT) or delete it if no updates are available.
Update them from Software Update in System Preferences or run:
  softwareupdate --all --install --force

If that doesn't show you any updates, run:
  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

Alternatively, manually download them from:
  https://developer.apple.com/download/more/.

Error: An exception occurred within a child process:
  SystemExit: exit

もうなんやねん。softwareupdateを実行しろと…

% softwareupdate --all --install --force
Software Update Tool

Finding available software
No updates are available.

ほう。更新が見つからないと…じゃあ次のやつやな。

sudo rm -rf /Library/Developer/CommandLineTools
Password:
% sudo xcode-select --install
xcode-select: note: install requested for command line developer tools

まぁまぁかかるねぇ…

インストールが終わったので、もっかいやってみる。

% brew install php@7.4
Warning: php@7.4 7.4.16 is already installed and up-to-date.
To reinstall 7.4.16, run:
  brew reinstall php@7.4
% brew reinstall php@7.4
    <<< 省略 >>>
To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

Finally, check DirectoryIndex includes index.php
    DirectoryIndex index.php index.html

The php.ini and php-fpm.ini file can be found in:
    /usr/local/etc/php/7.4/

php@7.4 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have php@7.4 first in your PATH, run:
  echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> ~/.zshrc

For compilers to find php@7.4 you may need to set:
  export LDFLAGS="-L/usr/local/opt/php@7.4/lib"
  export CPPFLAGS="-I/usr/local/opt/php@7.4/include"


To have launchd start php@7.4 now and restart at login:
  brew services start php@7.4
Or, if you don't want/need a background service you can just run:
  php-fpm
==> Summary
🍺  /usr/local/Cellar/php@7.4/7.4.16: 497 files, 72.4MB

とりあえず、パスを通す!

% echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.zshrc
% echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> ~/.zshrc

ターミナルを再起動して、

% php -v
PHP 7.4.16

無事にPHP7.4環境で、タイトルのエラーはなくなりました。
PHP8に戻すときは、.zshrcの追加したものをコメントアウトして切り替える形にするしかないな。

コメント

タイトルとURLをコピーしました