Laravel - импорт Excel продолжай - PullRequest
1 голос
/ 29 мая 2019

Dears,

У меня есть файл Excel с 5K строками, и я успешно импортирую его в свою таблицу в БД.

Но ошибка, когда система заканчивает все строки, продолжает цикл, и страница не перестает работать и не перенаправляет на мой взгляд.

Мой контроллер:

if($request->hasFile('import_file')){
       $path = $request->file('import_file')->getRealPath();
       $data = \Excel::load($path)->get();
       foreach ($data as $key => $row) {
       $res = policies::where('phone', '=', $row['phone'])
                      ->where('draft_no', '=', $row['draftno'])
                      ->where('due_date', '=', $duedate)
                      ->select('id')->get()->toArray();
                  if(empty($res)) {
                      $polic = new policies();
                      $polic->cust_id = $row['custno'];
                      $polic->policy = '';
                      $polic->bord_date = $borddate;
                      $polic->client_id = $row['clientid'];
                      $polic->client_no = $row['clientno'];
                      $polic->client_name = $row['clientname'];
                      $polic->draft_no = $row['draftno'];
                      if ($row['status'] == '') {
                          $polic->status = '';
                      } else {
                          $polic->status = $row['status'];
                      }

                      $polic->due_date = $duedate;
                      if ($row['curno'] == 'USD') {
                          $polic->currency = 1;
                      } else {
                          $polic->currency = 0;
                      }
                      $polic->amount = $row['amnt'];
                      $polic->zone = $row['zone'];
                      $polic->broker_id = $row['brokercode'];
                      $polic->broker_name = $row['brokername'];
                      $polic->remarks = $row['remarks'];
                      $polic->phone = $row['phone'];
                      $polic->insured_name = $row['insname'];
                      // $polic->cust_id = $row['valuedate'];
                      $polic->address = ''; //address
                      if (trim($row['status']) == 'P') {
                          $polic->paid_at = date('Y-m-d');
                      }
                      $polic->new = 1; //address
                      $polic->save();
       }
       else { 
       //am updating the imported date in the DB
       }

Что очень странно, что на моем локальном хосте работает нормально, но в облаке digitaloceans продолжайте цикл без перенаправления.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 29 мая 2019

Я могу быть, потому что у вас есть 5000 строк для вставки и 5000 операций вставки занимает много памяти. То, что вы можете попробовать, это операция пакетной вставки.

В вашем полисе policy.php заполните все поля

защищен », 'количество', 'зона', 'broker_id', 'broker_name', 'слово', 'телефон', 'insured_name', 'адрес', 'paid_at', 'новый'];

И в вашем файле Excel используется импорт, а не получение коллекций.

if($request->hasFile('import_file')){
       $path = $request->file('import_file')->getRealPath();
       $data = \Excel::load($path)->get();
$data=[];    
$i=0;  
 foreach ($data as $key => $row) {
       $res = policies::where('phone', '=', $row['phone'])
                      ->where('draft_no', '=', $row['draftno'])
                      ->where('due_date', '=', $duedate)
                      ->exists();
                  if(!$res) {
                    $i++;
                    $data[$i]['cust_id ']=$row['custno'];

                      $data['policy'] = '';
                      $data['bord_date'] = $borddate;
                      $data[$i]['client_id'] = $row['clientid'];
                      $data[$i]['client_no'] = $row['clientno'];
                      $data[$i]['client_name'] = $row['clientname'];
                      $data[$i]['draft_no'] = $row['draftno'];
                      if ($row['status'] == '') {
                          $data[$i]['status'] = '';
                      } else {
                          $data[$i]['status'] = $row['status'];
                      }

                      $data[$i]['due_date'] = $duedate;
                      if ($row['curno'] == 'USD') {
                          $data[$i]['currency'] = 1;
                      } else {
                          $data[$i]['currency'] = 0;
                      }
                      $data[$i]['amount'] = $row['amnt'];
                      $data[$i]['zone'] = $row['zone'];
                      $data[$i]['broker_id'] = $row['brokercode'];
                      $data[$i]['broker_name'] = $row['brokername'];
                      $data[$i]['remarks'] = $row['remarks'];
                      $data[$i]['phone'] = $row['phone'];
                      $data[$i]['insured_name'] = $row['insname'];
                      // $data[$i]['cust_id'] = $row['valuedate'];
                      $data[$i]['address'] = ''; //address
                      if (trim($row['status']) == 'P') {
                          $data[$i]['paid_at'] = date('Y-m-d');
                      }
                      $data[$i]['new'] = 1; //address

       }
       else { 
       //am updating the imported date in the DB
       }
}
policies::insert($data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...