使用两个外键为 table 创建播种机

Create seeder for a table with two foreignkeys

我试图用两个外键(category_id 和 sub_category_id 用于类别和 sub_categories tables 为产品 table 创建播种机分别)。

Category::all()->each(function ($category) {
        SubCategory::all()->each(function ($sub_category) {
            $faker = Faker::create();
            for($i = 0; $i < 3; $i++) {
                DB::table('products')->insert([
                    'product_name' => $faker->name,     
                    'product_description' =>  $faker->sentence,
                    'product_price' =>  rand(100, 1000),
                    'product_quantity' =>  rand(10,100),
                    'category_id' => $category->id,
                    'sub_category_id' =>  $sub_category->id,
                ]);
            }
        });
    });

试过了,但它返回

错误

Undefined variable: category

我可以只使用 sub_category 创建播种机,但我还需要使用类别创建。我该怎么做?

您正在使用闭包遍历 SubCategory 模型中的 each 项。 $category 变量的初始化超出了闭包的范围。为了访问 $category,您需要使用 use 关键字使其可用:

SubCategory::all()->each(function ($sub_category) {...});

SubCategory::all()->each(function ($sub_category) use ($category) {...});

如您所知,您正在将匿名函数传递给 each() 方法。匿名函数无法访问其范围之外的变量。

您必须以这种方式将 $category 变量传递给 SubCategory 的 each() 方法:

Category::all()->each(function ($category) {
    SubCategory::all()->each(function ($sub_category) use ($category) {
        // now you have access to the $category
    });
});

如您所见,我通过 use ($category) 将其传递给函数。