2017-12-11 17 views
1

user_id = nullを取得するにはどうすればよいですか?Laravel form nullable user_id

ロジック:

私は手動でユーザー情報を埋めるか、ちょうど私の既存のユーザーのいずれかを選択することができ証言を持っている私はThe user id must be a number.エラーを取得マニュアル、ユーザーとの証言を保存しようとすると、問題があります。ここ

は、私の店の方法である:

$this->validate($request, array(
    // rest of code 
    'user_id' => 'nullable|numeric', 
)); 

$testimonial = new Testimonial; 

    // rest of code 
    $testimonial->user_id = $request->input('user_id'); 
    // rest of code 

これは私のフォームである:ここでは

{{ Form::label('user_id', 'User') }} 
<select class="form-control" name="user_id"> 
    <option>Select User</option> 
    @foreach($users as $user) 
    <option value="{{ $user->id }}">{{ $user->username }}</option> 
    @endforeach 
</select> 

は私のスキーマです:

Schema::create('testimonials', function (Blueprint $table) { 
    // rest of code 
    $table->integer('user_id')->unsigned()->nullable(); 
}); 
Schema::table('testimonials', function (Blueprint $table) { 
    // rest of code 
    $table->foreign('user_id')->references('id')->on('users'); 
}); 

は、どのように私はこれにnullを受け入れるように渡すことができますフィールド?

$testimonial->user_id = (int) $request->input('user_id'); 
+0

「選択」があなたが提出するフォームの同じ部分であることを確認してください。 – usrNotFound

答えて

2

エラーメッセージは、データベースの問題ではなく、検証に失敗したことを示しています。あなたのデータベースは、testimonials.user_idがヌル可能なのでヌル値を受け入れます。

デバッグの次のステップは、実際には$request->input('user_id')を確認することです。これを行うには、検証ルールを一時的に無効にする必要があります。

dd($request->input('user_id')); 

値なしのオプションは値としてテキストを使用します。あなたは空の文字列を送信していない、あなたは数値ではない文字列 "Select User"を送信している。代わりに、そのオプションに空の値を持たせるためにあなたのhtmlコードを変更してください。

<option value="">Select User</option> 
+0

ありがとうございます – mafortis

0

変更

$testimonial->user_id = $request->input('user_id');

あなたのuser_idが証言台にforeign keyとして機能しているので、それはまた、usersテーブル内に存在しなければなりません。 レコードを手動で入力しようとすると、ユーザーテーブルに存在しないIDが割り当てられている可能性があります。 foreign keyNULLを同時に使用することはできません。制約を削除するだけで、両方のシナリオで正常に動作します

+0

同じエラー..... – mafortis

-1

+0

既存のユーザーを選択していないときは、その列を空白のままにして、何も割り当てません。 '' – mafortis

+0

[外部キー]制約 – baig772

+0

を削除し、私は存在のユーザー代わりにマニュアルを使用したいのですか? :) – mafortis