【问题标题】:Create seeder for a table with two foreignkeys为具有两个外键的表创建播种器
【发布时间】:2020-08-04 06:16:01
【问题描述】:

我试图用两个外键(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 创建播种器,但我也需要使用类别创建。我该怎么做?

【问题讨论】:

  • 为所有三个表创建不同的播种机。然后使用random order 获取随机类别和随机子类别并将其保存在产品中。

标签: laravel migration faker laravel-seeding laravel-factory


【解决方案1】:

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

您必须通过这种方式将$category 变量传递给子类别的each() 方法:

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

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

【讨论】:

  • @MDB 干得好兄弟?
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多