Laravel-excel: [BUG] globalscopes tidak diterapkan pada ekspor

Dibuat pada 25 Jun 2020  ·  19Komentar  ·  Sumber: Maatwebsite/Laravel-Excel

Prasyarat

  • [x] Memeriksa apakah versi Laravel Excel Anda masih didukung: https://docs.laravel-excel.com/3.1/getting-started/support.html#supported -versions
  • [x] Mampu mereproduksi perilaku di luar kode Anda, masalahnya diisolasi ke Laravel Excel.
  • [x] Memeriksa apakah masalah Anda belum diajukan.
  • [x] Diperiksa jika tidak ada PR yang dikirimkan yang memperbaiki masalah ini.
  • [x] Mengisi seluruh template masalah

Versi

  • Versi PHP: PHP 7.4.7 (cli) (built: Jun 12 2020 00:00:24) ( NTS )
  • Versi Laravel: Laravel Framework 7.17.2
  • Versi paket: 3.1.19

Keterangan

paket tidak menghormati lingkup global pada ekspor ex.

protected static function booted()
    {
        static::addGlobalScope('latest_items', function (Builder $builder) {
            $builder->latest(
                $builder->qualifyColumn('created_at')
            );
        });
    }

pertanyaan benar mis.

select * from `requests` order by `requests`.`created_at` desc  

tetapi lembar yang diekspor tidak diurutkan.

Langkah-langkah untuk Reproduksi

  • tambah data dengan tanggal berbeda
  • tambahkan globalscope ke ordeby
  • ekspor lembar melalui query

Perilaku yang diharapkan:

  • globalscope harus dihormati.

Perilaku sebenarnya:

  • sheet tidak diurutkan menurut globalscope.
bug

Semua 19 komentar

Saya perlu melihat sedikit lebih banyak kode, saya tidak yakin apa yang ditunjukkan "statis" dan saya tidak dapat melihat jenis kueri apa yang Anda gunakan.

kuerinya sederhana seperti Request::query() dan statis adalah lingkup global di bawah model, contoh diperbarui

Bisakah Anda mencoba menempatkan cakupan global itu di penyedia layanan, saya tidak yakin panggilan balik yang di-boot dipanggil karena alasan kinerja.

sebenarnya booted adalah tempat yang benar https://laravel.com/docs/master/eloquent#global -scopes

Saya tidak mengatakan tidak. Saya mencoba mencari tahu mengapa itu tidak dipanggil.

ya saya mengerti, np saya akan mencobanya.

perhatikan bahwa menggunakan melalui penyedia layanan akan membuat fw membutuhkan waktu lebih lama untuk menyelesaikan kelas dan pengikatannya b4 menggunakannya.

maaf atas jawaban yang terlambat, mencoba penyedia layanan tetapi sayangnya memberikan hasil yang sama.

Apakah Anda menggunakan dari kueri dan harus mengantri?

menggunakan FromQuery ya & tidak mengantri

saya percaya masalahnya adalah dengan fungsi ekspor bukan kueri, karena saya bisa mendapatkan sql yang benar.

Tampaknya metode chunk/chunkById Laravel tidak menghormati cakupan global. Mereka berfungsi ketika saya menentukan orderBy pada kueri itu sendiri.

Anda dapat mencoba mereproduksi tanpa paket ini dan melihat:

$first = Request::query()->first();
Request::query()->chunk(100, function($chunk) use($first) {

// Compare first results
dd($first, $chunk->first());
});

Tidak yakin apakah bug di Laravel atau apakah itu dimaksudkan untuk berfungsi seperti ini.

saya sudah mencoba mencari apakah orang lain memiliki masalah yang sama, hanya satu tiket yang dibuat tetapi kemudian ditutup pada hari yang sama tanpa detail lebih lanjut.

mungkin kita bisa mencoba menggunakan kursor sebagai gantinya? yang lebih baik daripada chunking untuk kumpulan data besar.

Itu akan menjadi default di 3.2 ya.

Di 3.1 Anda dapat mengembalikan kursor dalam metode pengumpulan

jadi bug ini harus diperbaiki di versi berikutnya maksud Anda?

Ya itu harus bekerja di luar kotak di versi berikutnya

ada estimasi kapan itu?

Maaf, saya tidak punya ETA untuk itu.

public function collection()
{
    return Request::query()->cursor()
}

^ ini seharusnya sudah cukup untuk Anda, saya pikir

saya tidak berpikir ini akan berhasil dengan pengaturan kueri, masih thanx lagi, jika Anda mau, Anda dapat menutup tiket ini.

Itu akan menggantikan metode query() yang Anda miliki sekarang. Mencobanya!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat