/** * 轉發動態和資訊數量統計 */ public function forwardCounts(FeedModel $feedModel) { //統計動態轉發的id $feeds=$feedModel->where('forward_type','feeds') ->pluck('forward_id')->toArray(); //統計動態轉發的id出現的次數 $feeds=array_count_values($feeds); //key值對應動態id value值為轉發的次數 foreach($feeds as $key => $value){ $multipleData[] = [ 'id'=>$key, 'forward_counts'=>$value, ]; } //批量更新數據庫數據 $res = $this->updateBatch('feeds',$multipleData); if(!$res) echo '更新出錯'; //統計資訊轉發的id $news=$feedModel->where('forward_type','news') ->pluck('forward_id')->toArray(); //統計資訊轉發的id出現的次數 $news=array_count_values($news); //key值對應動態id value值為轉發的次數 foreach($news as $key => $value){ $multipleDatas[] = [ 'id'=>$key, 'forward_counts'=>$value, ]; } //批量更新數據庫數據 $ress = $this->updateBatch('news',$multipleDatas); if(!$ress) echo '更新出錯'; return '更新成功'; } //同時更新多個記錄,參數,表名,數組(別忘了在一開始use DB;) public 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, ', ').")"; // Update return DB::update(DB::raw($q)); } else { return false; } }