7

簡単に言うと、ローカル マシンで Laravel の移行を完全に台無しにしてしまいました。それらは 100% 使用できません。

私は初めてLaravel 5で作業しているので、いわば、いじって水をテストしているだけです。手動でデータベースをいじったり、マイグレーションを書き直したり、誤ってテーブルを 1 つか 2 つ削除したり (その後、「マイグレーション」テーブル自体を削除したり [doh!]) するまでの間に、私はこの混乱した状態にあり、すべてを開始したいだけです。移行作業を最初からやり直します。しかし、私はそれを行う方法を理解できないようです。

現在、どうしようもない状態に陥っています

たとえば、 を実行したときに古いテーブルの残りがデータベースに残っているとphp artisan migrate:refreshBase table or view already existsエラー メッセージが表示されます。ただし、すべてのテーブルを削除すると、次のエラーが発生します。

Next exception 'Illuminate\Database\QueryException' with message
'SQLSTATE[42S02]: Base table or view not found: 1146 Table
'bsd_status.projects' doesn't exist (SQL: select * from `projects`)' in 
path/to/src/Illuminate/Database/Connection.php:620

次のコマンドを実行しました。

$ php artisan clear-compiled
$ php artisan cache:clear
$ php composer dump-autoload
$ php artisan migrate:install

この作業を正しい順序で行っているかどうかさえわかりません。とにかく、Laravel を完全に再インストールする以外に、すべてのマイグレーションを「すぐに使える」状態に戻すにはどうすればよいでしょうか? どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

11

私が好きだったのは、デバイスで使用しているツールを使用してすべてのテーブルを手動で削除することです。私にとっては、phpmyadmin を使用するだけです。その後、私はそうします。

php artisan migrate:install
php artisan migrate:refresh

これが正式な方法かどうかはわかりませんが、毎回機能します。

phpmyadmin を使用したくない場合は、コマンド ラインから mysql にログインできます。

mysql -u root -p
DROP DATABASE laraveldb;
CREATE DATABASE laraveldb;
于 2015-03-30T05:31:38.190 に答える
4

@Goddardの回答と@nozzlemanのコメントはどちらも非常に役に立ちましたが(私は両方の提案を何度か使用しましたので、ありがとうございます)、解決策は移行とは何の関係もありませんでした。ええと…そもそも私が彼らを台無しにしたという事実を除けば。

とにかく、私は何も問題を解決しなかったので、「本当に難しいと思う」帽子をかぶった. 数分間のろいの後、私は何かに気づきました。単純artisanにコマンドラインから実行した場合でも、設定したルートまたはプロバイダーはすべて「解決」しようとしているように見えました (または、適切な用語が何であれ)。したがって、アプリがブートストラップ/初期化/開始/実行フェーズを開始したときに、欠落しているテーブルからデータを取得しようとする呼び出しがどこかにあったに違いありません。

実際のコードで奇妙なことが起こっていないことを確認することにしたので、ルート ファイル (app/Http/routes.php) とすべてのサービス プロバイダー ファイル (app/Providers/*) をチェックインして、それらのいずれかでモデル データを取得しようとしていたかどうかを確認してください。なんと、app/Providers/AppServiceProvider.php を開いて、これを見つけました。

AppServiceProvider.php

public function boot()
{
    $layout = 'default';

    if ( Request::has('layout') ) {
        $layout = Request::input('layout');
    }

    view()->share('sharedAppData', [
        'layout' => $layout,
        'projects' => App\Project::all() // <- WTF, mate?
    ]);
}

思い出すと、エラー メッセージで問題となっているテーブルの名前は「projects」でした。したがって、起動時にすべてのプロジェクトを取得しようとしていたため、(コマンド ラインまたはその他で) 何を行っても、Eloquent拡張モデル ( App\Project) が単純に存在しないテーブルを探していたため、何も機能しませんでした。もう。

この話の教訓: Laravel は非常に複雑です。私はそれが苦手です。偉大な Jeffery Way の教えに従おうとしても、私は永遠に Laran00b のままです。

于 2015-04-18T18:12:27.250 に答える