《laravel数据库迁移_laravel导入excel》
在Laravel项目中,将Excel数据导入到数据库是一个常见的需求。解决方案是利用Laravel的数据库迁移功能构建好数据库结构,并结合第三方库如maatwebsite/excel
来处理Excel文件的读取和导入操作。
一、使用maatwebsite/excel库
通过Composer安装maatwebsite/excel
库,在命令行输入composer require maatwebsite/excel
。
然后创建一个用于导入的模型类,例如我们有一个用户信息的Excel要导入,先确保已经通过迁移创建了users表。在模型User.php中:
php
namespace AppModels;</p>
<p>use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;</p>
<p>class User extends Authenticatable
{
use HasFactory;</p>
<pre><code>protected $fillable = ['name', 'email', 'password'];
}
接下来创建一个导入类php artisan make:import UsersImport --model=User
,这会在App/Imports
目录下生成UsersImport.php文件:
php
namespace AppImports;</p>
<p>use AppModelsUser;
use MaatwebsiteExcelConcernsToModel;
use MaatwebsiteExcelConcernsWithHeadingRow;</p>
<p>class UsersImport implements ToModel, WithHeadingRow
{
public function model(array $row)
{
return new User([
'name' => $row['name'],
'email' => $row['email'],
'password' => bcrypt($row['password']),
]);
}
}
在控制器中实现导入逻辑,比如UserController.php:
php
namespace AppHttpControllers;</p>
<p>use AppImportsUsersImport;
use MaatwebsiteExcelFacadesExcel;
use IlluminateHttpRequest;</p>
<p>class UserController extends Controller
{
public function import(Request $request)
{
$file = $request->file('excel_file');
Excel::import(new UsersImport(), $file);
return back()->with('success', 'Excel数据导入成功!');
}
}
同时在视图中提供一个文件上传表单,指向上述控制器方法。
二、另一种思路 - 手动解析Excel
如果不想使用额外的库,也可以用原生的方法。先用PhpSpreadsheet等库读取Excel内容,再逐行插入数据库。
在控制器中:
```php
use PhpOfficePhpSpreadsheetIOFactory;
public function manualImport(Request $request)
{
$path = $request->file('excel_file')->getRealPath();
$spreadsheet = IOFactory::load($path);
$worksheet = $spreadsheet->getActiveSheet();
$highestRow = $worksheet->getHighestRow();
for ($row = 2; $row <= $highestRow; $row++) {
$name = $worksheet->getCell("A{$row}")->getValue();
$email = $worksheet->getCell("B{$row}")->getValue();
$password = $worksheet->getCell("C{$row}")->getValue();
User::create([
'name' => $name,
'email' => $email,
'password' => bcrypt($password),
]);
}
return back()->with('success', 'Excel数据手动解析导入成功!');
}
```
以上两种方法都可以实现Laravel中Excel数据向数据库的导入,可以根据项目需求和环境选择合适的方式。