2016-11-28 19 views
0

ないとき、私は私の宿題のためにlaravel 5.2フレームワークを試していますが、私は接続でデータユニークなルールの主キーの名前の欄にid

QueryExceptionを更新しようとしていたときに私はこのようなエラーが発生しています.PHPライン729:SQLSTATE [42S22]:カラムが見つかりません:1054不明な列 'IDを' に 'where句'

(SQL siswa = 1211 nisnid <> 14から骨材として選択数(*))

私のフォームの更新で私はこのような検証方法を適用しています

@if (isset($siswa)) 
{!! Form::hidden('id_siswa',$siswa->id_siswa) !!} 
@endif 
@if ($errors->any()) 
     <div class="form-group {{ $errors->has('nisn') ? 'has-error':'has-success' }} "> 
@else 
     <div class="form-group"> 
@endif 
      {!!Form::label('nisn','NISN:', ['class'=>'control-label'])!!} 
      {!!Form::text('nisn',null,['class'=>'form-control'])!!} 
      @if ($errors->has('nisn')) 
       <span class="help-block"> {{ $errors->first('nisn') }} </span> 
      @endif 
     </div> 

    ... 
    ... 
     <div class="form-group"> 
       {!!Form::submit($submitButtonText,['class'=>'btn btn-primary form-control'])!!} 
     </div> 

「NISN」フィールドはユニークなければならない、私の主キーはid_siswa、ないIDですsiswa私のコントローラで私は私のテーブルには、この

public function update($id_siswa, Request $request) 
{  
    $siswa = Siswa::findOrFail($id_siswa); 
    $input = $request->all(); 

    $validator = Validator::make($input, [ 
    'nisn' => 'required|string|size:4|unique:siswa,nisn,'.$request->input('id_siswa'), 
    'nama_siswa' => 'required|string|max:30', 
    'tanggal_lahir'=> 'required|date', 
    'jenis_kelamin' => 'required|in:L,P', 
    ]); 
    if($validator->fails()) { 
     return redirect('siswa/'.$id_siswa.'/edit') 
     ->withInput() 
     ->withErrors($validator); 
    } 
    $siswa->update($request->all()); 
    return redirect('siswa'); 

} 

のような更新方法を持っているので、私は私の中に追加していますモデルこの

protected $primaryKey = 'id_siswa'; 

のように私は私のコントローラ

に、このような検証ルールを変更しようとしている、私の主にidではないことを通知します10
'nisn' => 'required|string|size:4|unique:siswa,nisn,NULL,'.$request->input('id_siswa'), 

エラーが消滅しましたが、私のフォーム(nisnフィールドではありません)で他のフィールドを更新すると、検証は私のnisnが一意ではないというエラーを与えます。フィールド)の検証は、nisnでユニークなルールを無視し、nisnを更新すると、そのnisnが使用されているかどうかを検証します。私の英語のソーリー、私は誰かが私に解決策を与えることができることを願っています。

答えて

0

Laravel 5.2には、データを検証するためのより良い方法があります。 Laravelがあなたのために自動的にリダイレクトされますので、あなたは、もはや下に表示あなたのコード内の一部を必要としない、私は上記のようにあなたは、バリデータを使用している場合

$this->validate($request, [ 
    'field' => 'rules', 
]); 

: 私はこのようなバリデータを使用することをお勧めします。

if($validator->fails()) { 
    return redirect('siswa/'.$id_siswa.'/edit') 
    ->withInput() 
    ->withErrors($validator); 
} 

さらに、$request->input('id_siswa')を使用しているために発生する問題があります。私はあなたがthe validation rulesをチェックアウトしたと思うが、それを理解していない。

私はあなたにそれをより明確に説明しようとします。固有ルールには、一意のチェックから特定の行を除外するオプションがあります。これは、コンマ(,)を使用して一意のルールにさらに多くのオプションを追加することで実行できます。

特定の行を除外するには、テーブルのidカラムの値を指定する必要があります。あなたの場合、テーブルのどの列がid列であるかを指定する必要もあります。

私は、これは何が必要だと思う

'nisn' => 'required|string|size:4|unique:siswa,nisn,'.$id_siswa.',id_siswa', 
0

あなたがモデルと一致するようにしたい場合は@JiFusが示唆したように、あなたもからgetKeyNameを使用する代わりに、主キーをハードコーディングする必要はありません。モデル:あなたは、モデルの主キーを変更することがありたび

'nisn' => 'required|string|size:4|unique:siswa,nisn,'.$id_siswa.',' . $this->getKeyName()

さて、あなたは多くの場所でこれを修正する必要はありません。

関連する問題