为什么这台Laravel播种机会失败?

为什么这台Laravel播种机会失败?,laravel,eloquent,Laravel,Eloquent,我有这个简单的播种机功能;我已经编写了工厂,它们很好,所有的模型都正确地定义了关系。它应该创建5个用户,然后在每个用户上添加一张图片 $this->command->info('Creating sample users...'); $usersCollection = factory(App\Models\User::class, 5)->create(); foreach ($usersCollection as $user) { $this->comm

我有这个简单的播种机功能;我已经编写了工厂,它们很好,所有的模型都正确地定义了关系。它应该创建5个用户,然后在每个用户上添加一张图片

$this->command->info('Creating sample users...');

$usersCollection = factory(App\Models\User::class, 5)->create();

foreach ($usersCollection as $user) {

    $this->command->info('Adding pictures to user ' . $user->ID . '...');

    $user->pics()->create(
        factory(App\Models\Pic::class, 1)->make()->toArray()
    );

    $this->command->info('Done with user ' . $user->ID . '...');
};

然而,它只是添加了一个用户,然后在尝试添加图片时遇到了困难。在“添加图片”消息之后,它会挂起很长很长时间,并最终生成此错误消息:

传递给Illumb\Database\Grammar::parameterize()的参数1必须是数组类型,int给定,在第866行的/Users/ericmueller/Sync/Development/dn2/vendor/larvel/framework/src/illumb/Database/Query/Grammars/Grammar.php中调用

当我查看数据库时,我看到5个用户,但在Pics表中什么都没有

我做错了什么


奖金问题-我最终会在DB中植入大约500个用户,每个用户最多有5张图片。这是构造播种机代码的最佳方法吗?

请尝试这样做,因为我有点不明白为什么要将类型为
Pic
的对象转换为
数组

$users = factory(App\Models\User::class, 5)->create();

$users->each(function ($user) {
    $user->pics()->save(
        factory(App\Models\Pic::class)->make()
    );
});

由于我们不确切知道您的
$user->pics()函数的作用,
我有两个不同的选择:

选项1:

您将需要调用
first()
方法,否则您将得到一个集合而不是一个实例

选项2:


创建一个
Pic
实例并设置
user\u id
,然后保存它。

如果这样使用它会发生什么:工厂(App\Models\Pic::class,1)->make()->first()->toArray()
factory(App\Models\Pic::class, 1)->make()->first()->toArray();
$pic = factory(App\Models\Pic::class, 1)->make()->first();
$pic->user_id = $user->id;
$pic->save();