1

我正在尝试使用Laravel Excel存储库使用 Laravel 中的 excel 文件(.csv)的数据更新 sql 数据库表。

我的控制器函数返回 excel 文件的内容,但只是在一个 2 的数组中(应该是 604)。

因此,我认为我必须在我的函数中添加“行尾 \t”。
但是我不知道怎么做。



到目前为止,这是我所知道

的:控制器

public function uploadExcel()
{
        Excel::load(Input::file('import_file'), function ($reader) {

        foreach ($reader->toArray() as $value) {
            $insert[] = [
            'member_title' => $value->member_title,
            'member_first_name' => $value->member_first_name,
            'member_name_affix' => $value->member_name_affix,
            'member_last_name' => $value->member_last_name,
            'member_private_address' => $value->member_private_address,
            'member_private_zip_code' => $value->member_private_zip_code,
            'member_private_location' => $value->member_private_location,
            'member_private_phone' => $value->member_private_phone,
            'member_private_mobile' => $value->member_private_mobile,
            'member_private_fax' => $value->member_private_fax,
            'member_private_mail' => $value->member_private_mail,
            'member_business_position' => $value->member_business_position,
            'member_business_name' => $value->member_business_name,
            'member_business_address' => $value->member_business_address,
            'member_business_zip_code' => $value->member_business_zip_code,
            'member_business_location' => $value->member_business_location,
            'member_business_area_code' => $value->member_business_area_code,
            'member_business_phone' => $value->member_business_phone,
            'member_business_fax' => $value->member_business_fax,
            'member_business_mobile' => $value->member_business_mobile,
            'member_business_mail' => $value->member_business_mail,
            'member_join_date' => $value->member_join_date,
            'extra' => $value->extra
            ];
        }
    });
    if(!empty($insert)) {
        die(var_dump($insert)); <-- puts out the array for testing
        DB::table('members')->insert($insert);
    }
    return redirect('index.index');
}


根据官方文档,我必须将其添加到我的项目中以识别正确的行尾:

class UserListImport extends \Maatwebsite\Excel\Files\ExcelFile {
    protected $lineEnding = '\t';
}



如果我的预感是正确的并且文档中的这个片段可以解决我的问题:

我必须在哪里创建这个文件,其中包含文档中的代码?

我是否必须更改其他任何内容才能使该文件生效?


我对 Laravel 真的很陌生,我会非常感谢任何形式的帮助!



更新


错误信息

App\UserListImport 类包含 1 个抽象方法,因此必须声明为抽象方法或实现其余方法 (Maatwebsite\Excel\Files\ExcelFile::getFile)

应用程序/UserListImport.php

namespace App;

    class UserListImport extends \Maatwebsite\Excel\Files\ExcelFile {
    protected $lineEnding = '\t';

    public function loadExcel() {
        Excel::load(Input::file('import_file'), function ($reader) {

            foreach ($reader->toArray() as $value) {
                $insert[] = [
                'member_title' => $value->member_title,
                'member_first_name' => $value->member_first_name,
                'member_name_affix' => $value->member_name_affix,
                'member_last_name' => $value->member_last_name,
                'member_private_address' => $value->member_private_address,
                'member_private_zip_code' => $value->member_private_zip_code,
                'member_private_location' => $value->member_private_location,
                'member_private_phone' => $value->member_private_phone,
                'member_private_mobile' => $value->member_private_mobile,
                'member_private_fax' => $value->member_private_fax,
                'member_private_mail' => $value->member_private_mail,
                'member_business_position' => $value->member_business_position,
                'member_business_name' => $value->member_business_name,
                'member_business_address' => $value->member_business_address,
                'member_business_zip_code' => $value->member_business_zip_code,
                'member_business_location' => $value->member_business_location,
                'member_business_area_code' => $value->member_business_area_code,
                'member_business_phone' => $value->member_business_phone,
                'member_business_fax' => $value->member_business_fax,
                'member_business_mobile' => $value->member_business_mobile,
                'member_business_mail' => $value->member_business_mail,
                'member_join_date' => $value->member_join_date,
                'extra' => $value->extra
                ];
            }
        });
        if(!empty($insert)) {
            die(var_dump($insert));
            DB::table('members')->insert($insert);
        }
        return redirect('index.index');
    }
}


控制器

use Maatwebsite\Excel\Facades\Excel;
use App\UserListImport;

public function uploadExcel()
{
    UserListImport::loadExcel();
}
4

2 回答 2

1

文档假定您创建了一个新的自定义类扩展Excelfile.

class UserListImport extends \Maatwebsite\Excel\Files\ExcelFile

就是这个意思。

我通常更喜欢为我的应用程序需要的任何东西添加我自己的应用程序命名空间文件夹。

在这种情况下,我将从控制器中提取任何内容并调用我自己的类来处理Input::file('import_file')。该类是放置该属性以覆盖库与文件交互方式的地方。

于 2016-08-31T07:24:43.687 回答
0

\t意味着制表(单词之间的差距)。对于行尾,使用以下字符组合'\n', '\r\n'。这取决于操作系统。'\n'适用于 Unix/Linux/Mac OS,'\r\n'适用于 Windows 系列。

于 2016-08-31T07:19:02.523 回答