首页 > 解决方案 > 使用显示的命令时出现错误“未定义的变量:工厂”

问题描述

在此处输入图像描述我是 Laravel 的新手,我一直在尝试使用 Laravel 将假数据生成到我的数据库中,但我收到错误未定义的变量:工厂。下面的命令在laravel8中还能用吗?如果不是,还有哪些其他代码可以用来显示数据?

CategoryFactory
$factory->define(Category::class,function (Faker $faker){
     $title = $faker->sentence;

     return[
        'title'=>$this->faker->sentence,
        'slug'=>Str::slug($title),
     ];

}); 
Category Seeders
namespace Database\Seeders;
use App\Models\Category;
use Illuminate\Database\Seeder;

class CategorySeeder extends Seeder
{
    /**
    * Run the database seeds.
    *
    * @return void
    */
    public function run()
    {
        Category::factory()->count(10)->create();
    }
}
Category Migration
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCategoriesTable extends Migration
{
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string("title");
            $table->string("slug",191)->unique();
            $table->timestamps();
        });
    }

    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}

标签: phplaravel

解决方案


在 Laravel 8.X 中,模型工厂已经被重写以使用类。

如果你想在 Laravel 8.X 中使用旧版 Factory,你必须安装包:composer require laravel/legacy-factories.

但是,如果您还没有编写任何工厂,我建议您definition()在类中使用该函数,CategoryFactory如您的示例所示。可以删除其他代码。

有关工厂以及如何编写和使用它们的更多信息,请参阅Laravel 文档。


推荐阅读