Как заполнить фиктивные данные в базе данных с помощью тинкера с двумя циклами — Laravel Stack Overflow

Я пытаюсь заполнить свою базу данных mysql командами тинкера и изо всех сил комбинирую два цикла каждый …

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

Я помещаю данные в две таблицы: пользователи и фильмы и сохраняю их в $ фильмы и $ пользователи. И попробуйте создать 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]);}); });

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

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

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

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

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

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

0

Решение

Обязательно 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]);
});
});
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]