2016-01-28 25 views
6

Dinamik bir formu laravel'e kaydetmeye çalışıyorum. veri dizisini veri tabanına kaydedemedi. aşağıdaki formu. Laravel dinamik giriş veri dizisini veritabanına kaydetme

kısa
{!! 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... 

Dinamik form alanları

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

tüm bu alanlardaki yılında enter image description here

Normal form alanları aynı şeklindedir. Bu verileri üç farklı tabloya kaydediyorum. Oluşturduğum modeller şunlardır:

. Tahminler tablo için
tahmin modeli

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'); 
    } 
} 
ürün tablosu için

estimate_details tablo için EstimateDetail modeli

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

Ürün model

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

Foll nedeniyle kod başarıyla tabloları araç ve tahminleri araç ve tahmin verileri kaydedebilirsiniz 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'); 
    } 

olduğunu. ama tahmin ayrıntıları dizileri tahmin tablosunda kaydedemiyorum. çok farklı yollar denedi ama sonunda başarısız oldu. lütfen yardım edin!

cevap

3

Ben tahmin kimliği eksik tahmin için kullanan tüm veriler dizisi hazırlayın //. Ve bunun gibi dizileri de ekleyemezsiniz. Tek bir öğeye ilişkin bu deneyin:

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

yardımcı olur may Umut.

+0

Cevabınız için teşekkür ederiz. Bunu daha önce denedim. ama bu hatayı alıyorum. msgstr "preg_replace(): Parametre uyuşmazlığı, desen bir dizgedir." – Dhananjaya

+1

Evet. Çünkü bir kerede diziyi eklemeyi deniyorsunuz. $ gibi öğelerinizden sonra bir dizin ekleyin: $ estimate_detail-> item_id = $ input ['item_id'] [0]; $ estimate_detail-> item_description = $ input ['item_description'] [0]; $ estimate_detail-> units = $ input ['units'] [0]; $ estimate_detail-> rate = $ input ['rate'] [0]; $ estimate_detail-> initial_amount = $ input ['amount'] [0]; Çalışıyorsa, döngü için gidin. –

+0

Döngü içermeyen dizinler eklemeyi denedim. hala aynı hatayı alıyor. "preg_replace():" Parametre uyuşmazlığı "ve" aşağıdaki gibi ayrıntılı hata "," estimate_details "(" estimate_id "," item_id "," item_description "," units "," rate "," initial_amount "," updated_at) ',' created_at') değerlerini (89,?,?,?,?,?,?) " – Dhananjaya

0

estimate detail'u birden çok satıra depolamak için, aşağıdaki yaklaşımı kullanabilirsiniz.

döngü

$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

Cevabınız için teşekkür ederiz. Hem Eloquent hem de Query Builder ile çalıştım "EstimateDetail :: insert ($ data);" ve "DB :: table ('estimate_details') -> insert ($ data);" Ama "Tanımlanamayan ofset: 0" alıyorum. Bunun neden olduğu hakkında bir fikrin var. – Dhananjaya

+0

Ekle'den önce, '$ data' dizininin doğru olmadığını kontrol edin ve dizi oluşturma döngüsünü kontrol edin. Ana düşünce, giriş verilerinden uygun bir dizi oluşturmaktır. – Ali

İlgili konular