我是该博客的新手,因为有一段时间的问题而加入了我。
以下代码用于通过.csv文件将用户导入数据库,但是当我尝试导入用户时,出现以下错误。
8
"Undefined index: name"
"D:\xampp\htdocs\plataforma\app\Http\Controllers\UserController.php"
39
array:7 [▼
"request" => Request {#43 ▶}
"validator" => Validator {#257}
"file" => UploadedFile {#247 ▶}
"csvData" => """
name,username,email,password,role,idSede,idManager\r\n
Claudio Magallan,claudiomg,claudiomagallan@hotmail.com,secret,2,60,0\r\n
Cristina Vargas,cristyvg,cristyvargas@institutodeventas.com,secret,3,61,4\r\n
"""
"rows" => array:3 [▶]
"header" => array:7 [▶]
"row" => array:7 [▶]
]
非常感谢您的帮助,希望您能为我的问题提供帮助。 我附上我的控制器代码。
public function upload(Request $request) {
$validator = Validator::make($request->all(), [
'file' => 'required'
]);
if ($validator->fails()) {
return redirect()
->back()
->withErrors($validator);
}
$file = $request->file('file');
$csvData = file_get_contents($file);
$rows = array_map("str_getcsv", explode("\n", $csvData));
$header = array_shift($rows);
foreach ($rows as $row) {
$row = array_combine($header, $row);
User::create([
'name' => $row['name'],
'username' => $row['username'],
'email' => $row['email'],
'password' => bcrypt($row['password']),
'role' => $row['role'],
'idSede' => $row['idSede'],
'idManager'=> $row['idManager'],
]);
}
flash('Users imported');
return redirect()->back();
}
错误标记下一行代码:
'name'=> $ row ['name'],
致谢!
答案 0 :(得分:1)
以下更改可能有效:
$rows = array_map("str_getcsv", explode("\n", $csvData));
$header = array_shift($rows);
array_pop($rows); // delete the element
foreach ($rows as $row) { .. }
可以使用dump()
或dd()
轻松调试Laravel:
foreach ($rows as $row) {
$row = array_combine($header, $row);
dump($row); // print the current row for debugging.
User::create([
'name' => $row['name'],
...
]);
}
这将产生类似:
array(7) {
["name"]=> "Claudio Magallan"
....
}
array(7) {
["name"]=> "Cristina Vargas"
....
}
bool(false)
因此,错误之前的最后一行是false
,而不是数组。只需滤除此元素即可。
如果只有最后一行是垃圾,请使用array_pop($rows)
删除$rows
的元素。或手动删除CSV最后一行中的换行符。
如果更多行是垃圾,则可以使用array_filter
删除不符合要求的行。例如:
$header = array_shift($rows);
$rows = array_filter($rows, function ($row) use ($header) {
return count($row) === count($header);
});
foreach ($rows as $row) { .. }