給您的Excel工作表的列名
代碼完全一樣的數據庫列名以下是足夠的,按照上述控制器類
加,
use Maatwebsite\Excel\Facades\Excel;
和功能代碼,
public function postUploadCsv()
{
$rules = array(
'file' => 'required',
'num_records' => 'required',
);
$validator = Validator::make(Input::all(), $rules);
// process the form
if ($validator->fails())
{
return Redirect::to('customer-upload')->withErrors($validator);
}
else
{
try {
Excel::load(Input::file('file'), function ($reader) {
foreach ($reader->toArray() as $row) {
User::firstOrCreate($row);
}
});
\Session::flash('success', 'Users uploaded successfully.');
return redirect(route('users.index'));
} catch (\Exception $e) {
\Session::flash('error', $e->getMessage());
return redirect(route('users.index'));
}
}
}
UPDATE
假設有多於一個工作簿中一個片材,則必須額外foreach
遍歷片如下,
Excel::load(Input::file('file'), function ($reader) {
$reader->each(function($sheet) {
foreach ($sheet->toArray() as $row) {
User::firstOrCreate($row);
}
});
});
Read More
如果使用的是Laravel 5.3並給出您的Excel表格列不準確
利用下面的代碼,以適合您的需求
/**
* Import file into database Code
*
* @var array
*/
public function importExcel(Request $request)
{
if($request->hasFile('import_file')){
$path = $request->file('import_file')->getRealPath();
$data = Excel::load($path, function($reader) {})->get();
if(!empty($data) && $data->count()){
foreach ($data->toArray() as $key => $value) {
if(!empty($value)){
foreach ($value as $v) {
$insert[] = ['title' => $v['title'], 'description' => $v['description']];
}
}
}
if(!empty($insert)){
Item::insert($insert);
return back()->with('success','Insert Record successfully.');
}
}
}
return back()->with('error','Please Check your file, Something is wrong there.');
}
退房完整教程here
注意,默認情況 - 一旦你的數據被extacted從您的Excel工作表,所有的列名被轉換以小寫字母表示,名稱之間的所有空格都用下劃線替換。
嗨。感謝您的幫助,我已經解決了我的問題,然後纔看到您的答案,但是您的User :: firstOrCreate($ row);幫助我有一個更乾淨的代碼。比分配每個值,如$ customer-> title = $ value ['title'];謝謝!我會接受:) – jackhammer013
很高興我能幫到你。 –
@pinkalvansia如果有2張或更多的紙張,該怎麼辦?因爲根據你的代碼,'foreach'只會佔用第一張紙,對吧? –