Laravel报错:Call to undefined function Database\Seeders\factory() 求助
解决「Call to undefined function Database\Seeders\factory()」报错
这个报错核心是Laravel 8及以上版本已弃用全局factory()函数,改用模型绑定的工厂写法,以下是针对性解决步骤:
1. 确认Laravel版本
先执行命令查看当前项目版本:
php artisan --version
如果是8.x及以上,必须遵循新的工厂用法规范。
2. 给User模型添加HasFactory trait
打开App\Models\User.php,引入并使用HasFactory trait,这是模型调用工厂的前提:
namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasFactory; // 必须添加这一行 // 模型其他代码... }
3. 修正UserTableSeeder的代码
打开Database\Seeders\UserTableSeeder.php,调整为新版本调用方式,同时确保引入正确命名空间:
namespace Database\Seeders; use App\Models\User; use Illuminate\Database\Seeder; class UserTableSeeder extends Seeder { public function run() { // 两种写法二选一即可 User::factory()->count(10)->create(); // 或更简洁写法:User::factory(10)->create(); } }
4. 检查UserFactory的正确性
打开Database\Factories\UserFactory.php,确保结构符合Laravel 8+规范:
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; // 绑定对应User模型 public function definition() { return [ 'username' => $this->faker->name(), // 若用text(10)需确保数据库username字段长度足够 'email' => $this->faker->unique()->safeEmail(), 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // 默认密码:password 'remember_token' => Str::random(10), ]; } }
5. 执行seed命令并清理缓存
- 执行指定seeder:
php artisan db:seed --class=UserTableSeeder
- 若存在缓存问题,先清理再执行:
php artisan optimize:clear php artisan db:seed --class=UserTableSeeder
内容的提问来源于stack exchange,提问作者user23719376
相关产品推荐
相关产品推荐

