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

Laravel执行php artisan migrate --seed报错:factory()函数未定义

解决Laravel执行php artisan migrate --seed时factory()函数未定义的问题

问题原因

Laravel 8及后续版本移除了全局的factory()函数,原有工厂调用方式被废弃,改用模型类静态调用的新语法,你的报错正是使用旧写法导致的。

解决方案

1. 修改UserSeeder中的代码

将UserSeeder.php里的旧写法:

factory(User::class, 1)->create();

替换为Laravel 8+的新写法:

User::factory()->count(1)->create();

如果仅需创建单条数据,可简化为:

User::factory()->create();

2. 确保模型工厂文件存在且配置正确

检查项目database/factories/UserFactory.php文件是否存在,且正确关联User模型,示例代码如下:

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    protected $model = User::class;

    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // 默认密码password
            'remember_token' => Str::random(10),
        ];
    }
}

3. (可选)兼容旧写法(不推荐)

如果坚持使用全局factory()函数,可在app/Providers/AppServiceProvider.php的boot()方法中添加全局函数定义,但官方不推荐此做法,建议优先使用新语法:

use Illuminate\Database\Eloquent\Factories\Factory;

public function boot()
{
    Factory::guessFactoryNamesUsing(function (string $modelName) {
        return 'Database\\Factories\\' . class_basename($modelName) . 'Factory';
    });
}

完成修改后,重新运行php artisan migrate --seed即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:15:05