我正在将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文件:
当我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
]
}
]
}
答案 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"
}
然后您可以将此数组插入数据库
有关详细信息,您可以查看以下问题的答案: