2016-05-22 15 views
2

Ich habe diese Form in der Ansicht:Speicherfeld in der Datenbankspalte

Your Name: <input type="name" name="name" id="name" ><br><br> 
Your Contact No. <input type="contact" name="contact" id="contact" ><br><br> 
Todays date:<mark>{{$mytime->format('Y-m-d, l')}}</mark><br><br> 
<br><br>BOOK SEATS:<br> 
@foreach($seats as $seat) 
@if($seat->available=='1') 
<input type="checkbox" name="check[]" value="{{$seat->book}}" >{{$seat->book}}<br><br> 
@else 
<input type="checkbox" name="check[]" value="{{$seat->book}}" disabled>{{$seat->book}}<br><BR> 
@endif 
@endforeach 
<button type="submit" class="btn btn-default">Book</button> 
</form> 

diese Form diese Steuerung umleitet, die den Namen Kontakt und den Wert des Kontrollkästchen mit Schleife geprüft einfügt. Auf diese Weise, wenn ich zwei Werte überprüfe und das Formular absende, werden aufgrund der for-Schleife zwei Zeilen mit demselben namecontact eingefügt, aber mit unterschiedlichen booked_seats und id (ich benutzte id als automatisches Inkrement). Gibt es eine Möglichkeit, die geprüften Werte in booked_seats mit nur einer Zeile einzufügen. ODER machen Sie die id für alle Zeilen gleichzeitig (überprüfte Werte) eingefügt.

public function book(Request $request) 
    { 
    $name=$request->get('name'); 
    $contact=$request->get('contact'); 
    $check=$request->get('check'); 
    $totalcheckboxchecked=sizeof('$check'); 
for($i=0;$i<=$totalcheckboxchecked;$i++) 
{ 
    if (array_key_exists($i,$check)) 
{ 
    $booked=$check[$i]; 
    $book=bus::insert(['name'=>$name,'contact'=>$contact, 'booked_seats'=>$booked, 'active'=>'1']); 
    seats::where('book',$booked)->update(['available'=>'0']); 

} 
} 
     return redirect('/bus') 
      ->with('message','booked successfully!!!'); 

} 

Antwort

1

Sie die markierten Werte in der Datenbank speichern können

$booked = serialize ($check); 

Dann Serialisierung verwenden, können Sie in der Datenbank, wie dies für Schleife ohne Verwendung speichern

$book=bus::insert(['name'=>$name,'contact'=>$contact, 'booked_seats'=>$booked, 'active'=>'1']); 
    seats::where('book',$booked)->update(['available'=>'0']); 

Um die Werte rretrieve unserialize verwenden

unserialize($booked); 

Hier ist der vollständige Code.

public function book(Request $request) 
    { 
    $name=$request->get('name'); 
    $contact=$request->get('contact'); 
    $check=$request->get('check'); 
    $checkarray = serialize($check); 
    $totalcheckboxchecked=sizeof('$check'); 
for($i=0;$i<=$totalcheckboxchecked;$i++) 
{ 
    if (array_key_exists($i,$check)) 
{ 
    $booked=$check[$i]; 

    seats::where('book',$booked)->update(['available'=>'0']); 

} 
$book=bus::insert(['name'=>$name,'contact'=>$contact, 'booked_seats'=>$checkarray, 'active'=>'1']); 
} 
     return redirect('/bus') 
      ->with('message','booked successfully!!!'); 

} 
+0

das ist gut. aber a: 2: {i: 0; s: 2: "B1"; i: 1; s: 2: "B2" 'wird in die Datenbank eingefügt, ich möchte, dass B1 und B2 diese Werte später vergleichen. Ich schrieb die Update-Anfrage 'sets :: wo ('buchen', $ gebucht) -> update (['available' => '0']);' –

+0

trennen die beiden Abfragen. Für das Update können Sie tun, was Sie vorher getan haben. Zumindest wird es keine neue Zeile einfügen. –

+0

Ich möchte updaten, wenn $ booked mit dem in 'book'-Spalte gespeicherten Wert übereinstimmt (Buchspalte hat die Werte B1, B2, B3, ...) vorher B1, B2, B3 ... wurden jetzt eingefügt' a: 2: { i: 0; s: 2: "B1"; i: 1; s: 2: "B2" ' –

Verwandte Themen