laravel 批量添加,批量更新操作

php中避免循环查询数据库的方式

//查出小组的类型
$groupType = GroupType::select('id','title as name')->get()->toArray();
//取小组类型id的集合数组
$groupTypeIds = array_map(function ($item){
    return $item['id'];
},$groupType);
//以小组类型分组查出小组类型和小组
$group = Group::select('id','name','typeId')
    ->whereIn('typeId',$groupTypeIds)
    ->get()
    ->groupBy('typeId')
    ->toArray();
//处理一下
foreach ($groupType as $k1 => $v1) {
    $groupType[$k1]['children'] = array_key_exists($v1['id'], $group) ? $group[$v1['id']] : [];
}
在Model 里面写入方法:

public function addAll(Array $data){
        return DB::table($this->getTable())->insert($data);
    }



 在控制器代码:

$data= [ ['name'=>'111'], ['name'=>'222'] ]; 
DB::table('xxx')->insert($data);


//或者使用时$user = new User(); 

$data= [   ['name'=>'222'],   ['name'=>'222'] ];  

 $user->addAll($data);

//或者下面的方法:

        $insertData = [];
        foreach ($attributeModelObj as $key => $value) {
                $insertData[$key]['media_id'] = $value['media_id'];
                $insertData[$key]['category_id'] = $value['category_id'];
                $insertData[$key]['subclass_id'] = $value['subclass_id'];
            } 

 $videoAttribute = new VideoAttribute();
 if ($videoAttribute->addAll($insertData)) { }




批量更新操作:

借签: https://blog.csdn.net/amazingdyd/article/details/68924623#

//test data
/*
$multipleData = array(
   array(
      'id' => 'My id' ,
      'name' => 'My Name 2' ,
      'date' => 'My date 2'
   ),
   array(
      'id' => 'Another id' ,
      'name' => 'Another Name 2' ,
      'date' => 'Another date 2'
   )
)
*/


    public function completeOrderStore(Request $request){
        $ids = Input::get('ids'); //拿到逗号分隔的字符串,然后把他们变成数组
        $arr = explode(',', $ids);
        $multipleData = []; 
        foreach($arr as $a){ //组成例子那样的数组
            $multipleData[] = ['id'=>$a, 
                               'name'=>Input::get('name'.$a),
                               'mobile'=>Input::get('mobile'.$a),
                               'school'=>Input::get('school'.$a),
                               'email'=>Input::get('email'.$a),
                               'is_bill'=>Input::get('is_bill'.$a),
                               'address'=>Input::get('address'.$a),
                               'post_code'=>Input::get('post_code'.$a)
                               ];
           
        }
        $res = $this->updateBatch('seats',$multipleData);
        return Redirect::to('/enroll/myorder');
    }



//同时更新多个记录,参数,表名,数组(别忘了在一开始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;
        }
 
    }


larvale 批量更新别人写好的参考:

https://www.jb51.net/article/126461.htm

https://stackoverflow.com/questions/26133977/laravel-bulk-update





// 也可以借签下面的思想:

/**
    * 这里会把数据组成以pnid为键的数组
    */
    $oldKeyData = array_column($oldData,NULL,'pnid');

    $update = [];
    $insert = [];

    foreach ( $product as $p) {
        if ( isset($oldKeyData[$p['pnid']]) ) {
            $updatep[] = $p;
        } eles {
            $insert[] = $p;
        }
    }

    //进行更新和删除



PHP array_column() 用法

一般array_column 是获取二维数组的制定列,组成新的数组输出。

注意:可以制定第三个参数,指定输出数组的key

<?php
$arr = [
    ['id' => 11, 'name' => 'aa'],
    ['id' => 22, 'name' => 'bb',],
    ['id' => 44, 'name' => 'cc'],
    ['id' => 33, 'name' => 'dd']
];
 
// 示例1:
print_r(array_column($arr, 'name')); 
// 运行结果:
Array
(
    [0] => aa
    [1] => bb
    [2] => cc
    [3] => dd
)
 
// 示例2:
print_r(array_column($arr,'name','id')); 
// 运行结果:
(
    [11] => aa
    [22] => bb
    [44] => cc
    [33] => dd
)
 
// 示例3:
print_r(array_column($arr, null, 'name')); 
// 运行结果:
Array
(
    [aa] => Array
        (
            [id] => 11
            [name] => aa
        )
 
    [bb] => Array
        (
            [id] => 22
            [name] => bb
        )
 
    [cc] => Array
        (
            [id] => 44
            [name] => cc
        )
 
    [dd] => Array
        (
            [id] => 33
            [name] => dd
        )
 
)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值