gate('供应商'); $suppliers = Supplier::query()->with('material')->orderByDesc('id')->filter($filters)->paginate($request['paginate']??50); $materials=Material::query()->select('id','name')->get(); return view('/maintenance/supplier/index',compact('suppliers','materials')); } public function storeApi(Request $request) { $this->gate('供应商-编辑'); $supplier = Supplier::query()->create($request->addSupplier); $material_supplier=[]; foreach ($request->material_id as $item){ $material_supplier[]=[ 'material_id'=>$item, 'supplier_id'=>$supplier->id, ]; } MaterialSupplier::query()->insert($material_supplier); $this->success($supplier); } public function updateApi(Request $request) { $this->gate('供应商-编辑'); $editSupplier=$request->input('editSupplier'); $material_ids=$request->input('material_id'); $material_suppliers=MaterialSupplier::query()->where('supplier_id',$editSupplier['id'])->get(); $this->updateMaterial($material_suppliers,$material_ids,$editSupplier['id']); $supplier = Supplier::query()->find($editSupplier['id']); $bool= $supplier->update([ 'name'=>$editSupplier['name'], 'contact_man'=>$editSupplier['contact_man'], 'phone'=>$editSupplier['phone'], 'invoice_title'=>$editSupplier['invoice_title'], 'bank'=>$editSupplier['bank'], 'bank_account'=>$editSupplier['bank_account'], 'opening_bank'=>$editSupplier['opening_bank'] ]); if($bool)$this->success($supplier->loadMissing('material')); $this->error('更新异常'); } public function destroyApi($id) { $this->gate('供应商-删除'); $supplier = Supplier::query()->find($id); $supplier->delete(); $this->success(); } private function updateMaterial($material_suppliers,$material_ids,$supplier_id){ $exist=[]; $adds=[];$addMaterial=[]; foreach ($material_suppliers as $material_supplier){ $exist[]=$material_supplier['material_id']; } $deletes=array_diff($exist,$material_ids); foreach ($material_ids as $id){ if (empty($material_suppliers->where('material_id',$id)->first()))$adds[]=$id; } foreach ($adds as $add){ $addMaterial[]=[ 'material_id'=>$add, 'supplier_id'=>$supplier_id, ]; } if (count($addMaterial)>0) MaterialSupplier::query()->insert($addMaterial); foreach ($deletes as $delete){ MaterialSupplier::query()->where('material_id',$delete) ->where('supplier_id',$supplier_id)->delete(); } } }