Search code examples
laraveleloquentlaravel-8maatwebsite-excel

Undefinde offset:1 when importing laravel excel


this my code cause the trouble,

$cust = Customer::where('name', '=', $data[$i][0]['customer_name'])
    ->pluck('customer_id')[0];

this one for get customer id when i do store to sales order

$sales = array(
       'customer_id' => Customer::where('name', '=', $data[$i][0]['customer_name'])->pluck('customer_id')[0],
       'logistics_id' => Logistic::where('logistics_name', '=', $data[$i][0]['logistics'])->pluck('logistics_id')[0],
       'subtotal' => $data[$i][0]['subtotal_rp'],
       'shipping_cost' => $data[$i][0]['shipping_cost_rp'],
       'discount_code' => 0,
       'date_of_sales' => $data[$i][0]['date'],
       'grand_total' => $data[$i][0]['grand_total_rp'],
       'tax' => $data[$i][0]['tax_rp'],
       'status' => $data[$i][0]['status'],
       'discount_amount' => $data[$i][0]['discount_amount_rp']
);
$store_so = SalesOrder::create($sales);

but, when i do dd(), i get the right data


Solution

  • First of all, you need to check if the $data variable returns the data as you expect.

    dd($data);
    

    Next, you need to check that the $data array has the number of elements according to $total_data.

    dd(count($data) == $total_data));
    

    So basically, you just need to give condition or try-catch (recommended) :

    if (isset($data[$i][0])) {
        $customer = Customer::where('name', $data[$i][0]['customer_name'])->first();
        $logistic = Logistic::where('logistics_name', $data[$i][0]['logistics'])->first();
    
        if(!$customer){
            dd('No customer found!');
        }
    
        if(!$logistic){
            dd('No logistic found!');
        }
    
        $sales = [
            'customer_id'     => $customer->customer_id,
            'logistics_id'    => $logistic->logistics_id,
            'subtotal'        => $data[$i][0]['subtotal_rp'],
            'shipping_cost'   => $data[$i][0]['shipping_cost_rp'],
            'discount_code'   => 0,
            'date_of_sales'   => $data[$i][0]['date'],
            'grand_total'     => $data[$i][0]['grand_total_rp'],
            'tax'             => $data[$i][0]['tax_rp'],
            'status'          => $data[$i][0]['status'],
            'discount_amount' => $data[$i][0]['discount_amount_rp'],
        ];
        $store_so = SalesOrder::create($sales);
    }
    else{
        dd('No $data[$i][0] found!');
    }
    

    PS : I recommend using the first() method instead of pluck('customer_id')[0].