将内容导出到CSV文件

时间:2017-01-27 12:48:15

标签: laravel

我正在使用"league/csv": "^8.2"包进行CSV导出/导入,我尝试使用此代码将内容导出到CSV文件:

public function exportCSV($id)
{
    $users= User::find($id);

    $csv = \League\Csv\Writer::createFromFileObject(new \SplTempFileObject());
    $csv->insertOne(\Schema::getColumnListing('users'));
    foreach ($users as $user) {
        $csv->insertOne($user->toArray());
    }
    $csv->output('users.csv');
}

但我收到错误FatalErrorException: Call to a member function toArray() on boolean

当我dd($users)时,我得到了Collection,而不是布尔值。有什么帮助吗?

修改

@Alexey Mezenin的回答帮助了我。但有没有办法使用这个包插入新列?我试过这个:

$rows     = [
        [1, 2, 3],
        ['foo', 'bar', 'baz'],
        'test',
    ];
$csv = \League\Csv\Writer::createFromFileObject(new \SplTempFileObject());
$csv->insertAll($rows);
$csv->output('users.csv');

但它每次都会将数据插入新行。像:

'1,2,3
foo, bar,baz
test

我想为每个数组添加一个新列...

编辑2

我用以下方法解决了它:

$csv->setDelimiter(';');

1 个答案:

答案 0 :(得分:2)

当您使用find()时,您将获得User模型的实例,而不是集合。改为使用get:

$users = User::get();

如果您只想按ID使用一次,请删除循环:

$user = User::find($id);
....
$csv->insertOne($user->toArray());