私はLaravel
が初めてで、Laravel Documentations
といくつかのチュートリアルビデオをフォローしています。ただし、このphp artisan migrate
コードをローカルCMD Prompt
で実行していますが、phpmyadmin
にDatabase Table
を作成していません。 stackoverflow
にはこれに関連する同様のトピックがいくつかありますが、私の問題を解決できるものはありません。この重複をマークしないでください。
OK、このようになります。このコードを実行します
php artisan make:migration create_student_table --create=student
新しいファイルが移行フォルダーに2016_04_08_061507_create_student_table.php
として作成されます
そのファイルで私はこれを実行しますcode
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateStudentTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('student', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string('name', 20);
$table->string('email', 255);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('student');
}
}
次に、cmd
でphp artisan migrate
を実行しますが、student
テーブルを作成しませんでした。代わりに、このメッセージが表示されています
[PDOException] SQLSTATE [42S01]:ベーステーブルまたはビューは既に存在します:1050テーブル 'users'は既に存在します
上記と同様の方法を使用して、数日前にusers
テーブルを作成しました。ただし、新しいstudent
テーブルは作成されていません。ここに何か欠けていますか?前もって感謝します。
つまり、Laravelは最初にusers
テーブル移行を実行しようとしています。開発中で、データを保持する必要がない場合は、users
テーブルを実行してからphp artisan migrate
[〜#〜] edit [〜#〜]
新しい移行ファイルを実行する前に、既にデータベース\移行フォルダから移行を実行して移動します。新しい移行を実行した後、以前の移行に戻ります。
つまり、すでにphp artisan migrate
一度、テーブルはデータベースに既に存在します。時々composer dump-autoload
職人が嘘をついている場合。
そのため、編集して実行する前に最後の変更をロールバックする必要がありますphp artisan migrate
。ロールバックするには、php artisan migrate:rollback
また、すべての変更を削除する場合は、php artisan migrate:reset
。
有る php artisan migrate --force
強制的に移行を強制的に実行します。
これらのすべての手順を実行した後、移行を実行できない場合、その開発環境の場合は、データベースを削除してデータベースを再度作成し、php artisan migrate
。
私はLaravel setup(mac os Sierra 10.12.16)で同様の問題を抱えており、atomでMAMPを使用し、最終的な解決策を見つけられませんでした。次の手順に従いました。
ローカル環境をセットアップするときに、次の手順を使用すると、後で移行の問題が発生しないことがわかりました。
IN AppServiceProvider.php add the following code:
use Illuminate\Support\Facades\Schema;
public function boot()
{
//
Schema::defaultStringLength(191);
}
then in database.php:
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
THEN FINALLY IN .env:
DB_CONNECTION=mysql
DB_Host=localhost
DB_PORT=
DB_DATABASE=hackable
DB_USERNAME=root
DB_PASSWORD=root
最終的にセットアップを正しくするのに数日かかったので、これが誰かを助けることを願っています:)
ユーザーの移行権はありますか?その場合、ユーザー作成テーブルを次の中に挿入します。
if(!Schema::hasTable('users')) ...
データベースにはすでにこのテーブルがあります。ドロップして、laravel artisanで作成してください。
なぜわざわざ?
php artisan migrate:fresh
を使用できます。これにより、現在のユーザーテーブルが無視され、新しいテーブルが再作成されます。
MAMPサーバーを使用している場合、データベース接続のためにこのエラーが発生することがあります。これはポート番号のためです。通常、MAMPを使用している場合、mysqlデータベースのポート番号は8889であり、設定で変更し、artisanコマンドを実行する必要があります。