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.
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é.
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.
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