Laravel 8 的问题:在 null 上调用成员函数 count()

1 php laravel laravel-8

我是 Laravel 的新手,当我尝试使用工厂在数据库表中生成一些信息时出现错误。

\n
\n

在 \nvendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/HasFactory.php:17 上调用 null " 上的成员函数 count()。

\n
\n

也许有人遇到了同样的问题?如果有人可以提供帮助,我将不胜感激。以下是某些元素的代码:

\n

播种机

\n
class UsersTableSeeder extends Seeder\n{\n    public function run()\n    {\n        Users::factory()->count(30)->create();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

工厂

\n
class UploadInfoFactory extends Factory\n{\n    protected $model = Users::class;\n\n    public function definition()\n    {\n        return [\n            'Name' => $this->faker->name,\n            'Birthday' => $this->faker->date('d-m-Y'),\n            'Phone number' => $this->faker->phoneNumber,\n            'Phone balance' => $this->faker->numberBetween(-50,150),\n        ];\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

数据库播种器

\n
class DatabaseSeeder extends Seeder\n{\n    public function run()\n    {\n        $this->call(UsersTableSeeder::class);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

移民

\n
class CreateInfoUsers extends Migration\n{\n    public function up()\n    {\n        Schema::create('info_users', function (Blueprint $table) {\n            $table->integerIncrements('id');\n            $table->string('name',100);\n            $table->date('Birthday');\n            $table->string('Phone number',100);\n            $table->string('Phone balance',100);\n        });\n    }\n}  \n
Run Code Online (Sandbox Code Playgroud)\n

当我们输入 php artisan db:seed 时,bash 中弹出的错误代码:

\n
Call to a member function count() on null at vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/HasFactory.php:17\n     13\xe2\x96\x95     public static function factory(...$parameters): Factory {\n     14\xe2\x96\x95         $factory = static::newFactory() ?: Factory::factoryForModel(get_called_class());\n     15\xe2\x96\x95 \n     16\xe2\x96\x95         return $factory\n  \xe2\x9e\x9c  17\xe2\x96\x95                     ->count(is_numeric($parameters[0] ?? null) ? $parameters[0] : null)\n     18\xe2\x96\x95                     ->state(is_array($parameters[0] ?? null) ? $parameters[0] : ($parameters[1] ?? []));\n     19\xe2\x96\x95     }\n     20\xe2\x96\x95 \n     21\xe2\x96\x95     /**\n
Run Code Online (Sandbox Code Playgroud)\n

Gab*_*rra 12

这可能会帮助其他人,因为我的问题有所不同。在为数据库做种时,Laravel 打印出了 @Yurii 遇到的相同错误。

Seeding: Database\Seeders\ProfileSeeder

   Error 

  Call to a member function count() on null

  at vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/HasFactory.php:18
Run Code Online (Sandbox Code Playgroud)

事实上,我的artisan控制台无法为我的配置文件模型创建工厂

Seeding: Database\Seeders\ProfileSeeder

   Error 

  Call to a member function count() on null

  at vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/HasFactory.php:18
Run Code Online (Sandbox Code Playgroud)

经过几分钟的调查,我发现我忘记在configure方法中返回工厂

$ php artisan tinker
>>> use Illuminate\Database\Eloquent\Factories\Factory;
>>> Factory::factoryForModel(Profile::class);
=> null
Run Code Online (Sandbox Code Playgroud)

所以,当实例化Factory时,configure调用了该方法,但没有返回Factory!退货解决了这个问题。