2017-08-23 7 views
0

これはサンプルクエリです。更新するデータフィールドの選択肢が複数ある場合は、更新クエリを書き込む方が良いでしょうか?

$test = DB::table('tesing') 
->where('id', $id)    
->update(['a' => $a,'b'=>$b,'c'=>$c,'d'=>$d']); 

など。ユーザーが 'a'値や 'b'値だけを更新するかどうかを選択できるようにする場合などです。どのようにすれば、ユーザーが選択したフィールドだけを更新することができますか。ユーザーが更新するフィールドを選択できるようにするチェックボックスがあります。その後、ユーザーがチェックした特定のフィールドのみが更新されます。

$test = DB::table('tesing') 
->where('id', $id)    
->update(['a' => $a']); 

ユーザーが「a」フィールドを選択すると、「a」フィールドのみが更新されます。 if-elseステートメントを使用する代わりに、他にどのように使用できますか?

+1

'a'、 'b'などのように更新する列名を追加しました。更新フォームを表示する場所でもHTMLコードを追加できますか? –

+0

@SagarGautam in htmlただ単純な Crazy

+0

この場合、バックエンドの値は 'a' => 'on' ...または 'a' => '1'ですか? –

答えて

0

abcが列名であることを想定し、雄弁で試してみてください。

public function name($id, Request $request) 
{ 
    $test = App\Test::find($id); 

    foreach ($request->all() as $key => $value) { 
     $test->{$key} = $value; 
    } 

    $test->save(); 
} 
+0

私はチェックボックスから値を取得していません。チェックボックスは、特定のフィールドが更新されないようにするために使用されます。デフォルトでは、すべてのフィールドが更新され、チェックボックスでユーザーは更新するフィールドを選択できます。 – Crazy

0

は、これにより、ユーザーは、彼らがフィールドを選択することができ、使用している特定のチェックボックスの名前の配列を作成するのが最も簡単かもしれません更新したい更新可能な列に対応するように選択チェックボックスに名前を付け、チェックボックスセレクタと、ユーザーがincomming $ requestオブジェクトから更新したいものに基づいて更新するだけです。

列(およびそれに対応という名前のフォームフィールド)のために、このpeudoコードのようなもの "A"、 "B"、 "C":

public function update(Request $request, $routeModelBoundObjectToUpdate){ 

    $userCheckboxNames = ['ckA', 'ckB', 'ckC']; 
    $updates = []; 
    foreach ($request->all() as $key => $value) { 
     if(in_array($key, $userCheckBoxNames) && $value == 'on') 
      $updates[] = [substr($key, 2) => $request->get(substr($key, 2)); 
    } 

    $routeModelBoundObjectToUpdate->update($updates); 
} 

・ホープ、このことができます。

関連する問題