Laravel采集采集方法未按预期工作
我已经进入了梦幻般的拉威尔世界,目前我正在寻找一个包含虚假数据的数据库进行测试 我有几张桌子要用项目和故事 “故事”表具有列id、名称和项目id(项目表的fk) “我的项目”表中已填充了10个项目的列表。现在我需要用关联的随机项目填充100个故事。我有下面的方法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 =
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(第一个对象)。