Я воссоздал пример вашего проекта, чтобы выполнить эту работу: Следуйте инструкциям для реализации точно так же, как я:
- Установочный пакет:
composer require maatwebsite/excel
Теперь выполните следующую команду:
php artisan make:export ClaimsExport --model=Claim
Это создаст
app / Exports / ClaimsExport.php .Вставьте следующий код:
<?php
namespace App\Exports;
use App\Claim;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use Maatwebsite\Excel\Concerns\WithEvents;
use PhpOffice\PhpSpreadsheet\Style\Border;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\FromCollection;
class ClaimsExport implements FromCollection, WithHeadings, ShouldAutoSize, WithEvents, WithMapping
{
//
public function headings(): array
{
return [
'Utilisateur',
'Référence',
'Infraction',
'Groupe oiseaux',
"Type de braconnage",
"Type de l'espèce",
"Nom de l'espèce",
"Autre info de l'espèce",
"Description de l'oiseau",
"Le nombre d'oiseau",
"Le nombre d'oiseaux mis en vente",
"Prix de vente",
"Lieu de la vente",
"Nombre d'oiseaux détenus",
"Interdiction de la chasse",
"Présence des forces de l'ordre",
"Contact des autorités compétentes",
'Liste des autorités compétentes',
"Intervention immédiate",
"Type d'intervention",
"L'objectif de la détention",
"Autre objectif",
"Indications sur l'état de l'oiseau",
"Autre indication",
"Lieu de l'infraction",
"Gouvernorat de l'infraction",
"Latitude",
"Longitude",
"Date de l'infraction",
"L'heure de l'infraction",
"Description de l'infraction",
"Etat",
"Date de création",
];
}
//
public function collection()
{
return Claim::with('user')->get();
}
//
public function map($claim): array
{
// TODO: following two lines are fake data for visualisation
$braconnage = 'A|B';
$contact = 'C|D';
// TODO: Implement this
// $braconnage_link = Claimtypelink::where('claim_id', $claim->id)->with('claimbrac')->get();
// $contact_link = Claimcontactlink::where('claim_id', $claim->id)->with('claimcontactaut')->get();
if (isset($braconnage_link)) {
foreach ($braconnage_link as $key => $value) {
$braconnage = $braconnage . $value->claimbrac['title_fr'] . ' | ';
}
}
if (isset($contact_link)) {
foreach ($contact_link as $key => $value) {
$contact = $contact . $value->claimcontactaut['title_fr'] . ' | ';
}
}
return [
$claim->user['name'],
$claim->reference,
$claim->name_infraction,
$claim->group_oiseau,
$braconnage,
$claim->type_espece,
$claim->bird['title_fr'],
$claim->type_espece_other,
$claim->description_oiseau,
$claim->num_espece,
$claim->num_espece_vente,
$claim->prix_vente,
$claim->lieu_vente,
$claim->num_espece_detenu,
$claim->interdiction_chasse,
$claim->presence_ordre,
$claim->contact_autorite,
$contact,
$claim->intervention_immediate,
$claim->type_intervention,
$claim->objectif_detention,
$claim->objectif_detention_other,
$claim->indication_etat_oiseau,
$claim->indication_etat_oiseau_other,
$claim->lieu_infraction,
$claim->governorate['title_fr'],
$claim->latitude,
$claim->longitude,
$claim->date_infraction,
$claim->time_infraction,
$claim->description_infraction,
$claim->etat,
$claim->created_at,
];
}
//
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
$styleArray = [
'font' => [
'bold' => true,
'size' => 12,
'name' => 'Calibri',
'color' => ['argb' => 'FFFFFFFF'],
],
'borders' => [
'outline' => [
'borderStyle' => Border::BORDER_THIN,
],
],
'fill' => [
'fillType' => Fill::FILL_SOLID,
'startColor' => [
'argb' => 'FF1E86CF',
],
],
];
$event->sheet->getDelegate()->getStyle('A1:AG1')->applyFromArray($styleArray);
},
];
}
}
public function export()
{
$name = 'Liste réclamations ' . date('d-m-Y H-i') . '.xlsx';
return Excel::download(new ClaimsExport, $name);
}
и добавьте его в начало этого файла:
use App\Exports\ClaimsExport;
use Maatwebsite\Excel\Facades\Excel;
Внутри маршрутов добавьте:
Route::get('claims/export', 'ClaimController@export')->name('export');
и все готово.