Добавление порядкового номера в модели Laravel

#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