我有四个表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);
});
}
}
答案 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