生成具有关系的种子数据
Generating seed data with relationship
我想为一些书籍生成种子数据,每本书都有一个用户评分。当我 运行 我的 db:seed
工厂和播种机
时,我没有得到想要的结果
书厂
use App\Book;
use App\Rating;
use Faker\Generator as Faker;
$factory->define(Book::class, function (Faker $faker) {
return [
'title' => $faker->sentence,
'author' => $faker->name,
'user_id' => 1
];
});
$factory->define(Rating::class, function (Faker $faker) {
return [
'user_id' => 1,
'book_id' => mt_rand(1, 5),
'rating' => mt_rand(1, 5)
];
});
BooksTableSeeder
public function run()
{
// First remove existing books records
Book::truncate();
factory(App\Book::class, 5)->create()->each(function ($book) {
// Add book rating
$ratings = factory(App\Rating::class, 1)->make();
$book->ratings()->saveMany($ratings);
});
}
错误行为此代码returns一本有多个用户评分的书
正确的行为一本书应该只有一个用户评价
我怎样才能更正我的代码来实现这个目标?
尝试在生成评分时设置 book_id:
factory(App\Book::class, 5)->create()->each(function ($book) {
// Add book rating
$ratings = factory(App\Rating::class, 1)->create(['book_id' => $book->id]);
$book->ratings()->saveMany($ratings);
});
我想为一些书籍生成种子数据,每本书都有一个用户评分。当我 运行 我的 db:seed
工厂和播种机
书厂
use App\Book;
use App\Rating;
use Faker\Generator as Faker;
$factory->define(Book::class, function (Faker $faker) {
return [
'title' => $faker->sentence,
'author' => $faker->name,
'user_id' => 1
];
});
$factory->define(Rating::class, function (Faker $faker) {
return [
'user_id' => 1,
'book_id' => mt_rand(1, 5),
'rating' => mt_rand(1, 5)
];
});
BooksTableSeeder
public function run()
{
// First remove existing books records
Book::truncate();
factory(App\Book::class, 5)->create()->each(function ($book) {
// Add book rating
$ratings = factory(App\Rating::class, 1)->make();
$book->ratings()->saveMany($ratings);
});
}
错误行为此代码returns一本有多个用户评分的书
正确的行为一本书应该只有一个用户评价
我怎样才能更正我的代码来实现这个目标?
尝试在生成评分时设置 book_id:
factory(App\Book::class, 5)->create()->each(function ($book) {
// Add book rating
$ratings = factory(App\Rating::class, 1)->create(['book_id' => $book->id]);
$book->ratings()->saveMany($ratings);
});