Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel采集采集方法未按预期工作_Laravel_Laravel Artisan_Faker_Laravel Collection - Fatal编程技术网

Laravel采集采集方法未按预期工作

Laravel采集采集方法未按预期工作,laravel,laravel-artisan,faker,laravel-collection,Laravel,Laravel Artisan,Faker,Laravel Collection,我已经进入了梦幻般的拉威尔世界,目前我正在寻找一个包含虚假数据的数据库进行测试 我有几张桌子要用项目和故事 “故事”表具有列id、名称和项目id(项目表的fk) “我的项目”表中已填充了10个项目的列表。现在我需要用关联的随机项目填充100个故事。我有下面的方法 public function run() { DB::table('stories')->delete(); DB::statement('ALTER TABLE stories AUTO_INCREMENT =

我已经进入了梦幻般的拉威尔世界,目前我正在寻找一个包含虚假数据的数据库进行测试

我有几张桌子要用项目和故事

“故事”表具有列id名称项目id(项目表的fk)

“我的项目”表中已填充了10个项目的列表。现在我需要用关联的随机项目填充100个故事。我有下面的方法

public function run()
{
    DB::table('stories')->delete();
    DB::statement('ALTER TABLE stories AUTO_INCREMENT = 1');

    $faker = Faker::create();

    foreach(range(1, 100) as $index)
    {
        Story::create([
            'reference' => $faker->numberBetween(1, 9999),
            'name' => $faker->sentence(6),
            'project_id' => Project::orderBy(\DB::raw('RAND()'))->get()->first()->pluck('id')
        ]);
    }
}
我不知道这是否是做我需要的事情的最好方式。但是,在执行此代码时,每个故事的project_id都设置为1;第一个项目的id

当我在tinker中执行以下命令时。。。它总是返回1作为id

Project::orderBy(\DB::raw('RAND()'))->get()->first()->pluck('id')
但是当我在tinker中执行下一个命令时

Project::orderBy(\DB::raw('RAND()'))->get()->first()
它每次返回一个随机项目。这很奇怪。因为如果->pull()之前的所有操作都正常,那么pull()应该获取收集的项目id。。。对吗?这是上面的命令返回的结果

<App\Project #000000000c385908000000000de30942> {
   id: 6,
   name: "New Bernadetteton",
   cover_photo_url: "/uploads/covers/horizon-grass.png",
   created_at: "2015-07-08 16:32:15",
   updated_at: "2015-07-08 16:32:15" }
{
id:6,
名称:“新伯纳德顿”,
封面图片url:“/uploads/covers/horizon grass.png”,
创建时间:“2015-07-08 16:32:15”,
更新地址:“2015-07-08 16:32:15”
请参见下面的终端窗口截图,以说明我的意思


发生的事情如下:

  • 使用
    ->first()
    可以获得实际的项目模型

  • 然后你在上面调用
    pluck('id')
    。但是
    模型
    类没有这种方法

  • 因此,与
    模型
    不知道的每个方法一样,它将调用重定向到模型的新查询生成器实例

  • 最后,这个电话在这里结束:

  • 照亮\数据库\雄辩\Builder@value

    public function value($column)
    {
        $result = $this->first(array($column));
    
        if ($result) return $result->{$column};
    }
    
    如您所见,该方法使用
    first()
    运行一个新查询,然后返回所需的行


    现在你真正想要的是:

    1.根本不要使用
    弹拨
    实际上不需要使用该方法,只需访问模型属性即可:

    'project_id' => Project::orderBy(\DB::raw('RAND()'))->first()->id
    
    2.使用
    弹拨
    ,但要正确操作

    顺便说一句,主要方法称为
    value()
    pluck()
    只是一个别名。我建议在新代码中使用
    value()
    。有可能有一天会删除别名。(很明显,这只是一个新版本,升级指南中有一个注释,所以不要惊慌;)

    下面是发生的情况:

  • 使用
    ->first()
    可以获得实际的项目模型

  • 然后你在上面调用
    pluck('id')
    。但是
    模型
    类没有这种方法

  • 因此,与
    模型
    不知道的每个方法一样,它将调用重定向到模型的新查询生成器实例

  • 最后,这个电话在这里结束:

  • 照亮\数据库\雄辩\Builder@value

    public function value($column)
    {
        $result = $this->first(array($column));
    
        if ($result) return $result->{$column};
    }
    
    如您所见,该方法使用
    first()
    运行一个新查询,然后返回所需的行


    现在你真正想要的是:

    1.根本不要使用
    弹拨
    实际上不需要使用该方法,只需访问模型属性即可:

    'project_id' => Project::orderBy(\DB::raw('RAND()'))->first()->id
    
    2.使用
    弹拨
    ,但要正确操作

    顺便说一句,主要方法称为
    value()
    pluck()
    只是一个别名。我建议在新代码中使用
    value()
    。有可能有一天会删除别名。(显然只是在新版本中,并且在升级指南中有说明,所以不要惊慌;)

    谢谢!工作得很好。我现在直接调用->first()方法上的->id。我不知道它引用了模型,只是认为它将结果集减为1(第一个对象)。谢谢!工作得很好。我现在直接调用->first()方法上的->id。我不知道它引用了模型,只是认为它将结果集减为1(第一个对象)。