web-dev-qa-db-ja.com

Container.phpの752行目に入る:Laravelでロールをシードしようとすると、クラスRoleTableSeederは存在しませんエラー

現在、アプリケーションのロールを作成しようとしていますが、残念ながら問題が発生しています。 php artisan merge --seedを実行するたびに、タイトルに書いたエラーが発生します。正直なところ、名前のような単純なものを台無しにしたような気がしますが、間違いを見つけることができません。助けていただければ幸いです。

User.phpモデル:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;


class User extends Model implements Authenticatable
{
    public function roles(){
        return $this->belongsToMany('App\Role');
    }
}

Role.phpモデル:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    public function users(){
        return $this->belongsToMany('App\User');
    }
}

ユーザーテーブル:

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_name');
            $table->string('last_name');
            $table->string('username');
            $table->string('password');
            $table->string('email');
            $table->timestamps();
            $table->rememberToken();
        });
    }

役割テーブル:

public function up()
    {
        Schema::create('roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('description')->nullable()->default(null);
            $table->timestamps();
        });
    }

role_userテーブル

public function up()
{
    Schema::create('role_user', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id');
        $table->integer('role_id');
        $table->timestamps();
    });
}

RoleTableSeeder.php

    <?php

use Illuminate\Database\Seeder;
use App\Role;

class RoleTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $role_user = new Role();
        $role_user->name = 'User';
        $role_user->description = "Normal User";
        $role_user->save();

        $role_admin = new Role();
        $role_admin->name = 'Admin';
        $role_admin->description = "Admin User";
        $role_admin->save();
    }
}

UserTableSeeder.php

public function run()
    {
        $role_admin = Role::where('name', 'Admin')->first();

        $user = new User();
        $user->first_name = 'test';
        $user->last_name = 'test';
        $user->username = 'Admin';
        $user->password = bcrypt('test');
        $user->email = '[email protected]';
        $user->save();
        $user->roles()->attach($role_admin);
    }

DatabaseSeeder.php

public function run()
    {
        $this->call(RoleTableSeeder::class);
        $this->call(UserTableSeeder::class);
    }
}
6
Bobimaru

コメントで述べたように:

実行:composer dump-autoload

Composer\Exception\NoSslException例外がスローされた場合、composer config -g -- disable-tls trueの前にcomposer dump-autoloadを実行する必要がある場合があります。

10
Amade

上記と同じ問題が発生しましたcomposerコマンドではうまくいきませんでした。

on Laravel 5.5私は走った

 php artisan cache:clear

そして、新しく作成したシーダークラスがすべて見つかりました

1
Edwin Krause

私はPH7.2。*とLaravel5.5。*で同じ問題に直面しました。

非常に簡単な解決策-名前空間を使用します。

php artisan db:seed --class=Modules\{moduleName}\Database\Seeders\{className}DatabaseSeeder

ここもまた:

$this->call('Modules\{moduleName}\Database\Seeders\{className}TableSeeder');
0
Enot