根据不同的id,更新不同的字段值 需要更新的数据: $multipleData =[ 0 => array:2 [ "id" => 84 "delivery_agent_id" => 9 ] 1 => array:2 [ "id" => 171 "delivery_agent_id" => 26 ] 2 => array:2 [ "id" => 758 "delivery_agent_id" => 65 ]];
方法:
protected static function updateBatch($tableName = "", $multipleData = array()){ if( $tableName && !empty($multipleData) ) { // column or fields to update $updateColumn = array_keys($multipleData[0]); $referenceColumn = $updateColumn[0]; //e.g id unset($updateColumn[0]); $whereIn = ""; $q = "UPDATE ".$tableName." SET "; foreach ( $updateColumn as $uColumn ) { $q .= $uColumn." = CASE "; foreach( $multipleData as $data ) { $q .= "WHEN ".$referenceColumn." = ".$data[$referenceColumn]." THEN '".$data[$uColumn]."' "; } $q .= "ELSE ".$uColumn." END, "; } foreach( $multipleData as $data ) { $whereIn .= "'".$data[$referenceColumn]."', "; } $q = rtrim($q, ", ")." WHERE ".$referenceColumn." IN (". rtrim($whereIn, ', ').")"; // dd($q); // Update return DB::update(DB::raw($q)); } else { return false; }