Laravel中使用Seeder插入数据失败问题求助
Laravel Seeder 数据插入失败问题求助
执行php artisan migrate:fresh --seed后,customers表已成功创建,但数据未插入数据库。以下是相关代码及报错信息,请求协助排查:
迁移文件代码
public function up() { Schema::create('customers', function (Blueprint $table) { $table->id(); $table->string('first_name', 20); $table->string('last_name', 30); $table->string('email')->unique(); $table->string('phone_number')->unique(); $table->timestamps(); }); }
模型代码
class Customer extends Model { use HasFactory; protected $fillable = [ 'first_name', 'last_name', 'email', 'phone_number' ]; }
工厂代码
class CustomerFactory extends Factory { /** * 定义模型的默认状态 * * @return array<string, mixed> */ public function definition() { return [ 'first_name' => fake()->firstName(), 'last_name' => fake()->lastName(), 'email' => fake()->unique()->safeEmail(), 'phone_number' => fake()->unique()->phoneNumber() ]; } }
填充器代码
class CustomersTableSeeder extends Seeder { /** * 运行数据库填充 * * @return void */ public function run() { Customer::factory(20)->create(); } }
报错信息
at C:\laragon\www\zadanie-rekrutacyjne\vendor\laravel\framework\src\Illuminate\Container\Container.php:1307 1303▕ * @return string 1304▕ */ 1305▕ public function getAlias($abstract) 1306▕ { ➜ 1307▕ return isset($this->aliases[$abstract]) 1308▕ ? $this->getAlias($this->aliases[$abstract]) 1309▕ : $abstract; 1310▕ } 1311▕ 1 C:\laragon\www\zadanie-rekrutacyjne\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:843 Illuminate\Container\Container::getAlias(Object(Illuminate\Database\Eloquent\Collection)) 2 C:\laragon\www\zadanie-rekrutacyjne\vendor\laravel\framework\src\Illuminate\Database\Seeder.php:129 Illuminate\Foundation\Application::make(Object(Illuminate\Database\Eloquent\Collection))
排查方案
- 检查主填充器注册:确认
DatabaseSeeder.php中是否调用了CustomersTableSeeder,示例代码如下:
public function run() { $this->call([ CustomersTableSeeder::class, ]); }
未注册的话,填充器不会被执行。
- 调整手机号字段长度:迁移中
phone_number为默认长度的字符串,但fake()->phoneNumber()生成的号码可能超出部分数据库的默认字符串长度限制,建议显式指定长度:
$table->string('phone_number', 20)->unique();
单独执行填充器获取完整报错:运行
php artisan db:seed --class=CustomersTableSeeder单独执行该填充器,能得到更详细的错误信息,定位具体问题。校验模型与工厂关联:Laravel 8+通过
HasFactorytrait自动关联模型和工厂,若修改过命名空间或文件位置,需确保路径匹配。
内容的提问来源于stack exchange,提问作者perh23
相关产品推荐
相关产品推荐

