【问题标题】:Too few arguments to function Database\Seeders\DatabaseSeeder::Database\Seeders\{closure}()函数 Database\Seeders\DatabaseSeeder::Database\Seeders\{closure}() 的参数太少
【发布时间】:2021-12-27 07:45:36
【问题描述】:

我想测试我的数据库,我已经制作了工厂,以下是我的种子文件中的代码

public function run()
{
    Category::factory()->count(10)->create();

    User::factory()
        ->has(Profile::factory()->state(function (array $attributes, User $user) {
            return ['user_id' => $user->id];
        }))
        ->has(Post::factory()->count(50)
            ->state(function (array $attributes, User $user, Category $category) {
            return ['user_id' => $user->id, 'category_id' => $category->id];
        })
        ->has(Comment::factory()->count(3))
            ->state(function (array $attributes, User $user, Post $post) {
            return ['user_id' => $user->id, 'category_id' => $post->id];
        }))
        ->create();


}

我想创建一些类别和 1 个或多个用户,并附上个人资料、帖子和 cmets。有人可以检查我的代码是否正确,因为它给出了以下错误:

函数参数太少 Database\Seeders\DatabaseSeeder::Database\Seeders{closure}(), 2 传入 D:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Factories\Factory.php 在第 422 行,预计正好 3 个

在 D:\xampp\htdocs\blog\database\seeders\DatabaseSeeder.php:28 24▕ ->has(Profile::factory()->state(function (array $attributes, User $user) { 25▕ 返回 ['user_id' => $user->id]; 26▕})) 27▕ ->has(Post::factory()->count(50) ➜ 28▕ ->state(function (array $attributes, User $user, Category $category) { 29▕ return ['user_id' => $user->id, 'category_id' => $category->id]; 30▕ }) 31▕ ->has(Comment::factory()->count(3)) 32▕ ->state(function (array $attributes, User $user, Post $post) {

1
D:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Factories\Factory.php:422 Database\Seeders\DatabaseSeeder::Database\Seeders{closure}(Object(App\Models\User))

2
D:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Collections\Traits\EnumeratesValues.php:741 Illuminate\Database\Eloquent\Factories\Factory::Illuminate\Database\Eloquent\Factories{closure}(Object(Closure))

【问题讨论】:

    标签: laravel laravel-8 laravel-seeding


    【解决方案1】:

    你的第二次和第三次关闭有问题:

    ->state(function (array $attributes, User $user, Category $category)
    

    您不能期望超过$attributes 和创建的父模型(在本例中为$user)。这个$category参数会导致问题,你需要在闭包之外获取这个对象。

    【讨论】:

      猜你喜欢
      • 2020-12-28
      • 1970-01-01
      • 2021-03-11
      • 2014-06-03
      • 2021-02-28
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      相关资源
      最近更新 更多