0

我试图用两个外键(category_id 和 sub_category_id 分别用于类别和 sub_categories 表)为 Products 表创建播种器。

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,
                ]);
            }
        });
    });

试过这个,但它返回给我一个错误

未定义变量:类别

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

4

2 回答 2

3

如您所知,您将匿名函数传递给该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)给函数。

于 2020-04-21T13:30:49.503 回答
0

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

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

SubCategory::all()->each(function ($sub_category) use ($category) {...});
于 2020-04-21T13:30:02.473 回答