как посчитать совпадающий идентификатор из Excel и базы данных - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть файл Excel, и я хочу загрузить его и сохранить данные в базе данных.

И данные будут обновляться на основе номера IC (удостоверение личности).

Если в файле Excel есть 4 IC, совпадающие с IC из базы данных, он будет считаться и получит уведомление, если 4 данные совпадут и обновятся в базе данных.

Вопрос в том, как считать совпавший ic из excel и базы данных? всегда показывает ноль (0)

  if($request->hasFile('file')){
        $extension = File::extension($request->file->getClientOriginalName());
        
        if ($extension == "xlsx" || $extension == "xls" || $extension == "csv") {
 
            $path = $request->file->getRealPath();
            $data = Excel::load($path, function($reader) {
            })->get();

            if(!empty($data) && $data->count()){
               
                foreach ($data as $value) {
                    $insert['data'] = [
                    'no'  => $value->no,
                    'name'  => $value->name,
                    'ic_no' => $value->ic_no,
                    'disburse_date' => $value->disburse_date,
                    'product_type_description' => $value->product_type_description,
                    'amount_release' => $value->amount_release,
                    'amount' => $value->amount,
                    'date_disburse' => $value->date_disburse,
                    'net_disbursement' => $value->net_disbursement,
                    ];
                
 
                if(!empty($insert))
                  {
                        $user = Auth::user()->id;

                          $request                  = new DisburseFromMbsb;

                            //$request->cus_id           = $data->id_cus;  
                            $request->ic_no               = $value['ic_no'];
                            $request->name               = $value['name'];
                            $request->disburse_date    = $value['disburse_date'];
                            $request->product_type_description    = $value['product_type_description'];
                            $request->amount_release   = $value['amount_release'];
                            $request->amount           = $value['amount'];
                            $request->date_disburse    = $value['date_disburse'];
                            $request->net_disbursement = $value['net_disbursement'];
                            $request->user_id           = $user;
                                
                            $request->save();*/

                             Loandisburse::where('ic', $value['ic_no'])->where('stage','W11')->where('status_upload',0)->update(array(
                                'status_upload'=>'1',
                                'amount_release' => $value['amount_release'],
                                'amount' => $value['amount'],
                                'date_disburse' => $value['date_disburse'], 
                                'net_disbursement' => $value['net_disbursement'],
                                'disburse_date' => $value['disburse_date'],
                                'product_type_description' => $value['product_type_description']

                            ));

                               
                    
$number = Loandisburse::where('ic', $value['ic_no'])->where('stage','W11')->where('status_upload',1)->count(); // this is my code to count
                        
                }
             
            }
             
             return redirect('/upload/amount')->with(['update' => 'Data saved successfully '.$number.'  rows' ]);
            }
 

это мой код для подсчета

$ number = Loandisburse :: where ('ic', $ value ['ic_no']) -> где ('stage', 'W11') -> где ('status_upload', 1) -> count () ;

1 Ответ

0 голосов
/ 12 ноября 2018

Предполагая, что весь код, который вы написали, является правильным (я понятия не имею, как работает пакет Excel), Есть несколько строк, которые нужно изменить, и вы готовы.

Сначала вы должны объявить номер переменной вне области действия forEach. После этого вместо

$number = Loandisburse.......

Вы должны использовать

$number += Loandisburse.........

Чтобы не перезаписывать ваши предыдущие значения.

Это означает, что вы должны попробовать следующий код:

if($request->hasFile('file')){
    $extension = File::extension($request->file->getClientOriginalName());

    $number = 0;
    if ($extension == "xlsx" || $extension == "xls" || $extension == "csv") {

        $path = $request->file->getRealPath();
        $data = Excel::load($path, function($reader) {
        })->get();

        if(!empty($data) && $data->count()){

            foreach ($data as $value) {
                $insert['data'] = [
                'no'  => $value->no,
                'name'  => $value->name,
                'ic_no' => $value->ic_no,
                'disburse_date' => $value->disburse_date,
                'product_type_description' => $value->product_type_description,
                'amount_release' => $value->amount_release,
                'amount' => $value->amount,
                'date_disburse' => $value->date_disburse,
                'net_disbursement' => $value->net_disbursement,
                ];


                if(!empty($insert)) {
                    $user = Auth::user()->id;

                    $request                  = new DisburseFromMbsb;  
                    $request->ic_no               = $value['ic_no'];
                    $request->name               = $value['name'];
                    $request->disburse_date    = $value['disburse_date'];
                    $request->product_type_description    = $value['product_type_description'];
                    $request->amount_release   = $value['amount_release'];
                    $request->amount           = $value['amount'];
                    $request->date_disburse    = $value['date_disburse'];
                    $request->net_disbursement = $value['net_disbursement'];
                    $request->user_id           = $user;

                    $request->save();

                    Loandisburse::where('ic', $value['ic_no'])
                                  ->where('stage','W11')
                                  ->where('status_upload',0)->update(array(
                                        'status_upload'=>'1',
                                        'amount_release' => $value['amount_release'],
                                        'amount' => $value['amount'],
                                        'date_disburse' => $value['date_disburse'], 
                                        'net_disbursement' => $value['net_disbursement'],
                                        'disburse_date' => $value['disburse_date'],
                                        'product_type_description' => $value['product_type_description']

                    ));
                    $number += Loandisburse::where('ic', $value['ic_no'])
                                            ->where('stage','W11')
                                            ->where('status_upload',1)
                                            ->count(); // this is my code to count     
                }//Closing If Not Empty
            }//Closing For Each
        }//Closing If
    }//Closing If
return redirect('/upload/amount')->with(['update' => 'Data saved successfully '.$number.'  rows' ]);
}//Closing If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...