#php #laravel
#php #laravel
Вопрос:
Я начинающий веб-разработчик, я использую в своем проекте Laravel 7 и maatwebsite / excel
У меня есть этот код:
namespace AppModels;
use AppModelsReservation;
use MaatwebsiteExcelExcel;
use MaatwebsiteExcelConcernsFromCollection;
use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsWithHeadings;
use MaatwebsiteExcelConcernsExportable;
class ReservationExport implements FromCollection, WithHeadings
{
use Exportable;
protected $date;
public function __construct(string $date)
{
$this->date = $date;
}
public function headings(): array
{
return [
'LP',
'ID Rezerwacji',
'Adres email',
'Token',
'Data',
'Godzina',
'Tor',
'Płeć',
];
}
public function collection()
{
$res = Reservation::select('id', 'id', 'email', 'token', 'date', 'hour', 'track', 'sex')->where('date', $this->date)->orderBy('time', 'ASC')->orderBy('track', 'ASC')->get();
foreach ($res as $val) {
$val->sex = ($val->sex == 1) ? 'kobieta' : 'mężczyzna';
}
return $res;
}
}
public function export(Request $request)
{
return Excel::download(new ReservationExport($request->input('query')), 'reservation-'.$request->input('query').'.xlsx');
}
Этот код генерирует документ Excel. Это работает нормально. Я хотел бы добавить порядковый номер в 1 столбец (1,2,3 и т.д.).
Как я могу это сделать?
Моя модель:
class Reservation extends Model
{
protected $quarded = ['id'];
protected $fillable = ['email', 'token', 'date', 'hour', 'track', 'sex', 'time', 'people'];
public $timestamps = true;
protected $table = 'reservations';
}
Пожалуйста, помогите
Ответ №1:
попробуйте это
в основном вам нужно добавить sn
в заголовок, затем в вашей коллекции вам нужен новый ключ sn
с вычисляемым sequence number
надеюсь, что это сработает, если нет, пожалуйста, скажите мне, какую ошибку вы получаете
<?php
use AppModelsReservation;
use MaatwebsiteExcelExcel;
use MaatwebsiteExcelConcernsFromCollection;
use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsWithHeadings;
use MaatwebsiteExcelConcernsExportable;
class ReservationExport implements FromCollection, WithHeadings
{
use Exportable;
protected $date;
public function __construct(string $date)
{
$this->date = $date;
}
public function headings(): array
{
return [
'SN', // sn new key adding
'LP',
'ID Rezerwacji',
'Adres email',
'Token',
'Data',
'Godzina',
'Tor',
'Płeć',
];
}
public function collection()
{
$res = Reservation::select('id', 'id', 'email', 'token', 'date', 'hour', 'track', 'sex')->where('date', $this->date)->orderBy('time', 'ASC')->orderBy('track', 'ASC')->get();
foreach ($res as $val) {
$val->sex = ($val->sex == 1) ? 'kobieta' : 'mężczyzna';
}
$res->map(function ($row,$key) {
return $row['sn'] = $key; // sn key added to collection
});
return $res;
}
}
Комментарии:
1. Это не работает; у меня ошибка: возвращаемое значение Maatwebsite Excel Sheet::mapArraybleRow() должно иметь тип array, возвращаемый int