2017-01-30 40 views
0

私は自分のprojectControllerで外部キーを使用しようとしています。これは、それが所属するドメインの名前を取得するためです。しかし、私はこのコマンドを実行しようとすると:php artisan db:seed --class = ProjectTableSeeder。このエラーが発生しました: 'domain_id'にデフォルト値がありません。フィールドにはデフォルト値がありません。外部キー

いいえ、どこから来たのですか?

この私の移行create_project_table:

public function up() 
{ 
    Schema::create('projects', function (Blueprint $table) { 
     $table->increments('id', true); 
     $table->string('title'); 
     $table->string('code');   
     $table->integer('domain_id')->nullable(); 
     $table->foreign('domain_id')->references('id')->on('domains'); 

     $table->timestamps(); 
    }); 
} 

Project_Controller:

public function create() 
{ 
    // 

    $arrondissements = Arrondissement::pluck('arrondissement', 'id'); 
    return view('pros.create', compact('arrondissements')); 
} 
+2

あなたは 'ProjectTableSeeder'クラスのコードを共有できますか? –

+0

'nullable()'制約を追加する前にマイグレーションを実行したようです...新しいマイグレーションで制約を追加するか、または編集したマイグレーションでテーブルを再作成するかのどちらかです。このシナリオ。 –

+0

@ArtenesNogueira ProjectTableSeederを確認しましたが、domain_idを追加するのを忘れました。だから問題を解決しました。 ありがとうございます。 – Naj

答えて

0

エラーメッセージ'domain_id' doesn't have a default valueは、あなたが実際にnullable()制約を追加した前にあなたが

$ php artisan migrate 

を実行していることを示唆しています外部キー。ほとんどのデータベースでは、nullable列のデフォルト値はNULLです。

これを解決するには、テーブルを再作成することをお勧めします。つまり、データベース全体をすべてのテーブルにドロップし、migrateを再度実行してください。これはあなたがあなたのデータを失う余裕がある場合のみです。

これ以外の場合は、nullableという制約を追加してテーブルを変更する別の移行を作成できます。あなたはおそらく同様にあなたのデータを更新する必要があります。

関連する問題