Laravel-excel: Menggunakan "withValidation" itu menghentikan penyisipan jika terjadi kesalahan validasi. Saya ingin mengabaikan validasi ini dan melompat ke iterasi berikutnya

Dibuat pada 4 Mar 2019  ·  24Komentar  ·  Sumber: Maatwebsite/Laravel-Excel

Prasyarat

Versi

  • versi PHP:
  • Versi Laravel:
  • Versi paket:

Keterangan

informasi tambahan

Informasi, konfigurasi, atau data tambahan apa pun yang mungkin diperlukan untuk mereproduksi masalah.

Semua 24 komentar

kode saya

fungsi pengontrol:

public function import(Request $request) 
    {
        try {
            Excel::import(new UsersImport,request()->file('sheet_to_upload'));

            return redirect()->back()->with('success', 'Users Created Successfully!');
        } catch (\Maatwebsite\Excel\Validators\ValidationException $e) {
            $import = new UsersImport();
            $import->import(request()->file('sheet_to_upload'));

            foreach ($import->failures() as $failure) {
                 $failure->row(); // row that went wrong
                 $failure->attribute(); // either heading key (if using heading row concern) or column index
                 $failure->errors(); // Actual error messages from Laravel validator
                 $failure->values(); // The values of the row that has failed.
            }
        }
    }

kelas impor:

class UsersImport implements ToModel, WithValidation,WithHeadingRow
{
    use Importable;

    public function model(array $row)
    {
            $subscription = SubscriptionTypes::select('id')->where('name',$row['subscription_plan'])->first();
            $client_type = ClientTypes::select('id')->where('name',$row['user_type'])->first();


            if($subscription != null && $client_type != null){
                $user = Users::create([
                    'is_admin'              => 0,
                    'client_type_id'        => $client_type->id,
                    'subscription_id'       => $subscription->id,
                    'user_name'             => $row['user_name'],
                    'email'                 => $row['user_e_mail'],
                    'is_blocked'            => 0,
                    'password'              => Hash::make($row['password']),
                    'first_name'            => $row['user_first_name'],
                    'last_name'             => $row['user_last_name'],
                    'phone'                 => $row['phone'],
                    'notes'                 => $row['notes_for_internal_use'],
                    'created_by'            => Auth::user()->id,
                    'updated_by'            => Auth::user()->id,
                    'created_at'            => '',
                    'updated_at'            => '',
                    'license'               => $row['licenseorganization'],
                    'owg_invoice'           => $row['owg_invoice'],
                    'self_notification'     => $row['multi_site_initiative'] == 'Yes' ? 1 : 0,
                    'is_group_admin'        => 0,
                    'renewal_notification'  => 0

                ]);

                $country = Countries::select('id')->where('name',$row['country'])->first();
                if($country != null){
                    Addresses::create([
                        'user_id'           => $user->id,
                        'country'           => $country->name,
                        'city'              => $row['city'],
                        'state'             => $row['state'],
                        'street'            => $row['street_address'],
                        'zip'               => $row['zipcode'],
                        'organization_name' => $row['schoolcenterorg_name']

                    ]);
                }


                GroupAdmins::create([
                    'first_name'   => $row['admincooridnator_first_name'],
                    'last_name'    => $row['admincooridnator_last_name'],
                    'phone_number' => $row['admincooridnator_phone'],
                    'email'        => $row['admincooridnator_e_mail_address']
                ]);

                Subscriptions::create([
                    'user_id'              => $user->id,
                    'subscription_type_id' => $subscription->id
                ]);

                return $user;
            }
    }

    public function rules(): array
    {
        $packages = SubscriptionTypes::pluck('name');
        return [
            '*.license'     => 'numeric',
            '*.user_name'  => 'required|unique:users',
            '*.user_e_mail' => 'required|email|unique:users,email',
            '*.phone' => 'numeric',
            '*.subscription_plan' => Rule::in($packages)
        ];
    }

    public function customValidationMessages()
    {
        return [
            'subscription_plan.in' => 'this subscription plan does not exist',
        ];
    }

Lihat dokumentasi tentang melewatkan kegagalan: https://docs.laravel-excel.com/3.1/imports/validation.html#skipping -failures . Anda perlu menambahkan kekhawatiran SkipsOnFailure .

@patrickbrouwers Terima kasih!!!

Sekarang bagaimana jika saya ingin mengekspor kesalahan validasi ini?

Lihat contoh sifat SkipsFailures di halaman yang sama

 public function onFailure(Failure ...$failures)
    {
        $this->failures = array_merge($this->failures, $failures);
        dd($this->failures);

    }

itu hanya memberi saya kesalahan baris pertama

onFailure dipanggil pada setiap kegagalan. Anda harus mengumpulkannya sendiri atau dengan menggunakan sifat SkipsFailures . Kemudian Anda dapat mengumpulkannya di pengontrol Anda.

onFailure dipanggil pada setiap kegagalan. Anda harus mengumpulkannya sendiri atau dengan menggunakan sifat SkipsFailures . Kemudian Anda dapat mengumpulkannya di pengontrol Anda.

mendapatkan ini. Sekarang ingin mengekspor array kegagalan ini

Lihat dokumentasi ekspor. Ini adalah fungsi dasar untuk mengekspor larik baris.

capture

seperti yang terlihat pada gambar, saya hanya memiliki 15 catatan tetapi setiap kali saya mengimpor file ini, itu memberi saya 40 baris mengapa?

Kemungkinan besar karena file Anda memiliki baris kosong

onFailure dipanggil pada setiap kegagalan. Anda harus mengumpulkannya sendiri atau dengan menggunakan sifat SkipsFailures . Kemudian Anda dapat mengumpulkannya di pengontrol Anda.

mendapatkan ini. Sekarang ingin mengekspor array kegagalan ini

Dapatkah saya melakukan sesuatu seperti "Excel::download(new UsersExport, 'users.csv',$array)"

Apa itu $array ?

Apa itu $array ?

array kegagalan

Excel::download(new FailuresExport($array), 'failures.csv')

Excel::download(new FailuresExport($array), 'failures.csv')

lalu bagaimana cara mengakses $array di "FailuresExport".

Excel::download(new FailuresExport($array), 'failures.csv')

lalu bagaimana cara mengakses $array di "FailuresExport".

mengerti . Terima kasih banyak atas bantuan Anda

image

Mengapa saya mendapatkan ini?

image

Mengapa saya mendapatkan ini?

Silakan coba dengan $error->row() . Sepertinya Anda melewatkan ()

Terima kasih @patrickbrouwers @GlennM . Saya telah mencapai semua yang saya butuhkan dari paket ini !!!

tetapi satu-satunya hal terakhir yang tidak dapat saya pahami adalah. pada mengekspor array kegagalan setelah impor itu selalu memberi saya tambahan 40 baris. misalnya saya hanya memiliki satu baris di lembar saya yang saya impor "pengguna(1).xlsx
" lalu di file kegagalan "failures.xlsx" itu memberi saya kesalahan hingga 41 baris.
pengguna (1).xlsx
kegagalan.xlsx

Terima kasih @patrickbrouwers @GlennM . Saya telah mencapai semua yang saya butuhkan dari paket ini !!!

tetapi satu-satunya hal terakhir yang tidak dapat saya pahami adalah. pada mengekspor array kegagalan setelah impor itu selalu memberi saya tambahan 40 baris. misalnya saya hanya memiliki satu baris di lembar saya yang saya impor "pengguna(1).xlsx
" lalu di file kegagalan "failures.xlsx" itu memberi saya kesalahan hingga 41 baris.
pengguna (1).xlsx
kegagalan.xlsx

Mungkin ada beberapa konten yang tidak terlihat ke dalam baris tersebut, yang menyebabkan baris diurai.

Bisakah Anda mencoba menyalin/menempel 2 baris pertama ke file XLSX baru, gunakan file itu dan coba lagi untuk melihat kegagalan apa yang dikembalikan?

Terima kasih @patrickbrouwers @GlennM . Saya telah mencapai semua yang saya butuhkan dari paket ini !!!
tetapi satu-satunya hal terakhir yang tidak dapat saya pahami adalah. pada mengekspor array kegagalan setelah impor itu selalu memberi saya tambahan 40 baris. misalnya saya hanya memiliki satu baris di lembar saya yang saya impor "pengguna(1).xlsx
" lalu di file kegagalan "failures.xlsx" itu memberi saya kesalahan hingga 41 baris.
pengguna (1).xlsx
kegagalan.xlsx

Mungkin ada beberapa konten yang tidak terlihat ke dalam baris tersebut, yang menyebabkan baris diurai.

Bisakah Anda mencoba menyalin/menempel 2 baris pertama ke file XLSX baru, gunakan file itu dan coba lagi untuk melihat kegagalan apa yang dikembalikan?

Terima kasih Banyak Ini berfungsi Sekarang !!!! Saya pikir ada beberapa baris yang tidak terlihat.

bagaimana cara mengetahui apakah file yang diimpor kosong atau tidak memiliki data?

Hai, saya telah mengikuti semua langkah pada dokumen dari validasi, dan saya memiliki kesalahan ketika saya melakukan pemuatan pertama dengan validasi.

Jika saya mengomentari aturan validasi, saya dapat melakukan impor, kemudian jika saya membatalkan komentar aturan setelah melakukan impor pertama, saya dapat menangani kesalahan validasi.

Sekarang, masalah saya adalah, jika saya membiarkan aturan validasi tidak dikomentari dan melakukan impor pertama pada aplikasi saya, itu tidak berfungsi, saya dapat mengimpor untuk pertama kalinya di aplikasi saya HANYA mengomentari aturan, Bagaimana saya bisa menyelesaikan ini?

Saya meletakkan "skipsError", 'skipsFailure' dll dll dan tidak berfungsi.

@Yousaf3339 dapatkah Anda membagikan kode Anda kepada kami? Akan sangat membantu bagi orang-orang yang mencoba mencapai hal yang sama seperti yang Anda lakukan. Terima kasih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

contifico picture contifico  ·  3Komentar

rossjcooper picture rossjcooper  ·  3Komentar

daraghoshea picture daraghoshea  ·  3Komentar

bahmanyaghoobi picture bahmanyaghoobi  ·  3Komentar

disto picture disto  ·  3Komentar