web-dev-qa-db-ja.com

Laravel移行時に致命的なエラークラスが見つかりません

  1. artisan migrate:resetを実行しました。
  2. これらのテーブルが不要になったため、移行ファイルの一部を削除しました。
  3. composer dump-autoloadに続いてartisan dump-autoloadを実行しました
  4. artisan migrateを実行しましたが、このエラーが引き続き発生します。

    PHP致命的エラー:クラス 'Foo'が/vagrant/LaravelBackend/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.phpで297行目に見つかりません

やってみました:

  • composer dump-autoloadartisan dump-autoloadを再度実行します(artisan clear-compiledも使用)
  • 移行テーブルを削除して、artisan migrate:installを実行します
  • ベンダーとcomposer.lockファイルを削除して、composer installを実行します
  • クラスFooのPHPStormでプロジェクト内を検索します。何も見つかりませんでした。

    同じエラーが引き続き発生します。それが関連する可能性がある場合、4.2に更新して以来、これを実行するのは初めてです。私が探している他の何か?

19
Wistar

私は私の問題を解決しました

  1. すべての移行を削除する
  2. ランニング composer dump-autoload
  3. それらを1つずつ追加し直してphp artisan migrate
  4. Laravelがエラーをスローする原因となったものを削除する
  5. 新しい移行を作成して、削除された移行を置き換えます

なぜそれが機能したのかはわかりませんが、過去にこれらの問題のある移行のクラス名を変更した可能性があります。

また、移行の名前を初期名(致命的なエラーでスローされた名前)に変更すると、一部の移行でも機能することがわかりました。

25
Wistar

私もこの問題を抱えていました。覚えておく必要があります:クラス名はファイル名に従っている必要があります。単純なファイル名の変更は私を助けました:)

たとえば、ファイル「2014_12_08_100923_create_items_tables.php」では、キャメルケースの単語を使用した「CreateItemsTables」という名前のクラスである必要があります。

33
Juljan

私もこれに遭遇し、解決策は上記のすべてとは異なりました。失敗した理由は、ファイル名がまだDBの移行テーブルに記載されていたためです。一意の列がなかったため、PHPMyAdminで削除できず、CLIルートを取得する必要がありました。

ルートとしてサーバーにログインします。次を入力します。

mysql -p database_name

(現在、パスワードの入力を求められます。ここから先は、すべてがmysql>で始まります。これは、単にMysql環境にいることを意味します。

select * from migrations;

削除した移行ファイルを探して、名前をコピーします。

delete from migrations where migration = '2015_07_21_000119_create_some_table';

影響を受ける1行について何かを言及する必要があります。最初のコマンドをもう一度入力して、消えたことを確認します。

select * from migrations;

入力してMysql環境を終了した場合

exit;

ここで、「php artisan migrate:rollback」をもう一度試してみてください。これは魅力的です:-)

12
Stan

もっと簡単な方法があります。

  1. これらの削除移行を手動で再作成します。 artisan make:migration
  2. 実行artisan migrate:resetロールバックする
  3. 作成したダミーの移行ファイルを削除します。
  4. 実行artisan migrate:refresh
4
John Mccandles

これは少し過去のことですが、実際にはもっと良い方法があります。ターミナルで次のコマンドを実行し、自由に削除してください:

~$ php artisan clear-compiled;php artisan cache:clear;php artisan config:clear;php artisan debugbar:clear;php artisan view:clear;php artisan optimize

通常のタスクを実行するには、artisan-clearという名前の実行可能ファイルを作成します。

#!/bin/bash

php artisan clear-compiled
php artisan cache:clear
php artisan config:clear
php artisan debugbar:clear
php artisan view:clear
php artisan optimize
3
YahyaE

実際の解決策は、翻訳に正しい命名を使用することです。あなたはまだする必要があるかもしれません

composer dump-autoload

移行ファイルは次のようにする必要がありますYYYY_MM_DD_000000_create_some_table.phpおよび内部のクラス名は

class CreateSomeTable extends Migration{}

2
xatzistnr

バージョン5.1.3の同じ問題が私を修正します:

  • データベースのすべてのテーブルを削除
  • php artisan migrate:status

出力:No migrations found. OK

  • php artisan migrate:install
  • pHPアーティザンの移行

出力は次のとおりです。

Migrated: 2016_11_24_093015_dt_some_table
Migrated: 2016_12_05_141004_dt_some_table
Migrated: 2016_12_07_110518_dt_some_table
Migrated: 2016_12_08_141807_dt_some_table
Migrated: 2016_12_13_090832_dt_some_table

この問題は解決されました

1
Qh0stM4N

私にとっての解決策は、移行中のクラス名がなんとなく小文字で始まったことでした。クラス名をすべて大文字に変更したら、composer dump-autoload、それは私のために働いてしまいました。これはLaravel 5.1を使用しています。

1
Bay879

私はこれが好きでした:1。データベースからの移行テーブルから行が存在しない移行を削除しました2.そしてコマンドを実行します

これは私の問題を解決するのに役立ちました。

*すべてのデータはデータベーステーブルから削除されます

1
Abduhafiz

職人がまったく機能せず、コマンドを実行してもこのメッセージが表示される場合は、config.phpファイルbootstrap/cacheフォルダー。

再度実行した後

php artisan config:cache
0
Mihai Crăiță

同じ問題がありました。 _php artisan migrate:reset_をヒットしていたとき、_Class 'CreateImagesTable' not found_を取得しました。そして_composer dump-autoload_は助けになりませんでした。

私の解決策は非常に簡単でした:

  1. _php artisan make:migration create_images_table --create=images_
  2. _composer dump-autoload_
  3. それから私は得た:SQLSTATE[HY000]: General error: 1 no such table: images (SQL: drop table "images")
  4. sqliteで次のように入力しました:CREATE TABLE `images`(...>` id` INTEGER ...>);
  5. そして_php artisan migrate:reset_
  6. 今、私は再び幸せです
0