Laravel8 执行Bookings表数据填充时报Undefined variable错误
问题1:语法错误(直接触发Undefined variable报错的核心原因)
你在BookingsSeeder.php第73行的代码多写了一个$符号,双$属于PHP可变变量语法,你没有定义对应名称的变量自然触发未定义报错:
// 错误写法 $Cancelled->bookingstatus()->attach($$Cancelledstatus);
修正为:
// 正确写法 移除多余的$ $Cancelled->bookingstatus()->attach($Cancelledstatus);
问题2:填充器执行顺序错误
你在DatabaseSeeder.php中先调用了BookingsSeeder,后调用BookingstatusSeeder,会导致订单填充时状态数据还未插入数据库,关联操作会失败,调整调用顺序:
// 错误顺序 $this->call([ BookingsSeeder::class, BookingstatusSeeder::class, ]); // 正确顺序 先插入状态数据,再处理订单关联 $this->call([ BookingstatusSeeder::class, BookingsSeeder::class, ]);
问题3:Factory代码存在多处无效调用
你当前的BookingsFactory中使用了Faker不存在的属性,且字段重复定义,运行时会抛出额外错误,修正如下:
public function definition() { return [ 'is_booking'=>3, // 移除重复定义的is_booking=0,保留你需要的取值 'full_name'=>$this->faker->unique()->name, 'location'=>$this->faker->address, // 替换不存在的location属性 'phone'=>$this->faker->phoneNumber, // 替换不存在的number属性 'email'=>$this->faker->safeEmail, 'date'=>$this->faker->date(), 'event_id'=>$this->faker->randomDigitNotNull(), // 替换不存在的event_id属性 'event_details'=>$this->faker->paragraph, ]; }
以上三个问题全部修正后,重新执行php artisan db:seed即可正常填充。
内容的提问来源于stack exchange,提问作者stephen waweru99
相关产品推荐
相关产品推荐

