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 método Illuminate\Http\Request::isDirty no existe en Laravel.

Estoy usando el panel de administración Voyager. Quiero verificar los atributos que se han cambiado cuando envío el formulario. Estoy utilizando isDirty() y getDirty() pero eso no está funcionando.
Está mostrando el siguiente error:

Method Illuminate\Http\Request::isDirty does not exist.

A veces muestra este error:

Call to a member function isDirty() on string

Controlador de actualización

public function update(Request $request, $id)
{
    $slug = $this->getSlug($request);

    $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();

    // Compatibilidad con la vinculación de modelos.
    $id = $id instanceof \Illuminate\Database\Eloquent\Model
        ? $id->{$id->getKeyName()}
        : $id;

    $model = app($dataType->model_name);
    $query = $model->query();

    $data = $query->findOrFail($id);

    $this->insertUpdateData($request, $slug, $dataType->editRows, $data);

    // Esta parte muestra un error
    dd($request->isDirty(['status']));

    return $redirect->with([
        'message'    => __('voyager::generic.successfully_updated')." {$dataType->getTranslatedAttribute('display_name_singular')}",
        'alert-type' => 'success',
    ]);
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error está ocurriendo porque isDirty() y getDirty() son métodos de los modelos Eloquent, no de los objetos de solicitud. $request es una instancia de la clase Illuminate\Http\Request, pero deberías llamar a isDirty() y getDirty() en el objeto de modelo $data en su lugar.

    Aquí tienes una versión actualizada del método del controlador con las llamadas de método correctas:

    public function update(Request $request, $id)
    {
        $slug = $this->getSlug($request);
    
        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();
    
        // Compatibilidad con enlazado de modelo.
        $id = $id instanceof \Illuminate\Database\Eloquent\Model
            ? $id->{$id->getKeyName()}
            : $id;
    
        $model = app($dataType->model_name);
        $query = $model->query();
    
        $data = $query->findOrFail($id);
    
        $this->insertUpdateData($request, $slug, $dataType->editRows, $data);
    
        // Obtener los atributos que se modificaron en la solicitud
        $dirtyAttributes = $data->getDirty();
        if (!empty($dirtyAttributes)) {
            // Hacer algo con los atributos modificados
            dd($dirtyAttributes);
        }
    
        return $redirect->with([
            'message'    => __('voyager::generic.successfully_updated')." {$dataType->getTranslatedAttribute('display_name_singular')}",
            'alert-type' => 'success',
        ]);
    }
    

    Aquí, estamos llamando a getDirty() en el objeto $data para obtener los atributos que se modificaron en la solicitud. También estamos verificando si hay atributos modificados antes de intentar hacer algo con ellos, para evitar posibles errores.

Comments are closed.