it-swarm.com.de

Laravel Speichern von dynamischen Eingabedatenfeldern in der Datenbank

Ich versuche, eine dynamische Form in Laravel zu speichern. Datenfeld kann nicht in der Datenbank gespeichert werden. Folgendes ist das Formular.  enter image description here

normale Formularfelder in Kurzform

{!! Form::select('customer_id', ['' => 'Select a customer'] + $customer_list ,null , array('class' => 'form-control', 'id' => 'customer')) !!}
{!! Form::text('mileage_in', null, ['class' => 'form-control', 'placeholder' => 'Mileage In']) !!}
.
.
.etc...

Dynamische Formularfelder

{!! Form::select('item_id[][item_id]', $items, null, array('class' => 'form-control')) !!}
{!! Form::text('item_description[][item_description]', null, ['class' => 'form-control', 'placeholder' => 'Not Required | Optional']) !!}
{!! Form::text('units[][units]', null, ['class' => 'form-control', 'placeholder' => 'Add Units']) !!}
{!! Form::text('rate[][rate]', null, ['class' => 'form-control', 'placeholder' => 'Add Rate']) !!}
{!! Form::text('amount[][amount]', null, ['class' => 'form-control', 'placeholder' => 'Add Hrs and Rate', 'id' => 'amount']) !!}

alle diese Felder haben dasselbe Format .. Ich speichere diese Daten in drei verschiedenen Tabellen. 

im Folgenden sind die Modelle, die ich erstellt habe.
Schätzmodell für die Schätzungstabelle

class Estimate extends Model
{
    protected $fillable = [
        'customer_id',
        'vehicle_id',
        'mileage_in',
        'net_amount',
        'parent_estimate_id',
        'department',
        'created_by'
    ];
    public function customer(){
        return $this->belongsTo('App\Customer');
    }
    public function vehicle(){
        return $this->belongsTo('App\Vehicle');
    }
    public function estimate_details(){
        return $this->hasMany('App\EstimateDetail');
    }
}

EstimDetail-Modell für Schätzwert-Tabelle

class EstimateDetail extends Model
{
    protected $fillable = [
        'estimate_id',
        'item_id',
        'item_description',
        'units',
        'rate',
        'labor_amount_final',
        'initial_amount',
        'task_status'
    ];
    public function item()
    {
        return $this->hasMany('App\Item');
    }
    public function estimate()
    {
        return $this->belongsTo('App\Estimate');
    }
}

Artikelmodell für Artikeltabelle

class Item extends Model
{
    protected $fillable = [
        'name',
        'type',
        'location',
        'quantity',
        'sale_price',
        'unit_of_sale',
        'pre_order_level',
        'created_by',
        'category_id',
        'service_only_cost',
        'updated_at'
    ];
    public function estimate_details()
    {
        return $this->hasMany('App\EstimateDetail');
    }
}

Folgender Code ist der EstimatesController

class EstimatesController extends Controller
{
public function store(EstimateRequest $request)
    {
        $user_id = '1';

        $input = $request->all();

        $vehicle = new Vehicle();
        $vehicle->customer_id = $input['customer_id'];
        $vehicle->reg_no = $input['reg_no'];
        $vehicle->make = $input['make'];
        $vehicle->model = $input['model'];
        $vehicle->created_by = $user_id;

        $estimate = new Estimate();
        $estimate->customer_id = $input['customer_id'];
        $estimate->vehicle_id = $input['vehicle_id'];
        $estimate->mileage_in = $input['mileage_in'];
        $estimate->department = $input['department'];
        $estimate->created_by = $user_id;

        $estimate_detail = new EstimateDetail();
        $estimate_detail->item_id = $input['item_id'];
        $estimate_detail->item_description = $input['item_description'];
        $estimate_detail->units = $input['units'];
        $estimate_detail->rate = $input['rate'];
        $estimate_detail->initial_amount = $input['amount'];

        $vehicle->save($request->all());
        $vehicle->estimate()->save($estimate);
        $estimate->estimate_details()->save($estimate_detail);
      }
        return redirect('/estimates');
  }

Ich kann Fahrzeug und Schätzdaten von Tabellenfahrzeugen und Schätzungen erfolgreich speichern. Es ist jedoch nicht möglich, Arrays mit Schätzungsdetails in der Estimation_details-Tabelle zu speichern. versuchte viele verschiedene Wege, scheiterte aber schließlich. 

10
Dhananjaya

Ich schätze mal, dass die ID fehlt. Und Sie können auch keine Arrays so einfügen. Versuchen Sie dies für einen einzelnen Artikel:

    $vehicle->save($request->all());
    $vehicle->estimate()->save($estimate);
    $estimate_detail->estimate_id = $estimate->id;
    $estimate->estimate_details()->save($estimate_detail);

Hoffe es kann helfen.

4

Um estimate detail in mehreren Zeilen zu speichern, können Sie den folgenden Ansatz verwenden.

// Bereite das Array aller Daten mit for-Schleife vor

$data = [];
for($i=0,$i<count($input['item_id']);$i++)
{
 $data[]= array ('item_id'=>$input[$i]['item_id'],
                 'item_description'=>$input[$i]['item_description']);
                 'units'=>$input[$i]['units']);
                 'rate'=>$input[$i]['rate']);
                 'initial_amount'=>$input[$i]['initial_amount']);
}

Model::insert($data); // Eloquent
DB::table('table')->insert($data); // Query Builder
0
Ali