[解決したいこと(課題)]
・FactoryとFakerとシーダーでダミーデータ200個を作成するソースを書きましたが、シーダー実行すると、エラーメッセージが表示され、シーダー実行に失敗する。そのため、エラーメッセージを解消して、シーダー実行を成功させたい。
[開発環境]
・Laravel Framework 6.20.27
・PHP 8.0.6
・XAMPP
[前提条件]
・DB接続可能であることを確認済
・DB操作可能であることを確認済
・Modelクラス作成済
・マイグレーション作成済(実行OK確認済)
[手順]
- シーダー作成
$ php artisan make:seeder ReservationTablesSeeder
Seeder created successfully.
- ファクトリの生成
$ php artisan make:factory ReservationFactory
Factory created successfully.
- ファクトリファイルの修正
database\factories\ReservationFactory.php
- 日本語化
config\app.phpで「'faker_locale' => 'en_US'」から「'faker_locale' => 'ja_JP'」に修正
- シーダーを編集して、ダミーデータ作成ソースを追加
database\seeds\ReservationTablesSeeder.php
- シーダー登録
database\seeds\DatabaseSeeder.php
- シーダー変更したので、composer実行
$ composer dump-autoload
- シーダー実行 ★エラー発生
$ php artisan db:seed
[ソース]
・ファクトリファイルの修正:database\factories\ReservationFactory.php
PHP
1use App\Models\reservation; 2use Faker\Generator as Faker; 3 4$factory->define(reservation::class, function (Faker $faker) { 5 return [ 6 // 7 // 'examination_ticket_number' => $faker-> 8 'name' => $faker->name, 9 'gender' => $faker->randomElement(['0','1']), 10 'birthday' => $faker->dateTimeBetween('-80 years', '-20years')->format('Y-m-d'), 11 'email' => $faker->unique()->email, 12 'phone' => $faker->phoneNumber, 13 14 ]; 15});
・シーダーを編集して、ダミーデータ作成ソースを追加:database\seeds\ReservationTablesSeeder.php
PHP
1use Illuminate\Database\Seeder; 2use App\Models\reservation; 3 4class ReservationTablesSeeder extends Seeder 5{ 6 /** 7 * Run the database seeds. 8 * 9 * @return void 10 */ 11 public function run() 12 { 13 factory(reservation::class, 200)->create(); // 200個のダミーデータ作成 14 } 15}
・シーダー登録:database\seeds\DatabaseSeeder.php
PHP
1use Illuminate\Database\Seeder; 2use App\Models\reservation; 3 4class DatabaseSeeder extends Seeder 5{ 6 /** 7 * Seed the application's database. 8 * 9 * @return void 10 */ 11 public function run() 12 { 13 // $this->call(UsersTableSeeder::class); 14 $this->call([ 15 reservation::class 16 ]); 17 } 18}
・参考:モデルクラス(reservation)
PHP
1namespace App\Models; 2 3use Illuminate\Database\Eloquent\Model; 4 5class reservation extends Model 6{ 7 // 8}
[エラー内容]
BadMethodCallException : Call to undefined method App\Models\reservation::setContainer() at C:\xampp\htdocs\worklaravel\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php:50 46| * @throws \BadMethodCallException 47| */ 48| protected static function throwBadMethodCallException($method) 49| { > 50| throw new BadMethodCallException(sprintf( 51| 'Call to undefined method %s::%s()', static::class, $method 52| )); 53| } 54| } Exception trace: 1 Illuminate\Database\Eloquent\Model::throwBadMethodCallException("setContainer") C:\xampp\htdocs\worklaravel\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php:36 2 Illuminate\Database\Eloquent\Model::forwardCallTo(Object(Illuminate\Database\Eloquent\Builder), "setContainer") C:\xampp\htdocs\worklaravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php:1622 Please use the argument -v to see more details.
[試したこと]
・ググって、同様な現象があるか確認済。
→1ページあり、原因は、シーダー登録をしていなかったこと(今回は、シーダー登録すみ)。
・モデルクラスの「App\Models\reservation.php」があること確認済。
・エラーメッセージの解読
・ソースの再確認
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。