web-dev-qa-db-fra.com

Laravel enregistrement d'un tableau de données d'entrée dynamique dans la base de données

J'essaie de sauvegarder une forme dynamique dans laravel. impossible d'enregistrer le tableau de données dans la base de données. Voici la forme.  enter image description here

champs de formulaire normaux en bref

{!! 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...

Champs de formulaire dynamiques

{!! 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']) !!}

tous ces champs sont sous la même forme .. Je sauvegarde ces données dans trois tables différentes. 

voici les modèles que j'ai créés.
Modèle d'estimation pour tableau d'estimations

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

Modèle EstimateDetail pour la table estimation_details

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

Modèle d'article pour le tableau d'articles

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

Le code suivant est le 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');
  }

Je peux avec succès sauver le véhicule et estimer des données sur des tableaux de véhicules et des estimations. mais je ne parviens pas à enregistrer les tableaux de détails d'estimation sur la table estimation_détails. essayé de nombreuses façons différentes mais a finalement échoué. 

10
Dhananjaya

Je suppose que l'estimation est manquante. Et vous ne pouvez pas non plus insérer de tableaux comme celui-ci. Essayez ceci pour un seul article:

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

J'espère que ça peut aider.

4
Md. Mahmud Hasan

Pour stocker estimate detail à partir de plusieurs lignes, vous pouvez utiliser l'approche suivante.

// prépare un tableau de toutes les données à l'aide de la boucle for

$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