web-dev-qa-db-ja.com

Laravel移行:クラス「見つかりません」

Laravel bareboneプロジェクトをMicrosoft Azureにデプロイしていますが、php artisan migrateを実行しようとするとエラーが発生します。

[2015-06-13 14:34:05] production.ERROR:D:\ home\site\vendor\laravel\frameworkにメッセージ 'Class' 'not found'の例外 'Symfony\Component\Debug\Exception\FatalErrorException'があります\ src\Illuminate\Database\Migrations\Migrator.php:328

スタックトレース:

 #0 {main}  

何が問題なのでしょうか?どうもありがとうございました

-編集-

移行クラス

<?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->bigIncrements('id');
            $table->string('name', 50);
            $table->string('surname', 50);
            $table->bigInteger('telephone');
            $table->string('email', 50)->unique();
            $table->string('username', 50)->unique();
            $table->string('password', 50);
            $table->boolean('active')->default(FALSE);
            $table->string('email_confirmation_code', 6);
            $table->enum('notify', ['y', 'n'])->default('y');
            $table->rememberToken();
            $table->timestamps();

            $table->index('username');
        });
    }

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

PSR-4オートローダーユーザー(composer.json)の場合:

移行フォルダーをクラスマップ配列内に保持し、autoloadの下のpsr-4オブジェクト内には含めないでください。移行のメインクラスMigratorはネームスペースをサポートしていません。例えば;

"autoload": {
    "classmap": [
        "app/database/migrations"
    ],
    "psr-4": {
        "Acme\\controllers\\": "app/controllers"
    }
}

次に実行します:

php artisan clear-compiled 
composer dump-autoload
php artisan optimize
  • 最初のものは、すべてのコンパイル済みファイルをクリアします。
  • 2番目はautoload_psr4.phpを更新し、autoload_classmap.phpをほぼ空にします。
  • 3番目はautoload_classmap.phpを更新します。

これ以降、これを再度行う必要はなく、新しい移行はすべて正常に機能します。

88
Umair Ahmed

移行の実行中に「クラスが見つかりません」というエラーが表示された場合は、このコマンドを実行してみてください。

composer dump-autoload 

その後、migrateコマンドを再発行します。公式サイト(#Running Migrations)で詳細を参照してください: http://laravel.com/docs/master/migrations#running-migrations

36
Jambor - MSFT

移行ファイル名がクラス名と同じであることを確認してください。

すなわち:

ファイル名が次の場合:

xxx_151955_create_post_translations_table.php

クラスは次のようになります。

CreatePostTranslationsTable

18

私はしばらく前に同じ問題を抱えていました。どうやらこれは一般的な問題です。Laravelのドキュメントでは次のように示唆されているためです。 http://laravel.com/docs/master/migrations#running-migrations

基本的には、いくつかのcomposerファイルを更新するだけです。単に実行する:

composer dump-autoload

これにより、composer autoloadファイルが更新され、通常の移行を実行できます。最善。

12
jacurtis

私も同じ問題で実行されます。

私にとっての解決策は、移行ファイルを削除し、データベースの「移行」テーブルからレコードを削除することでした。

その後、私は走った

composer dump-autoload

最終的に移行をリセット/ロールバックできました。

8
Al Masum Fahim

移行ファイルの1つを削除しました。 php artisan migrate:rollbackながら、同じ問題に直面しました

次に、composer dump-autoloadを試しました。再び同じことが判明しました。

削除したファイルを復元し、composer dump-autoloadphp artisan migrate:rollbackを試しました。できます。

6
m2j

私にとって問題は、クラス名がCreateModulesProblemsTableである移行に2017_12_15_012645_create_modules_problems.phpという名前を付けたことです。ファイル名に_tableを追加するとすぐに、すべて正常に機能しました。

5
Matthew Park

この質問に答えるのは遅いと思うが、これは誰かを助けるかもしれない。

移行ファイル名を変更した場合は、その内部クラス名について確認してください。

たとえば、移行名を2018_06_10_079999_create_admins_table.phpから2018_06_10_079999_create_managers_table.phpに変更すると、その内部クラス名もCreateAdminsTableからCreateManagerTableに変更する必要があります。

4
Behnam Azimi

Laravel 5.2開発プロジェクトを実稼働環境に移動した後、同様の状況(クラスが見つかりませんというエラー)が発生しました。実動サーバーはクラス「プロジェクト」を探していましたが、コントローラー名はProject.phpでした。ファイルの名前をproject.phpに変更したら、行って良かったです。

3
mediaguru

私は愚かに置きました:

namespace database\migrations;

移行中にcreate_users_table.php [2014_10_12_000000_create_users_table.php]

同様のエラーが発生していました-クラス「CreateUsersTable」が見つかりません。

上部のこの行を削除すると、このエラーが解決しました。

2
Joshua

プロジェクトを移行しようとしたときに、同じクラスが見つからないというエラーが表示されました。時にはそれはあなたを得る単純なものです。私の場合、名前の変更を早い段階で行い、その変更を最後まで伝えなかったため、移行ファイルでクラス名が正しくないことに気付きました。

クラス名を修正した後、composer dump-autoloadを実行すると、問題がなくなりました。

HTH誰か:]

2
Stu

テーブルmigrationsのデータベースの行を削除するだけですで問題が解決します。移行すると表示されなくなります

他の方法は、あなたが望むものに依存するファイルを簡単に作成することです。私の場合、この移行を取り除きたいと思いました。 :)

1
Dimitar

私の場合、データベースの自動インクリメントでした。以前は、1つのエントリを手動で削除しましたが、AUTO_INCREMENTはテーブル内の次のIDよりも1つ多くポイントしていました。

どうやらLaravelはAUTO_INCREMENT- 1を使用して、最後に実行された移行がどれであるかを確認します。

0
By-Jokese

次の2つのファイルに正しいクラス名と移行名が含まれていることを確認してください。

C:\ xampp\htdocs\StuffSpot\vendor\composer\autoload_classmap.php C:\ xampp\htdocs\StuffSpot\vendor\composer\autoload_static.php

0
Abdallah Sakre