draw134
draw134

Reputation: 1187

Laravel maatwebsite excel package import 2000+ rows results in 1390 code error

I have 4 excel files that contains 1000 rows in every file. I merged it and make it 4000 so that I can save some time. But if I import the merged file it returns me an error of General error: 1390 Prepared statement contains too many placeholders. But when I insert them ony by one it works. I dont know why it return such error, they have even the same values in every column. Can someone tell me what to do with this error? Help would be appriciated. Thanks a lot

Im using laravel maatwebsite excel package.

My import code

public function import(Request $request)
    {
        if($request->hasFile('template')){
            $path = $request->file('template')->getRealPath();
            $data = \Excel::load($path)->get();

            if($data->count() > 0){
                $rows = $data->toArray();

                foreach ($rows as $row) {

                    $level = '';
                    $stack = '';
                    $unit = '';
                    $gunit = '';


                    $street = '';
                    $block_unit = '';

                   //DONT MIND THIS FUNCTION HERE
                    if (strpos($row['address'], '#') !== false) {
                        $unit = explode("#",$row['address']);
                        $gunit = $unit[1];
                        $block = explode(" ",$unit[0],2);
                        if(isset($unit[1])) {
                            $x = explode("-",$unit[1]);
                            $level = $x[0];
                            $stack = $x[1];    
                            $street = $block[1];
                            $block_unit= $block[0];                     
                        }
                    }
                    elseif(strpos($row['address'], ' ') !== false){
                        $unit = explode(" ",$row['address']);
                        $block = explode(" ",$unit[0],2);
                        if(isset($unit[1])) {
                            $x = explode("-",$unit[1]);
                            $level = '';
                            $stack = '';
                            $x = preg_replace('/[0-9]+/', '', $row['address']);
                            $street = $x.substr($street,1);
                            $block_unit= $block[0];      
                        }
                    }
                    else{
                        $level = '';
                        $stack = '';
                        $unit = '';
                        $gunit = '';
                        $block_unit = '';
                        $street = '';
                    }
                    //END

                    $inserts[]=[
                        'transtype' => 'RESI',
                        'project_name' => $row['project_name'],
                        'unitname' => $gunit,
                        'block' => $block_unit,
                        'street' => $street,
                        'level' => $level,
                        'stack' => $stack,
                        'no_of_units' => $row['no._of_units'],
                        'area' => $row['area_sqm'],
                        'type_of_area' => $row['type_of_area'],
                        'transacted_price' => $row['transacted_price'],
                        'nettprice' => $row['nett_price'],
                        'unitprice_psm' => $row['unit_price_psm'],
                        'unitprice_psf' => $row['unit_price_psf'],
                        'sale_date' => $row['sale_date'],
                        'contract_date' => $row['sale_date'],
                        'property_type' => $row['property_type'],
                        'tenure' => $row['tenure'],
                        'completion_date' => $row['completion_date'],
                        'type_of_sale' => $row['type_of_sale'],
                        'purchaser_address_indicator' => $row['purchaser_address_indicator'],
                        'postal_district' => $row['postal_district'],
                        'postal_sector' => $row['postal_sector'],
                        'postal_code' => $row['postal_code'],
                        'planning_region' => $row['planning_region'],
                        'planning_area' => $row['planning_area'],
                    ];
                }


            }

            if(empty($inserts)){
                dd('Request data does not have any files to import.');  
            }
            else {
                \DB::table('xp_pn_ura_transactions')->insert($inserts);
                dd('record inserted');  
            }

        }
    }

Upvotes: 0

Views: 1504

Answers (1)

Vibha Chosla
Vibha Chosla

Reputation: 713

You can not insert more than 1000 records using laravel insert() method. If you want to achieve expected output then you can use array_chunk function of php or collection of laravel. For example using array_chunk :

$chuncked = array_chunk($inserts, 1000);

foreach($chuncked as $insert){
   \DB::table('xp_pn_ura_transactions')->insert($insert);
}

Upvotes: 1

Related Questions