将播种数据保存到 Laravel 中的数据库

Saving seeding data to database in Laravel

我正在参加 Laravel 课程。课程本来是laravel 8,结果是30/70laravel 8,laravel 5已经过时了,慢慢更新。问题是将播种数据保存到数据库 (MySQL)。我可以在代码中将 Users 保存到数据库,但不能保存 Blogposts 或评论。博客 post 应该使用所有用户表中的随机用户 ID 进行保存,以便创建 post 的特定用户能够编辑他创建的 post,而不是其他。此外,评论具有相同的故事,但评论被随机分配给 posts。以前曾尝试使用 PHP artisan tinker 将 posts 保存到数据库。

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $users = User::factory()->count(20)->create();
        dd($users->count());
        $posts = BlogPost::factory()->count(50)->make()
            ->each(function ($post) use ($users) {
            $post->user()->associate($users->random())->save();
        });
        $comments = Comment::factory()->count(150)->make()
            ->each(function ($comment) use ($posts) {
            $comment->blog_post_id = $posts->random()->id;
        });
    }
}

进行迁移时,未显示任何错误。对于迁移,我们使用以下内容。

php artisan migrate:refresh --seed

嗯,dd()的意思就是dump and die。因此,您将在用户工厂之后停止种子执行。

只需删除 dd() 并且种子应该按预期执行

<?php
namespace Database\Seeders;
use App\Models\User;
use App\Models\BlogPost;
use App\Models\Comment;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $users = User::factory()->count(20)->create();
        // dd($users->count()); <-- This stops the seed execution
        $posts = BlogPost::factory()->count(50)->make()->each(function($post) use ($users) {
            $post->user()->associate($users->random())->save();
        });
        $comments = Comment::factory()->count(150)->make()->each(function ($comment) use ($posts){
            $comment->blog_post_id = $posts->random()->id;
        });
    }
}