You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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))

排查方案

  1. 检查主填充器注册:确认DatabaseSeeder.php中是否调用了CustomersTableSeeder,示例代码如下:
public function run()
{
    $this->call([
        CustomersTableSeeder::class,
    ]);
}

未注册的话,填充器不会被执行。

  1. 调整手机号字段长度:迁移中phone_number为默认长度的字符串,但fake()->phoneNumber()生成的号码可能超出部分数据库的默认字符串长度限制,建议显式指定长度:
$table->string('phone_number', 20)->unique();
  1. 单独执行填充器获取完整报错:运行php artisan db:seed --class=CustomersTableSeeder单独执行该填充器,能得到更详细的错误信息,定位具体问题。

  2. 校验模型与工厂关联:Laravel 8+通过HasFactory trait自动关联模型和工厂,若修改过命名空间或文件位置,需确保路径匹配。

内容的提问来源于stack exchange,提问作者perh23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:30:36