2017-09-25 50 views
0

我很努力地找到一个合适的逻辑来更新Laravel中的这个数组。有了这个相同的逻辑,我可以创建,但我尝试更新它只会更新数组的最后一行。感谢如何更新Laravel 5中的数组?

这里是代码

public function update(Request $request, $id) 
{ 

$invoice = Invoice::findOrFail($id); 

$invoice->invoice_no = $request->invoice_no; 
$invoice->client = $request->client; 
$invoice->title = $request->title; 
$invoice->client_address = $request->client_address; 
$invoice->invoice_date = $request->invoice_date; 
$invoice->due_date = $request->due_date; 
$invoice->subtotal = $request->subtotal; 
$invoice->grandtotal = $request->grandtotal; 

$invoice->save(); 

$products = $request->all(); 


    $name = $products['name']; 
    $price = $products['price']; 
    $qty = $products['qty']; 
    $total = $products['total']; 

foreach($name as $key => $n) { 

    $invoice->products()->update([ 

     //=> $invoice->id, 
     'name' => $name[$key], 
     'price' => $price[$key], 
     'qty' => $qty[$key], 
     'total' => $total[$key] 
    ]); 
} 

与此完全相同的代码,我可以创建和工作正常,但如果我尝试更新只更新数组中的最后一个记录。

数据库

Schema::create('invoices', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('invoice_no'); 
    $table->date('invoice_date'); 
    $table->date('due_date'); 
    $table->string('title'); 
    $table->string('client'); 
    $table->string('client_address'); 
    $table->decimal('subtotal'); 
    $table->decimal('grandtotal'); 
    $table->timestamps(); 
}); 

产品

Schema::create('products', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('invoice_id')->unsigned(); 
    $table->string('name'); 
    $table->string('qty'); 
    $table->string('price'); 
    $table->string('total'); 
    $table->timestamps(); 
}); 

关系

class Invoice extends Model { 
protected $fillable =['client','client_address','title','invoice_no','invoice_date','due_date','discount', 'subtotal','grandtotal']; 



public function products(){ 

return $this->hasMany('App\Product', 'invoice_id'); 
} 


class Product extends Model 
{ 

protected $casts = [ 
'name' => 'array', 
'price' => 'array', 
'qty' => 'array', 
'total' => 'array' 
]; 
protected $fillable = ['invoice_id','price','qty','total','name']; 


public function invoice(){ 

return $this->belongsTo('App\Invoice'); 

} 
} 

array:13 [▼ 
"_token" => "RBtz42WyWeebnDTrSkhVhN2XC00f7MhyihI08lvA" 
"invoice_no" => "1234" 
"client" => "Denisson de Souza" 
"title" => "owner" 
"client_address" => "20/590 pine ridge road" 
"invoice_date" => "2017-09-25" 
"due_date" => "2017-09-30" 
"name" => array:4 [▼ 
    0 => "11" 
    1 => "22" 
    2 => "33" 
    3 => "44" 
] 
"price" => array:4 [▼ 
    0 => "32" 
    1 => "32" 
    2 => "32" 
    3 => "32" 
] 
"qty" => array:4 [▼ 
0 => "1" 
1 => "2" 
2 => "3" 
3 => "4" 
] 
"total" => array:4 [▼ 
0 => "32" 
1 => "64" 
2 => "96" 
3 => "128" 
] 
"subtotal" => "93.00" 
"grandtotal" => "106.00" 
] 
+0

请添加一个调用update()到您的文章 –

+0

是什么$产品看起来像代码?你可以print_r()或var_dump()吗? –

+0

产品更新功能是什么? –

回答

0

像下面的东西应该工作:

添加另一个隐藏字段您的形式:

<input type="hidden" name="id[]" value="{{ $product->id }}"> 

然后用以下内容替换您的foreach循环:

$productObjs = Product::where('invoice_id', $invoice->id)->get(); 
foreach($productObjs as $prod){ 
    $key = array_search($prod->id, $products['id']); 
    $prod->name = $name[$key]; 
    $prod->price = $price[$key]; 
    $prod->qty = $qty[$key]; 
    $prod->total = $total[$key]; 
    $prod->save(); 

} 
+0

感谢我的人,但它不工作,它是仍然更新最后的结果,而不是每个人。 –

+0

嗨我的人,我已经在你的代码做了一些改变,把箭头出去=和添加分号然而这段代码没有保存任何东西,它仍然是相同的文本,所以不更新。奇怪的。 –

+0

var_dump($ productObjs); –