如何使用laravel中的Maatwebsite包连接两个表并通过excel导入数据



我正在尝试使用控制器中的查询来连接用户和客户端表

控制器中的导出功能

public function export() 
{
//$arrays = [$level_one_array, $level_two_array, $level_three_array];
$arrays =  Client::select('clients.*','users.*')->join('users', 'users.id', '=', 'clients.user_id')->where('users.type', '=', 'client')->get();
return Excel::download(new ClientsExport($arrays), 'clients.xlsx');
}

用户和客户端表由id连接。我将这些过滤后的数据传递给导出函数

ClientsExport内部的代码

class ClientsExport implements FromCollection
{
/**
* @return IlluminateSupportCollection
*/
private $collection;
public function __construct($arrays)
{
$output = [];
foreach ($arrays as $array) {
// get headers for current dataset
$output[] = array_keys($array[0]);
// store values for each row
foreach ($array as $row) {
$output[] = array_values($row);
}
// add an empty row before the next dataset
$output[] = [''];
}
$this->collection = collect($output);
}
public function collection()
{
return $this->collection;
}
}

但是我收到错误

[2021-11-09 14:42:58] local.ERROR: array_values() expects parameter 1 to be array, object given {"userId":1,"exception":"[object] (ErrorException(code: 0): array_values() expects parameter 1 to be array, object given at /home/myonecity/public_html/crm/app/Exports/ClientsExport.php:23)
[stacktrace]

如何解决此问题?

在导出函数中进行以下更改。将get((替换为toArray((。

public function export() 
{
//$arrays = [$level_one_array, $level_two_array, $level_three_array];
$arrays =  Client::select('clients.*','users.*')->join('users', 'users.id', '=', 'clients.user_id')->where('users.type', '=', 'client')->toArray();
return Excel::download(new ClientsExport($arrays), 'clients.xlsx');
}

最新更新