Генерация начальных данных с отношением - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу сгенерировать начальные данные для некоторых книг, и каждая книга будет иметь рейтинг для пользователя.Я не получаю желаемого результата, когда запускаю 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);
    });
}

Неправильное поведение Этот код возвращает книгу с несколькими оценками от одного пользователя

Правильное поведение Книга должна иметь только один рейтинг на пользователя

Как я могу исправить свой код для достижения этой цели?

1 Ответ

0 голосов
/ 19 сентября 2018

Попробуйте установить 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...