【问题标题】:How to seed a database dummy data using tinker with two each loops - Laravel PHP如何使用每个循环的 tinker 为数据库虚拟数据播种 - Laravel PHP
【发布时间】:2018-04-08 07:03:41
【问题描述】:

我尝试使用 tinker 命令为我的 mysql 数据库播种,并且正在努力组合两个 each 循环...

我有一个表格电影、用户和收视率。我想为数据库播种 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]);}); });

回显 $movies 和 $users 显示数据在其中。 最后一行给了我一个错误: HP 通知:未定义变量:第 2 行的用户

试图简化测试的语法:

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

同样的错误。

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

提前感谢您帮助我

【问题讨论】:

    标签: php laravel tinker


    【解决方案1】:

    也请务必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]);
        }); 
    });
    

    【讨论】:

      猜你喜欢
      • 2017-12-01
      • 2021-03-05
      • 2015-09-25
      • 2018-09-06
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      相关资源
      最近更新 更多