実行環境
- PHP 7.4
- Laravel 6.20.0
エラー内容
Faker使ってダミーデータたくさん作ってやるぞ!
と思いまして、
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Model\Tag;
use Faker\Generator as Faker;
$factory->define(Tag::class, function (Faker $faker) {
return [
'title' => $faker->name,
'slug' => $faker->word,
'description' => $faker->text,
];
});
こういったFactoryを用意し、php artisan db:seed
を実行したところ
ErrorException : implode(): Passing glue string after array is deprecated. Swap the parameters
と、$faker->text
のところで怒られてしまいました。
原因
php7.4になり、implode
の書き方が変更されたのが原因のようです。
【参考記事】 php7.4からimplode関数の引数順序の推奨について
implode(',', ['a','b','c']);
とすると、 a,b,c
という文字列を作ってくれるのですが、今までは
implode(['a','b','c'],',');
のように逆でも問題なかったそうです。それが、Fakerのパッケージ内で使われてたということですね。
改善方法
Fakerをアップデートしてみました。
$ composer update fzaninotto/faker
これでOK!と思いきや...
Package fzaninotto/faker is abandoned, you should avoid using it. No replacement was suggested.
と、そもそもfzaninotto/faker
がabandonedだと注意されてしまいました。
仕方ないのでこちらに切り替えます。
$ composer remove vendor/fzaninotto/faker // 既存のfakerパッケージを削除
$ composer require fakerphp/faker // 新パッケージインストール
これで無事初期値を実装することができました。