2017-11-09 29 views
0

mysqlデータベースにデータを送信する簡単なフォームを作成しました。 nameまたはemailと入力すると問題なく動作します。チェックボックスを除く。すべてのチェックボックスがチェックされている場合にはPERFEKT実行されますが、ない場合は - >私はいつもこのエラーが出る:laravelチェックボックスをmysqlデータベースに挿入する '整合性制約違反'

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'checkbox1' cannot be null

ので、私は、フォームを作成するためにこれを得た:

{{Form::label('checkboxlabel', 'Agree')}} 
{{Form::checkbox('checkbox1',1, true)}} 

これは私のマイグレーションファイルです:

Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('email')->unique(); 
     $table->boolean('checkbox1')->nullable(); 

そして、この私のコントローラファイル:

$user = new User; 
    $user->email= $request->input('email'); 
    $user->checkbox1= $request->input('checkbox1'); 

これに関するお手伝いはありますか?単にチェックされているかチェックされていないかの真偽値が必要です。 Thxみんな!

+0

コントローラー全体を貼り付けることはできますか?これは単なるスニペットです – Option

答えて

0

あなたは明示的に行うことができますブールのためnull値を必要としない場合:

// Inside your migration 
$table->boolean('checkbox1')->default(false); 

// Inside the controller 
$user->checkbox1 = $request->input('checkbox1'); 

値が要求に設定されていない場合、またはデフォルトを設定することができます。

// Inside your migration 
$table->boolean('checkbox1'); 

// Inside the controller 
$user->checkbox1 = $request->input('checkbox1', 0); 
1

を変わったことが起こっていますが、あなたの質問に基づいて、私はそれが重要ではないと思っています...

チェック方法がチェックされていないと、サーバーに接続します。そのため、現在のコードを使用すると、checkbox1フィールドは常にtrueまたはnullのいずれかになります。falseは決してサーバーに値として送信されないため、falseになることはありません。あなたはおそらく行うに必要なもの

は...挿入時にデフォルトを適用

$user->checkbox1= $request->input('checkbox1', 0); 

チェックボックスがチェックされていない場合は、あなたのコードが偽と仮定してのようなデータベースに挿入します。この方法です。

ここで起こっている不思議なことについては、その列にnullを挿入することはできないが、移行ではそのフィールドをnullableに設定していることを示すエラーメッセージが表示されます。これらは同じフィールドですか?データベースのスキーマを更新するために再実行せずに移行を更新する可能性はありますか?

show create table usersというステートメントを実行し、そのクエリから返されたものの内容で質問を更新できますか?

+0

$ request-> has( 'checkbox1');ブールを取得する。 – Stefan

+0

Thxみんな、これはうまくいった!更新を再開し、再度移行を開始しました。 –

関連する問題