如何使用关系批量更新数据
Consultant 模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Consultant extends Model
{
/**
* 获取顾问订单数据
*/
public function orders()
{
return $this->hasMany('App\Order');
}
}
创建订单(这里使用createMany批量插入数据是正常的)
$consultant = Consultant::create($request->formData());
// 开单
$orders = $request->orderData([
'customer_id' => $consultant->customer_id
]);
$consultant->orders()->createMany($orders);
更新订单(这里saveMany,发现不是批量更新,而是批量插入)
$consultant = Consultant::find($request->id);
$data = [];
// 获取前端修改的数据
$orders = collect($this->input('order'))->filter(function($item){
return isset($item['id']) && $item['status'] == 4;
});
foreach ($orders as $order) {
$data[] = new Order([
'id' => $order['id'],
'reception_id' => $order['reception_id'],
'customer_id' => $order['customer_id'],
'status' => 2,
'type' => $order['type'],
'package_id' => $order['package_id'] ?? null,
'package_name' => $order['package_name'] ?? null,
'product_id' => $order['product_id'] ?? null,
'product_name' => $order['product_name'] ?? null,
'goods_id' => $order['goods_id'] ?? null,
'goods_name' => $order['goods_name'] ?? null,
'times' => $order['times'],
'unit_id' => $order['unit_id'] ?? null,
'specs' => $order['specs'] ?? null,
'price' => $order['price'],
'payable' => $order['payable'],
'amount' => 0,
'department_id' => $order['department_id'],
'salesman' => $order['salesman'],
'remark' => $order['remark'] ?? null,
'user_id' => user()->id,
]);
}
// 发现使用saveMany 最后生成的是insert into 的sql语句
$consultant->orders()->saveMany($data);
$consultant->orders()->delete();
$consultant->orders()->saveMany($data);