Проблема создания Excel в maatwebsite 3.1 в Laravel 6.4 - PullRequest
0 голосов
/ 21 марта 2020

Я работаю над приложением laravel, в котором пытаюсь сгенерировать Excel из данных в 2 таблицах в моей базе данных. Использовали SQL объединения для объединения данных из таблиц базы данных, что прекрасно работает. Я пытаюсь создать Excel из данных (используя Maatwebsite Laravel Excel пакет 3.1), затем сохранить Excel в папке в моем приложении, а затем отправил Excel в качестве вложения в тело письма.

Проблема в том, что когда я запускаю команду для генерации Excel, я получаю эту ошибку.

Symfony \ Component \ Debug \ Exception \ FatalThrowableError: Аргумент 2 передается в Maatwebsite \ Excel \ Excel :: download ( ) должен иметь тип строки, заданный объект, который вызывается в C: \ xampp \ htdocs \ jub \ ven dor \ laravel \ framework \ src \ Illuminate \ Support \ Facades \ Facade. php в строке 261

Я следовал документации и другим решениям в Интернете, но, похоже, что-то упустил в своей логике c.

  1. Выполнить команду экспорта из документации

    php ремесленник: экспорт MotorSalesExport

  2. MotorSalesExport. php файл

   <?php

        namespace App\Exports;

        use Modules\Motor\Entities\User;
        use Modules\Motor\Entities\Quotation;
        use Maatwebsite\Excel\Concerns\FromCollection;
        use DB;

        class MotorSalesExport implements FromCollection
        {
            /**
            * @return \Illuminate\Support\Collection
            */
            public function collection()
            {
                 //Combine data in Quotations and users table
                $allSales = DB::select('SELECT q.quotation_no, q.policy_number,  q.premium_amount,
                q.balance, q.business_type, q.risk_note, q.debit_note, q.output_status,
                u.first_name , u.middle_name, u.surname, u.email, u.phone, u.email, u.kra_pin, u.id_number
                FROM digital_lab_motor_quotations q INNER JOIN digital_lab_motor_users u ON 
                u.id=q.user_id WHERE q.payment_status = 2 AND payment_status= 2');

                return $allSales;
            }
        }
Artisan Команда для создания Excel
  <?php

    namespace App\Console\Commands\General;

    use DB;
    use Carbon\Carbon;
    use Illuminate\Console\Command;
    use Mail;
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use App\Exports\MotorSalesExport;
    use Maatwebsite\Excel\Facades\Excel;


    class GenerateMotorSales extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'generate-motor-sales';

        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'Queries all motor sales made online and generate an excel';

        /**
         * Create a new command instance.
         *
         * @return void
         */
        public function __construct()
        {
            parent::__construct();
        }

        /**
         * Execute the console command.
         *
         * @return mixed
         */
        public function handle()
        {
            $this->export();
        }


        public function export() 
        {

            $storage = public_path('documents\general\motor');
            $file_name = 'Sales_' . Carbon::now();
            $allData = new MotorSalesExport;

            Excel::download($file_name, function ($excel) use ($allData) {

                $excel->sheet('Motor Customers', function ($sheet) use ($allData) {
                    $sheet->fromArray($allData, '', 0, false, false);
                });
            })->store('xls', $storage);
        }
    }
...