laravel 批量更新


     /**
     * 轉發動態和資訊數量統計
     */
    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;
        }

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM