如何使用带有两个循环的修补程序为数据库虚拟数据播种 - Laravel PHP

时间:2017-10-26 19:11:53

标签: php laravel tinker

我尝试使用tinker命令为我的mysql数据库播种,并且将每个循环结合起来......

我有桌上电影,用户和评分。我想用10部电影,3个用户和每个用户为每部电影评分数据库。

我将数据放入两个表用户和电影中并将其保存到$ movies和$ users。并尝试使用以下几行为每部电影的user_id和movie_id创建3个等级。

$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]);}); });
回应$ movie和$ users告诉我数据在那里。 最后一行给了我一个错误: HP注意:未定义的变量:第2行的用户

尝试简化测试语法:

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

有同样的错误。

我想是在第一个函数中没有定义$ users变量? 我是否必须在第一个函数中定义$ users?如果我不想为每部电影创建3个新用户,我该怎么做?也许我可以使用for循环以某种方式迭代用户并以这种方式检索用户ID?

提前感谢帮助我

1 个答案:

答案 0 :(得分:4)

一定要use ($users)。在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]);
    }); 
});