web-dev-qa-db-ja.com

クラス「ユーザー」が見つかりません

したがって、データベースを移行した後、基本的なphp artisan db:seedを試していますが、cmd -[Symfony\Component\Debug\Exception\FatalErrorException] Class 'User' not foundでタイトルエラーが返され続けます

私が試したこと

  • phpdump-クラス更新後の自動ロード
  • php dump-db:seed関数を実行する前に自動ロード
  • 移行をロールバックしてから再実行する
  • 移行をロールバックし、--seed構文を使用して再実行します
  • 「ユーザー」ファイルの名前空間を変更します

以下は移行です

<?php

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

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password', 60);
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}

ここのすべてが正しいと私は信じています、そして今ここにユーザークラスがあります。

<?php namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract {

    use Authenticatable, CanResetPassword;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

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

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = ['password', 'remember_token'];

}

そして最後に、すべてが重要ですデータベースシーダー

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();

        // $this->call('UserTableSeeder');
        $this->call('UserTableSeeder');

        Model::reguard();
    }
}

class UserTableSeeder extends Seeder
{
    public function run()
    {

        DB::table('users')->delete();

        User::create(['email' => '[email protected]']);

    }
}

これが私の完全な構文です。さらにファイルが必要な場合は、それらをリクエストしてください。質問を更新します。

14

ルート名前空間のDatabaseSeederでは、クラスUserを呼び出します。そのため、クラスUserをロードしようとします。ただし、クラスUserの定義は名前空間Appにあります。そのため、DatabaseSeederApp\Userを使用するか、ファイルの先頭にuse App\User;を追加する必要があります。

DatabaseSeeder

<?php

use App\User;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();

        // $this->call('UserTableSeeder');
        $this->call('UserTableSeeder');

        Model::reguard();
    }
}

class UserTableSeeder extends Seeder
{
    public function run()
    {

        DB::table('users')->delete();

        User::create(['email' => '[email protected]']);

    }
}

追伸これは、そのようなクラスがない場合にクラスApp\Userをオートロードできることを前提としています。Illuminateクラスをインポートするだけです。

use Illuminate\Foundation\Auth\User;

ちなみに、職人の出力をデバッグするために私が非常に役立つと思うものがあります。完全なスタックトレースを含む出力メッセージに極端な冗長性を追加するフラグ-vvvを使用する必要があります。

php artisan migrate -vvv
19
Luceos