2016-07-23 5 views
0

Ich habe ein Formular in Laravel 5 wie untenEinsatz mehrere ausgewählte Wert von Laravel 5 bilden

@extends('users.home') 




@section('content') 



<form role="form" action="{{route('postPay')}}" method="post"> 
    <div class="row"> 

       <div class="col-md-12"> 
        <fieldset class="group-border"> 

         <legend class="group-border">Payment Record</legend> 

         <div class="row"> 
          <div class="col-lg-4"> 
           <div class="form-inline"> 

            <label class="control-label">Current Date:</label> 




            <input type="text" class="date form-control" id="datepicker" name="date"> 
           </div> 
          </div> 
          <div class="col-lg-4"> 
           <div class="form-inline"> 
            <!-- <label class="control-label">Month:</label> --> 
            <select style="width:250px" multiple="true" class="form-control input-md" id="js-example-basic-single" name="month"> 

             <option value="january">January</option> 
             <option value="february">February</option> 
             <option value="march">March</option> 
             <option value="april">April</option> 
             <option value="may">May</option> 
             <option value="june">June</option> 
             <option value="july">July</option> 
             <option value="august">August</option> 
             <option value="september">September</option> 
             <option value="october">October</option> 
             <option value="november">November</option> 
             <option value="december">December</option> 

            </select> 

           </div> 
          </div> 
          <div class="col-lg-4"> 
           <div class="form-inline"> 
            <label class="control-label">Year:</label> 
            <input class="form-control input-md" type="text" name="year"> 
           </div> 
          </div> 
         </div> 
         <br> 
         <div class="row"> 


           <div class="col-lg-1"> 
           <label for="">Customer</label> 
           </div> 
           <div class="col-lg-7"> 
           <select class="form-control input-md" name="record_id"> 
           @foreach($records as $record) 
            <option value="{{$record->id}}">{{$record->user_name}}</option> 
           @endforeach 
           </select> 
           </div> 



          <div style="float: left;" class="col-lg-4 text-left"> 
           <div class="form-inline"> 
            <label class="control-label">Due: </label> 
            <input class="form-control input-sm" type="text" name="due"> 
           </div> 
          </div> 
         </div> 
         <br> 
         <div class="row"> 
          <div class="col-lg-1"> 
           <label class="control-label">Amount:</label> 
          </div> 
          <div class="col-lg-7"> 
           <input class="form-control input-sm" type="text" name="amount"> 
          </div> 
          <div class="col-lg-4"> 
           <div class="form-inline"> 
            <label class="control-label">Advance:</label> 
            <input class="form-control input-sm" type="text" name="advance"> 
           </div> 
          </div> 
         </div> 



        </fieldset> 

       </div> 
      </div> 
      <div class="box-footer"> 
       <button type="submit" class="btn btn-success btn-block">Submit</button> 
      </div> 
      <input type="hidden" name="_token" value="{{Session::token()}}"/> 

    </form> 

@endsection 

Und dies ist die Zahlung Migrationstabelle,

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreatePaymentsTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('payments', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('record_id')->unsigned(); 
      $table->date('date'); 
      $table->string('month'); 
      $table->integer('year'); 
      $table->integer('amount'); 
      $table->integer('advance'); 
      $table->integer('due'); 
      $table->dateTime('created_at'); 
      $table->dateTime('updated_at'); 

      $table->foreign('record_id')->references('id')->on('records'); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('payments'); 
    } 
} 

Das Feld 'Monat' in Form ist ein mehrfach ausgewähltes Feld mit select2, das ich in der Datenbank speichern möchte, aber soweit ich weiß, erlaubt jeder Datensatz in der Datenbank nicht mehrere Werte. Wie kann ich es machen? Bitte, helfen Sie.

Antwort

2

Verwenden Sie im Mehrfachauswahlmonat den Namen als Array wie name="month[]", so dass Sie ein Array mit Monat erhalten. Dann können Sie dieses Array iterieren und für jeden Monat einen Datensatz in db einfügen. Sie können entweder eine Abfrage für jeden Monat einfügen oder eine Batch-Einfügung verwenden.

public function store(Request $request) 

{

$ Eingänge = $ request-> alle();

$months = $inputs['month']; 

//Multiple insert queries 
foreach ($months as $month) { 
    Payments::create([ 
     'date' => $input['date'], 
     'year' => $inputs['year'] 
     'month' => $month, 
     'amount' => $inputs['amount'], 
     'advance' => $inputs['advance'], 
     'due'  => $inputs['due'], 
     'record_id' => $inputs['record_id'] 
    ]); 
} 
//-------------------------------------------------// 
//Batch insert, use either one 
$data = []; 
foreach ($months as $month) { 
    $data[] = [ 
     'date' => $input['date'], 
     'year' => $inputs['year'] 
     'month' => $month, 
     'amount' => $inputs['amount'], 
     'advance' => $inputs['advance'], 
     'due'  => $inputs['due'], 
     'record_id' => $inputs['record_id'] 
    ] 
} 

DB::table('payments')->insert($data); 

}

Genießen Codierung :)

+0

Vielen Dank .. :) –

+0

Ich benutze die gleiche Methode und es funktioniert super! –

0

Beim Senden des Formulars select2 immer die ausgewählten Optionen im Array zurückgeben. Sie können das Array mithilfe des Implods in eine Zeichenfolge konvertieren, sodass Sie das Ergebnis als "Januar, Mai" im Feld "Monat" speichern können.

+0

Anstelle des Speicherns der durch Komma getrennten Stichen in der gleichen Spalte, kann ich speichern sie in anderen Zeile für den gleichen Benutzernamen? –

+0

Nein, Sie können sie nicht in einer anderen Zeile für dieselbe ID in derselben Tabelle speichern. Wenn Sie zwei Datensätze für zwei ausgewählte Werte speichern möchten, müssen Sie eine weitere Tabelle erstellen, die nur zwei Felder payment_id und month aufweist. In der Schleife des Monatsarrays payment_id column speichern Sie die neu eingefügte id und die Monatspalte jeden Monat. – Arvind