2016-05-22 2 views
2

я иметь такую ​​форму в представлении:Сохранение массива в столбце базы данных

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> 

эта форма перенаправляет к этому контроллеру, который вставляет имя контакта и значение флажка проверяется с петлей. Таким образом, если я проверю два значения и отправлю форму, из-за цикла два строки будут вставлены с такими же namecontact, но с разными booked_seats и id (я использовал id как автоматический прирост). Есть ли способ вставить проверенные значения в signed_seats только с одной строкой. ИЛИ сделать id одинаковым для любых вставленных строк (проверенных значений) в то время.

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!!!'); 

} 

ответ

1

Вы можете сохранить проверенные значения в базе данных, используя сериализацию

$booked = serialize ($check); 

Затем вы можете сохранить в базе данных, как это без использования для цикла

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

Для rretrieve значения используйте десериализацию

unserialize($booked); 

Вот полный код.

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

это хорошо. но «a: 2: {i: 0; s: 2:« B1 »; i: 1; s: 2:« B2 »' вставлен в базу данных, я хочу, чтобы B1 и B2 сравнивали эти значения. Я написал запрос на обновление 'seat :: where ('book', $ booked) -> update (['available' => '0']);' –

+0

разделяет два запроса. Для обновления вы можете делать то, что делали ранее. По крайней мере, он не будет вставлять новую строку. –

+0

Я хочу перераспределить, если $ забронировано соответствует значению, хранящемуся в столбце 'book' (в столбце книги есть значения B1, B2, B3, ...) ранее были вставлены B1, B2, B3 ...' a: 2: { i: 0; s: 2: «B1»; i: 1; s: 2: «B2» ' –

Смежные вопросы