PHPフレームワークLaravelでよくやりがちなミスを備忘録としてメモしていきます。

データベースに接続できない

エラーメッセージ

Illuminate\Database\QueryException SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES) (SQL: select * from articles)

原因

データベースに接続しようとしたがアクセスが拒否された。データベースに接続する際は接続するデータベース名、ユーザ名、パスワードが最低でも必要だがこれが不足もしくは誤っている。

対処方法

config\database.phpの設定を確認する必要がある。特に、下記コードのXXXのあたり。

さらによくある誤りとしては、database.phpよりも.envの設定のほうが優先されるため、こちらの設定で上書きされている場合があるので確認すること。下記コードのXXXのあたり。

サーバにデプロイすると動かない

エラーログ

PHP Parse error: syntax error, unexpected '?' in /home/hogehoge/public_html/laravel/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php on line 233

原因

Laravel5.5はPHPのバージョンが7.0.0以上を必要としています。PHPのバージョンが7未満だと上記エラーになる場合があります。特にCentOSをはじめとするサーバOSはデフォルトでPHP7以上になっているものが少ないため、注意が必要です。

対処方法

まずはPHPのバージョンを確認します。サーバOSでphp -vコマンドを入力してバージョンを確認します。

バージョンが7未満のときはPHPのバージョンアップが必要です。
以下、CentOS系の場合で説明します。

php7のリポジトリがあるかどうかを確認します。
yum repolist allコマンドを入力します。

上記のようにremi-php71のようなPHP7系統のリポジトリがあれば、そのままでインストール可能です。ない場合はリポジトリをインストールしてください。
--enablerepo=remi,remi-php71でPHP7系統のリポジトリを有効にしてインストールすることで、PHP7.1をインストールします。以下のコマンドを実行します。入力するパッケージは一つの例です。必要なものは追加してください。
yum install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-mcrypt

php artisan migrateでSyntax errorになる

Artisanでマイグレーションしようとすると、以下のエラーになることがあります。

原因

Laravelのドキュメントに以下の記載があります。

Laravelはデータベース中への「絵文字」保存をサポートするため、デフォルトでutf8mb4文字セットを使っています。バージョン5.7.7より古いMySQLや、バージョン10.2.2より古いMariaDBを使用している場合、マイグレーションにより生成されるデフォルトのインデックス用文字列長を明示的に設定する必要があります。

引用元: インデックス長とMySQL/MariaDB

対処方法

AppServiceProvider中でSchema::defaultStringLengthを呼び出します。
下記プログラムの6行目、17行目を追加します。

その他

気づいたら追加していきます。