我正在使用"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(';');
答案 0 :(得分:2)
当您使用find()
时,您将获得User
模型的实例,而不是集合。改为使用get:
$users = User::get();
如果您只想按ID使用一次,请删除循环:
$user = User::find($id);
....
$csv->insertOne($user->toArray());