Laravel:无法访问受保护的属性Maatwebsite \ Excel \ Collections \ RowCollection

时间:2016-08-11 14:56:07

标签: php excel laravel laravel-5 maatwebsite-excel

我正在将xlsx导入sql,但导入时我收到以下错误:

FatalThrowableError in ItemController.php line 41:
Cannot access protected property Maatwebsite\Excel\Collections\RowCollection::$title

如果有人遇到同样的问题或知道会有什么建议,希望你能帮我找到它。

这是我的控制器部分:

    public function importExcel()
        {

            if(Input::hasFile('import_file')){
                $path = Input::file('import_file')->getRealPath();
                $data = Excel::load($path, function($reader) {
                })->get();

                if(!empty($data) && $data->count()){
                    foreach ($data as $key => $value) {
                     $insert[] = ['title' => $value->title, 'description' => $value->description];
  //Line : 41                    
                    }
                    if(!empty($insert)){
                        DB::table('items')->insert($insert);
                      //  dd('Insert Record successfully.');
                    }
                }
            }
            return back();
        }

路线部分:

Route::post('/importExcel',[
        'uses'=>'ItemController@importExcel',
        'as'=>'importExcel'
    ]);

这是导入xlsx文件:

enter image description here

当我dd($ data)时,我看到了以下数组:

RowCollection {#464 ▼
  #title: "Sheet1"
  #items: array:2 [▼
    0 => CellCollection {#390 ▼
      #title: null
      #items: array:3 [▼
        "title" => "Abdul"
        "description" => "This is Zaman"
        0 => null
      ]
    }
    1 => CellCollection {#410 ▼
      #title: null
      #items: array:3 [▼
        "title" => "Zaman"
        "description" => "This is Abdul"
        0 => null
      ]
    }
  ]
}

3 个答案:

答案 0 :(得分:1)

您可以将集合转换为数组以访问每个项目属性

$data = Excel::load($path)->toArray();

// dd($data)

答案 1 :(得分:0)

这应该适合你:

Select * from table_name where id = 3119093
if (Input::hasFile('import_file')){ $path = Input::file('import_file')->getRealPath(); $data = Excel::load($data, function($reader) { // Loop through all rows $reader->each(function($row) { DB::table('items')->insert([ 'title' => $row->title, 'description' => $row->description ]); }); }); } return back(); 中的

force_sheets_collection必须设置为config/excel.php

答案 2 :(得分:0)

你需要像这样做另一个循环

foreach ($data as $rows)
{
    foreach ($rows as $row)
    {
        $insert[] = ['title' => $row->title, 'description' => $row->description];
    }
}
var_dupmp($insert);

你应该看到这个结果

array(2) {
  [0]=>
  array(2) {
    ["title"]=>
    string(5) "Zaman"
    ["description"]=>
    string(13) "This is Zaman"
  }
  [1]=>
  array(2) {
    ["title"]=>
    string(5) "Abdul"
    ["description"]=>
    string(13) "This is Abdul"
  }

然后您可以将此数组插入数据库

有关详细信息,您可以查看以下问题的答案:

https://github.com/Maatwebsite/Laravel-Excel/issues/351