调用未定义的方法 App\Models\Category::factory() laravel

cla*_*ame 21 php laravel

我遇到了上述错误,这是复制日志

\n
php artisan db:seed\n\n   BadMethodCallException\n\n  Call to undefined method App\\Models\\Category::factory()\n\n  at vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:50\n     46\xe2\x96\x95      * @throws \\BadMethodCallException\n     47\xe2\x96\x95      */\n     48\xe2\x96\x95     protected static function throwBadMethodCallException($method)\n     49\xe2\x96\x95     {\n  \xe2\x9e\x9c  50\xe2\x96\x95         throw new BadMethodCallException(sprintf(\n     51\xe2\x96\x95             'Call to undefined method %s::%s()', static::class, $method\n     52\xe2\x96\x95         ));\n     53\xe2\x96\x95     }\n     54\xe2\x96\x95 }\n\n  \xe2\x80\xa2 Bad Method Call: Did you mean App\\Models\\Category::toArray() ?\n\n      +3 vendor frames\n  4   database/seeders/DatabaseSeeder.php:38\n      Illuminate\\Database\\Eloquent\\Model::__callStatic()\n\n      +22 vendor frames\n  27  artisan:37\n      Illuminate\\Foundation\\Console\\Kernel::handle()\n
Run Code Online (Sandbox Code Playgroud)\n

这是databaseseeder.php 类,因为存在错误:

\n
<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Category;\nuse App\\Models\\Product;\nuse App\\Models\\Transaction;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Seeder;\n\nuse Illuminate\\Support\\Facades\\DB;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Seed the application's database.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        // \\App\\Models\\User::factory(10)->create();\n\n        DB::statement('SET FOREIGN_KEY_CHECKS=0');\n\n        User::truncate();\n        Category::truncate();\n        Product::truncate();\n        Transaction::truncate();\n        DB::table('category_product')->truncate();\n\n        $cantidadUsuarios = 200;\n        $cantidadCategories = 30;\n        $cantidadProductos = 1000;\n        $cantidadTransacciones = 1000;\n\n        \\App\\Models\\User::factory()->count($cantidadUsuarios)->create();\n        \\App\\Models\\Category::factory()->count($cantidadUsuarios)->create();\n\n        \\App\\Models\\Product::factory()->count($cantidadTransacciones)->create()->each                                                                                           (\n            function ($producto) {\n                $categorias = Category::all()->random(mt_rand(1, 5))->pluck('id');\n                $producto->categories()->attach($categorias);\n            }\n        );\n\n        \\App\\Models\\Transaction::factory()->count($cantidadTransacciones)->create();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

有错误行:

\n
\\App\\Models\\Category::factory()->count($cantidadUsuarios)->create();\n
Run Code Online (Sandbox Code Playgroud)\n

这里我们得到了类别类:

\n
<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Category extends Model\n{\n    public $table = "categories";\n\n    protected $fillable = [\n        'name',\n        'description',\n    ];\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这里我们得到了类别工厂:

\n
<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Category;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass CategoryFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Category::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            //\n             'name' => $this->faker->word,\n            'description' => $this->faker->paragraph(1),\n        ];\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是类别迁移:

\n
<?php\n\nuse App\\Models\\Product;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCategoriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('categories', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('description', 1000);\n            $table->integer('quantity')->unsigned();\n            $table->string('status')->default(Product::PRODUCTO_NO_DISPONIBLE);\n            $table->string('image');\n            $table->integer('seller_id')->unsigned();\n            $table->timestamps();\n\n            $table->foreign('seller_id')->references('id')->on('users');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('categories');\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我发布了您需要的所有内容,因为我是新手,而且找不到问题。

\n

IGP*_*IGP 47

从 Laravel 8 开始,您需要使用模型的工厂特征才能使该factory()方法可用。

class Category extends Model
{
   use HasFactory;

   ...
}
Run Code Online (Sandbox Code Playgroud)

  • @nice_dev 这个特性在 laravel 7 中不存在。事实上,定义工厂的方式在 laravel 8 中进行了彻底修改。对于 laravel 7,您需要使用 `Category::factory()-&gt;create();` 来代替使用`factory()`帮助器,例如`factory(Category::class)-&gt;create();`。不过我建议升级。你拖得越久,事情就会变得越困难。 (2认同)

Arm*_*gar 13

请遵循以下代码:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use HasFactory;
}
Run Code Online (Sandbox Code Playgroud)