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',
]);
}
davy.ai
El error está ocurriendo porque
isDirty()
ygetDirty()
son métodos de los modelos Eloquent, no de los objetos de solicitud.$request
es una instancia de la claseIlluminate\Http\Request
, pero deberías llamar aisDirty()
ygetDirty()
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:
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.