Home > Net >  db:seed can't find factory() method
db:seed can't find factory() method

Time:11-27

I'm trying to seed two tables with the following code:

<?php

namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Foundation\Auth\User;
use App\Models\Role;

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

        $roles = [
            'dps',
            'tank',
            'healer'
        ];

        foreach ($roles as $role) {
            Role::create([
                'name' => $role,
            ]);
        }

        foreach(User::all() as $user) {
            foreach (Role::all() as $role) {
                $user->$roles()->attach($role->id);
            }
        }
    }
}

using php artisan db:seed, but its returning Call to undefined method Illuminate\Foundation\Auth\User::factory().

Going through User model, I have the following:

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Laravel\Jetstream\HasProfilePhoto;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens;
    use HasFactory;
    use HasProfilePhoto;
    use Notifiable;
    use TwoFactorAuthenticatable;

    /**
     * The attributes that are mass assignable.
     *
     * @var string[]
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
        'two_factor_recovery_codes',
        'two_factor_secret',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    /**
     * The accessors to append to the model's array form.
     *
     * @var array
     */
    protected $appends = [
        'profile_photo_url',
    ];

    public function monstros() {
        return $this->hasMany('App\Models\Monstro');
    }

    public function arsenais() {
        return $this->hasMany('App\Models\Arsenal');
    }

    public function itens() {
        return $this->hasMany('App\Models\Item');
    }

    public function roles() {
        return $this->belongsToMany(Role::class);
    }
}

Where we can clearly see it's calling for the Factory method with use HasFactory

What am I missing here?

Also tried to restart artisan, update the framework, dump-auto load, none of those helped.

CodePudding user response:

You are calling the wrong class instead of calling the App\Models\User you are calling the Illuminate\Foundation\Auth\User. Which has the same name. You can take a look at the namespaces above.

  • Related