Laravel-excel: [PERTANYAAN] Bagaimana cara mengembalikan data dari metode impor yang diterapkan?

Dibuat pada 3 Jan 2019  ·  10Komentar  ·  Sumber: Maatwebsite/Laravel-Excel

Prasyarat

Versi

  • Versi PHP: 7.2.2
  • Versi Laravel: 5.6.0
  • Versi paket: 3.1.0

Deskripsi

Saya hanya ingin tahu apakah ada cara untuk berkomunikasi dengan pengontrol saya dari metode impor yang diterapkan. Saya sudah mencoba mengembalikan array data ke pengontrol tetapi tidak berhasil. Belum pernah melihat penyebutan ini ...

Saya tahu saya dapat menggunakan toCollection dan mengembalikan seluruh impor ke koleksi di pengontrol tetapi khawatir tentang kinerja yang terpukul.

question

Komentar yang paling membantu

class SalesImport implements ToCollection
{
    public $data;

    public function collection(Collection $rows)
    {
        .... lots of other stuff ....
        $this->data = $data;
    }
$import = new SalesImport;
Excel::import($import, 'imports/salesdata.xlsx');
dd($import->data);

Semua 10 komentar

Letakkan data yang diimpor ke dalam properti kelas objek impor Anda dan buat pengambil untuknya yang dapat Anda panggil setelah impor selesai di pengontrol Anda.

Saya pasti masih melewatkan sesuatu, izinkan saya menjelaskan sedikit lebih spesifik.

Jadi, inilah panggilan impor saya di pengontrol saya:
$import = Excel::import(new SalesImport, 'imports/salesdata.xlsx');

class SalesImport implements ToCollection
{
    public function collection(Collection $rows)
    {
        .... lots of other stuff ....
        $this->data = $data;
    }

Jelas bagi saya bahwa data ini tidak kembali ke objek $ import saya di controller, tapi saya rasa saya perlu mengimplementasikan sesuatu selain ToCollection di sini?

class SalesImport implements ToCollection
{
    public $data;

    public function collection(Collection $rows)
    {
        .... lots of other stuff ....
        $this->data = $data;
    }
$import = new SalesImport;
Excel::import($import, 'imports/salesdata.xlsx');
dd($import->data);
class SalesImport implements ToCollection
{
    public $data;

    public function collection(Collection $rows)
    {
        .... lots of other stuff ....
        $this->data = $data;
    }

$import = new SalesImport; Excel::import($import, 'imports/salesdata.xlsx'); dd($import->data);

Hebat!

class SalesImport implements ToCollection
{
    public $data;

    public function collection(Collection $rows)
    {
        .... lots of other stuff ....
        $this->data = $data;
    }
$import = new SalesImport;
Excel::import($import, 'imports/salesdata.xlsx');
dd($import->data);

Bisakah Anda mengaturnya di https://docs.laravel-excel.com/3.1/imports/collection.html atau tempat lain dalam dokumentasi? Saya kehilangan banyak waktu untuk mencarinya.

Contoh serupa telah ada di dokumen untuk sementara waktu: https://docs.laravel-excel.com/3.1/architecture/objects.html#getters

Perpustakaan yang bagus, contoh ini berfungsi dengan baik untuk satu lembar.
Adakah tips tentang penerapan dengan impor WithMultipleSheets? Bagaimana cara menghitung jumlah baris?

Di CRUD saya mendapatkan: Panggilan ke metode yang tidak ditentukan MaatwebsiteExcelExcel :: getRowCount ()

Saya menggunakan kelas untuk memanggil importir lembar specfic:

class ExcelSampleSheetsImport implements WithMultipleSheets 
{    
    protected $params; 

    public function __construct($params) 
    {
        $this->params = $params;
    }

    public function sheets(): array
    {
        return [
            'Sheet to import' => new ExcelSampleImport($this->params)
        ];
    }
}

Pada kelas ExcelSampleImport saya telah menerapkan penghitung seperti yang ditentukan pada dokumen.

Bagaimana saya bisa melakukan ini tetapi dengan beberapa lembar?

Kelas impor

class CommunityImport implements WithMultipleSheets
{   
    use WithConditionalSheets;

    public function conditionalSheets(): array
    {
        return [
            0 => new FirstSheetCommunityImport(),
            1 => new SecondSheetCommunityImport(),
        ];
    }   
}

Kelas untuk lembar pertama

class FirstSheetCommunityImport implements ToCollection
{   
    public $id;

    public function collection(Collection $rows)
    {
    $i=0;
        foreach ($rows as $row) 
        {
            if($i==0){
            $this->id = $row[0];
            }
            $i++;
        }
    }    
}

Pengontrol Halaman - Bagaimana cara mengakses id dari kelas FirstSheetCommunityImport?

public function import()
     {
    $import = new CommunityImport();
    $import->onlySheets(0);
        Excel::import($import, storage_path('app/xls/').'comunidad-import.xlsx');
     } 

Untuk mengakses id itu dari FirstSheetCommunityClass adalah masalah bagi saya, tetapi saya menggunakan cache Laravel untuk menyimpan koleksi saya selama 10 menit dan kemudian mengaksesnya dari pengontrol menggunakan Cache Facade

Inilah pendapat saya tentang getter dengan beberapa lembar. Menggunakan cache untuk ini bukanlah ide yang baik menurut saya ...

<?php
// VendorsExtraDataImportSheet.php:

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;

class VendorsExtraDataImportSheet implements ToCollection
{
    public $count = 0;

    public function collection(Collection $rows)
    {
            $this->count++;
    }
}
<?php
// VendorsExtraDataImport.php

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithConditionalSheets;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;

class VendorsExtraDataImport implements ToCollection, WithMultipleSheets
{
    use WithConditionalSheets;

    public const SHEET_TO_IMPORT = 'Example data input';

    public $sheet;

    public function collection(Collection $rows)
    {
    }


    public function conditionalSheets(): array
    {
        if (!$this->sheet) {
            $this->sheet = new VendorsExtraDataImportSheet;
        }

        return [
            self::SHEET_TO_IMPORT => $this->sheet,
        ];
    }
}
<?php
    // ...
    // PageController.php
    public function import()
    {
        $import = new VendorsExtraDataImport();
        $import->onlySheets(VendorsExtraDataImport::SHEET_TO_IMPORT);
        Excel::import($import, resource_path('data/vendors.xlsx'));
        dd($import->sheet->count);
    } 
    // ...
Apakah halaman ini membantu?
0 / 5 - 0 peringkat