2017-03-07 56 views
1

我有這個CSV(不包括行標題)Laravel Excel導入CSV負載數據

001001,BENITEZ LI,2052,2059,2016-04-27 09:07:20 
001002,CASA PARRO,13937,13945,2016-04-21 09:07:20 
001004,NUEVO BANC,701,709,2016-04-23 22:07:20 

使用這個腳本:

Excel::filter('chunk')->load(public_path().'/uploads/'.$filename)->chunk(250, function($results) { 
        foreach ($results as $row) { 
         $user = Lectura::create([ 
          'partida' => $row->partida, 
          'nombre' => $row->nombre, 
          'lectura_ant' => $row->lectura_ant, 
          'lectura_act' => $row->lectura_act, 
          'fecha' => $row->fecha,          
         ]); 
        } 
       }); 

我想用這個代碼導入到我的數據庫,我可以得到正確每一行。但添加了空值。傾銷變量:

CellCollection {#734 ▼ 
    #title: null 
    #items: array:5 [▼ 
    "001001" => "001002" 
    "benitez_li" => "CASA PARRO" 
    2052 => 13937.0 
    2059 => 13945.0 
    "2016_04_27_090720" => "2016-04-21 09:07:20" 
    ] 
} 

或許應該是(如何定義的列名):

CellCollection {#734 ▼ 
    #title: null 
    #items: array:5 [▼ 
    "partida" => "001002" 
    "nombre" => "CASA PARRO" 
    "lectura_ant"=> 13937.0 
    "lectura_act"=> 13945.0 
    "fecha" => "2016-04-21 09:07:20" 
    ] 
} 

或更好(轉換成數組)。如何獲得價值? $ row [1],$ row [2] ....

CellCollection {#734 ▼ 
    #title: null 
    #items: array:5 [▼ 
    "0" => "001002" 
    "1" => "CASA PARRO" 
    "2"=> 13937.0 
    "3"=> 13945.0 
    "4" => "2016-04-21 09:07:20" 
    ] 
} 
+0

您是否在模型中設置了$ fillable變量?對於批量分配,您必須設置它。 'protected $ fillable = [ 'partida','nombre','lectura_ant','lectura_act','fecha' ];' – AndyCola

+0

謝謝Andy。是的,所有的都可以。我解決了添加兩行$ reader-> toArray(); $ reader-> noHeading(); –

回答

0

解決!添加兩行:

 $rows = Excel::load(public_path().'/uploads/'.$filename, function($reader) { 
      $reader->toArray(); 
      $reader->noHeading(); 
     })->get(); 

     foreach ($rows as $row) { 
      $item = array([ 
       'partida' => $row[0], 
       'nombre' => $row[1], 
       'lectura_ant' => $row[2], 
       'lectura_act' => $row[3], 
       'fecha' => $row[4], 
      ]); 
      DB::table('lecturas_temp')->insert($item); 
     }