2017-04-07 2 views
1

Ich ziehe mehrere Datensätze aus MySQL und durchläuft die Modellbindung und füllt alle Eingabefelder mit einigen Daten.Aktualisieren mehrerer Datensätze mit Laravel 5.3-Modellbindung

Jetzt kann ich 2 oder 10 oder alle 26 Felder ändern und die Update-Taste drücken. Ich möchte alle Datensätze aktualisieren. Nun, ich weiß nicht, wie $ id hier funktioniert? Normalerweise aktualisiere ich einen einzelnen Datensatz und ich habe $ ID, die ich finden und nur dieses Feld aktualisieren kann. Aber das ist hier nicht der Fall. Ich ziehe 13 Datensätze (oder 26 Felder). 13 Feld_1 und 13 Feld_2. Wie aktualisiert man alle?

mycode

Datenbank

Table 
-id 
-name 
-field1 (updating this one) 
-field2 (updating this one) 

Routen

Route::get('/cat' , '[email protected]'); 
Route::patch('/cat/{$id}/update','[email protected]_update'); 

-Controller

public function cat(){ 

     $cattfs = Catf::all(); 
     return view('/cat',compact('cattfs')); 
} 

public function cat_update(Request $request, $id) // id = 1 
{ 
     $rules = array(
      'field1'    => 'required', 
      'field2'    => 'required' 
     ); 

     $validator = Validator::make(Input::all(), $rules); 

     if ($validator->fails()) { 

      return Redirect()->back()->withErrors($validator); 

     } else { 

      $cat = Cattf::find($id); //This wont work :/ 
      $cat ->field1 = Input::get('field1'); 
      $cat ->field2 = Input::get('field2'); 
      $cat ->save(); 

     return redirect('/cat'); 
     } 
} 

Ansichten

<div class="col-md-6" style="background-color:#fff"> 

    <table class="table table-hover"> 
    <thead> 
     <tr> 
     <th style="text-align: center">Product</th> 
     <th style="text-align: center">Pr</th> 
     <th style="text-align: center">Co</th> 
     </tr> 
    </thead> 
    <tbody> 
    @foreach ($cattos as $catto) 
    {!! Form::model($catto,[ 'method' =>'PATCH', 'url' => ['/cat/.$catto->id./update']]) !!} 

     <tr> 
     <td>{{$catto->name}}</td> 
      <td> {!! Form::text('field1' ,null , ['class'=>'form-control']) !!}</td> 
     <td>  {!! Form::text('field2' ,null , ['class'=>'form-control']) !!}</td> 
     </tr> 

     @endforeach 

    <td colspan="3"> 
    {!! Form::submit('UPDATE', ['class'=>'btn btn-primary btn-block']) !!} 
     {!! Form::close() !!} 
     </td> 
     </tr> 
    </tbody> 
    </table> 

    </div> 

Momentaufnahme der Form

fields snapshot each row is a record from database table

Antwort

1

ich Sie nicht denken, können dies tun, mit Modell (korrigiert mich verbindlich, wenn ich falsch bin jemand).

Was Sie stattdessen tun können, ist ein Array von Daten zu generieren, um auf Ihrem Controller zu veröffentlichen.

Zum Beispiel:

{!! Form::open(['route' => 'catupdate']) !!} 
    @foreach ($cattos as $catto) 
     <tr> 
      <td>{{$catto->name}}</td> 
      <td>{!! Form::text('categories['.$catto->id.'][field1]', null, ['class'=>'form-control']) !!}</td> 
      <td>{!! Form::text('categories['.$catto->id.'][field2]', null, ['class'=>'form-control']) !!}</td> 
     </tr> 
    @endforeach 
{!! Form::close() !!} 

Sie sollten dann einen Array in Ihrem Controller empfangen, wo Sie Schleife um und jeden Datensatz aktualisieren.

public function catupdate() 
{ 
    $categories = request()->input('categories'); 

    foreach($categories as $id => $values) { 
     $cat = Cattf::find($id); 
     $cat->field1 = $values['field1']; 
     $cat->field2 = $values['field2']; 
     $cat->save(); 
    } 
} 

Anschließend können Sie bestätigen auch das Array, indem Sie die folgenden in Ihrem Antrag Datei

public function rules() 
{ 
    return [ 
     'categories.*.field1' => 'required', 
     'categories.*.field2' => 'required' 
    ]; 
} 

dies ist nicht getestet und ist ein Beispiel, das Konzept demonstriert

+0

noch möglich ist verbindlich, dass soll zeigen, welche vorherigen Werte in der Datenbank sind? –

Verwandte Themen