Я пытаюсь создать CSV из массива с некоторыми данными и другим массивом в нем.
Код:
public function exportCSV()
{
$user = Auth::user();
$company = $user->company;
$dealers = $company->dealers;
$formatted_dealers = [];
foreach ($dealers as $dealer) {
if($dealer->is_deleted == 0){
array_push($formatted_dealers, $dealer);
}
}
if(count($formatted_dealers) > 0){
$csvData = array('name,phone,email,is_active,streetname,number,zip,city,special_id,products');
foreach($formatted_dealers as $dealer){
$products = [];
foreach ($dealer->products as $product) {
array_push($products, $product->slug);
}
$products = json_encode($products);
$csvData[] = $dealer->name . ',' . $dealer->phone . ',' . $dealer->email . ',' . $dealer->is_active . ',' . $dealer->address->streetname . ',' . $dealer->address->number . ',' . $dealer->address->zip . ',' . $dealer->address->city . ',' . $dealer->special_id . ',' . $products;
}
$new_time = date('d-m-Y h:i:s', strtotime('+2 hours'));
$filename = $new_time . '.csv';
$file_path = base_path() . '/' . $filename;
$file = fopen($file_path,'w+');
foreach ($csvData as $exp_data){
fputcsv($file, explode(',', $exp_data));
}
fclose($file);
$headers = ['Content-Type' => 'application/csv'];
return response()->download($file_path, $filename, $headers)->deleteFileAfterSend(true);
} else {
return redirect()->route('dealers.index', ['export' => 'error']);
}
}
Итак, у меня есть некоторые данные, такие как имя дилера, телефон и т. Д., И массив продуктов, которые есть у дилера. Моя мысль заключалась в том, чтобы json_encode массива продуктов и затем добавить к строке, которая передается в массив csvData. Но результат, который я получаю при этом:
name,phone,email,is_active,streetname,number,zip,city,special_id,products
"Some name",11111111,example@example.com,1,xxxx,x,xxxx,xxxxxxxx,96548,"[""nBuGbW""","""qP3DAF""]"
"Another name",22222222,anoter@example.com,0,xxxxxxxx,x,xxxx,xxxxxx,,"[""nBuGbW""","""IRTQBN""]"
продуктов в массиве json слишком много ", и я не могу понять, почему.
Есть идеи?
В моей голове должно быть что-то вроде:
name,phone,email,is_active,streetname,number,zip,city,special_id,products
"Some name",11111111,example@example.com,1,xxxx,x,xxxx,xxxxxxxx,96548,["nBuGbW","qP3DAF"]"
"Another name",22222222,anoter@example.com,0,xxxxxxxx,x,xxxx,xxxxxx,,["nBuGbW","IRTQBN"]"