Как заполнить фиктивные данные базы данных, используя tinker с двумя циклами каждый - Laravel PHP

Я пытаюсь заполнить свою базу данных mysql командами tinker и изо всех сил пытаюсь объединить два цикла...

У меня есть таблица фильмов, пользователей и рейтингов. Я хочу заполнить базу данных 10 фильмами, 3 пользователями и для каждого пользователя рейтингом для каждого фильма.

Я помещаю данные в две таблицы пользователей и фильмов и сохраняю их в $movies и $users. И попробуйте создать 3 рейтинга с user_id и movie_id для каждого фильма со следующими строками.

$users = factory('App\User',3)->create();
$movies= factory('App\Movie',10)->create();
$movies->each(function($movie){ $users->each(function($user){ factory('App\Rating',3)->create(['movie_id'=>$movie->id,'user_id'=>$user->id]);}); });

эхо $movies и $users показывают мне, что данные там. Последняя строка возвращает мне ошибку: Уведомление HP: неопределенная переменная: пользователи в строке 2

попытался упростить синтаксис для тестирования:

$movies->each(function ($movie) {$users->each(function($user) {echo $movie;});});

с той же ошибкой.

Я предполагаю, что переменная $users не определена внутри первой функции? Должен ли я определять $users внутри первой функции? Как мне это сделать, если я не хочу создавать 3 новых пользователя для каждого фильма? Может быть, я могу каким-то образом использовать цикл for, чтобы перебирать пользователей и таким образом получать идентификаторы пользователей?

заранее спасибо за помощь


person Marco    schedule 26.10.2017    source источник


Ответы (1)


Обязательно use ($users) тоже. Вам нужно объявить переменные, используемые вне области действия функции при использовании Closures в PHP!

$movies->each(function($movie) use ($users){ 
    $users->each(function($user) use ($movie){ 
        factory('App\Rating',3)
     ->create(['movie_id'=>$movie->id,'user_id'=>$user->id]);
    }); 
});
person manniL    schedule 26.10.2017