【问题标题】:Laravel factory seeding errorLaravel工厂播种错误
【发布时间】:2017-08-02 19:32:57
【问题描述】:

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

【问题讨论】:

  • 您能否也发布您看到的错误?

标签: php laravel-5.4


【解决方案1】:

1) 确保:

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

否则你需要像这样传递它:

'user_id' => $userRandom->id


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

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

您也可以使用 create 方法将新模型保存在一行中。 插入的模型实例将从该方法返回给您。 但是,在这样做之前,您需要在模型上指定一个可填充或受保护的属性,因为所有 Eloquent 模型都默认防止批量赋值。

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

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

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 2020-03-18
    • 2016-10-17
    • 2017-04-07
    • 2015-08-26
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多