如何使用关系批量更新数据

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);
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

$consultant->orders()->delete();
$consultant->orders()->saveMany($data);

6个月前 评论
讨论数量: 4

$consultant->orders()->sync($data);

6个月前 评论

$consultant->orders()->delete();
$consultant->orders()->saveMany($data);

6个月前 评论

@迷离 这个不能删掉,因为$consultant->orders里面,有些订单是成交了的。这次修改的是未成交,重新提交过来的数据

6个月前 评论
迷离 6个月前
迷离 6个月前
chinatang (作者) (楼主) 6个月前

@chinatang 请问楼主你是怎么解决这个问题的?

3天前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!