Laravel工厂播种错误

时间:2017-03-12 20:13:45

标签: php laravel-5.4

我有四个表Book,Author,User,Rating其中Author和User表与Book表有多对多的关系,而Rating表有一个带有book和user表的外键。 5创建了作者和用户,现在我想一起创建书籍和评级表,其中user_id和book_id对于书籍和评级表是相同的!我试过这种方式,但这给了我评级工厂的错误!可变范围!怎么解决这个问题?

  

' USER_ID' => $ userRandom,

class BooksTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\Book::class, 2)->create()->each(function ($book) {
            $author = App\Author::all();
            $user = App\User::all();
            $userRandom = $user->random();

            factory(App\Rating::class)->create([
                'book_id' => $book->id,
                'user_id' => $userRandom,
            ]);

            $book->authors()->save($author->random());
            $book->users()->save($userRandom);
        });
    }
}

1 个答案:

答案 0 :(得分:0)

1)确保:

 'user_id' => $userRandom  // keeps exact id. 

否则你需要传递它:

'user_id' => $userRandom->id


2)确保您已定义$fillable模型的Rating属性。

如果您未在$fillable中定义字段名称,则不能只创建并传递一些数组(assoc)。

  

您也可以使用create方法将新模型保存在一行中。   插入的模型实例将从方法返回给您。   但是,在执行此操作之前,您需要在模型上指定可填充或保护属性,因为所有Eloquent模型都会默认防止批量分配。

     

因此,要开始使用,您应该定义哪些模型属性可以进行批量分配。   您可以使用模型上的$ fillable属性执行此操作。

了解Mass Assignment https://laravel.com/docs/5.4/eloquent