es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El script intentó llamar a un método en un objeto incompleto.

Tengo un archivo de Excel que contiene 8K productos. Estoy utilizando el paquete laravel-excel cuando cargo el archivo, solo se cargan 1K de productos y luego obtengo este error en la tabla jobs_faild:

Error: El script intentó llamar a un método en un objeto incompleto. 
Asegúrese de que la definición de la clase "App\Imports\ImportProducts" 
del objeto en el que está tratando de operar se haya cargado <em>antes</em> de que se llame a unserialize() 
o proporcione un cargador automático para cargar la definición de la clase en /var/app/current/vendor/maatwebsite/excel/src/Jobs/ReadChunk.php:107

Rastreo de pila:

1 /var/app/current/vendor/maatwebsite/excel/src/Jobs/ReadChunk.php(107): method_exists(Object(PHP_Incomplete_Class), 'middleware')

2 /var/app/current/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(117): Maatwebsite\Excel\Jobs\ReadChunk->middleware()

Mi controlador para cargar el archivo:

public function updateOrCreateProduct(Request $request)
{
    $request->validate([
        'file' => 'required|file|mimes:xlsx,csv'
    ]);

    (new ImportProducts)->queue($request->file);

    return $this->apiRespone(success: "producto actualizado");
}

El archivo ImportProducts contiene:

class ImportProducts implements
    ToCollection,
    WithChunkReading,
    ShouldQueue,
    WithEvents,
    SkipsEmptyRows,
    WithHeadingRow
{
    use Importable, RegistersEventListeners;

    public function collection(Collection $rows)
    {
        foreach ($rows as $row) {
            // mi lógica para almacenar los datos en la tabla de productos
        }
    }

    public function chunkSize(): int
    {
        return 100;
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que la definición de clase para “App\Imports\ImportProducts” no se cargó correctamente cuando se llamó a la función unserialize(), lo que llevó al error. Esto podría deberse a un problema con la autocarga o carga de clases.

    En el código del controlador proporcionado, se llama al método “queue” en una instancia de “ImportProducts” con el archivo de solicitud pasado como argumento. Sin embargo, no está claro si el archivo se está procesando correctamente por la clase de importación.

    Una posible solución podría ser modificar la clase de importación para agregar manejo de excepciones y registro de eventos para identificar cualquier problema con la carga o procesamiento del archivo de Excel. Además, verificar el entorno y la configuración del servidor, incluyendo la versión de PHP y el límite de memoria, puede ayudar a resolver cualquier problema subyacente.

    También puede ser útil verificar cualquier actualización o corrección de errores relacionada con el paquete “laravel-excel”, ya que esto podría resolver potencialmente el problema de cargar los 8 mil productos completos desde el archivo de Excel.

Comments are closed.