Мои сомнения насчет заводов и семян. Я пытаюсь выполнить миграции с семенами, и у меня возникает следующая проблема. Call to undefined method Database\Factories\PostFactory::faker()

Я не очень понимаю, где сделать звонок, если в отдельном файле, например PostSeeds, или как я это делаю здесь.

Это основной файл DatabaseSeeder.php

<?php

namespace Database\Seeders;

use App\Models\Category;
use App\Models\Post;
use App\Models\User;
use Illuminate\Support\Facades\Storage;


use Illuminate\Database\Seeder;


class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // \App\Models\User::factory(10)->create();

        Storage::makeDirectory('posts');

        User::create([
            'name' => 'Fernando',
            'email' => 'cainuriel@gmail.com',
            'password' => '$2y$10$.CjCfp.mzo.AUMPZj0n7mOK3zU6QmrabKXwaYcHNFtK1qWHRqf4Xe',
        ]);

        Category::create([
            'name' => 'Plagas',
            'slug' => 'plagas',

        ]);

        Category::create([
            'name' => 'Enfermedades plantas',
            'slug' => 'enfermedades-plantas',

        ]);

        Category::create([
            'name' => 'Cultivo ecológico',
            'slug' => 'cultivo-ecologico',

        ]);

        Category::create([
            'name' => 'Consciencia ecológica',
            'slug' => 'consciencia-ecologica',

        ]);

        Post::factory(10)->create();
    
        
    }
}

Это главный файл My Postfactory.php, в котором я храню данные фейкеров.

<?php

namespace Database\Factories;

use App\Models\Category;
use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class PostFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Post::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        $name =  $this->faker->unique()->sentence();

        return [
            
            'name' => $name,
            'slug' => Str::slug($name),
            'extract' => $this->faker->text(250),
            'body' => $this->faker->text(2000),
            'status' => 2,
            'category_id' => Category::all()->random()->id,
            'user_id' => 1,
            'url_image' => 'posts'.$this->faker('public/storage/posts', 650, 490, null, false)

        ];
    }
}

Не знаю, будет ли полезно показать миграцию со структурой таблицы

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();

            $table->string('name');
            $table->string('slug');

            $table->text('extract');
            $table->longtext('body');

            $table->enum('status', [1, 2])->default(1); // 1. Borrador. 2. Publicar.

            $table->unsignedBigInteger('user_id');
            $table->unsignedBigInteger('category_id');

            $table->string('url_image')->default('default.png');

            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('category_id')->references('id')->on('categories');

            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}
0
Fernando López 4 Май 2021 в 17:41

1 ответ

Лучший ответ

Убедитесь, что у вас есть типаж use HasFactory в модели Post, и, поскольку вы используете laravel 8, замените свой url_image в Postfactory.php следующим:

'url_image'  => $this->faker->image('public/storage/posts', 650, 490, null, false)
1
Abdullah Shakir 4 Май 2021 в 15:24