Создать сеялку для стола с двумя иностранными клавишами - PullRequest
0 голосов
/ 21 апреля 2020

Я пытался создать сеялку для таблицы Products с двумя внешними ключами (category_id и sub_category_id для категорий и таблиц sub_categories соответственно).

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

Пробовал это, но он возвращает мне ошибку

Неопределенная переменная: категория

Я могу создать сеялку только с подкатегорией, но я необходимо создать с категорией, а также. Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Как вы знаете, вы передаете анонимную функцию методу 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) функции.

0 голосов
/ 21 апреля 2020

Вы используете замыкание для элемента go - each в модели SubCategory. Инициализация переменной $category находится вне области действия замыкания. Чтобы получить доступ к $category, необходимо сделать его доступным с помощью ключевого слова use:

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

до

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