21. Qué es asignación masiva
La asignación masiva (Mass Assignment) en Laravel se refiere a la técnica de asignar valores a múltiples atributos de un modelo de forma simultánea utilizando un solo arreglo de datos. En lugar de asignar los valores uno por uno, puedes usar la asignación masiva para asignar múltiples valores a la vez. Si bien esto es conveniente y ahorra tiempo, también puede ser peligroso ya que puede permitir la asignación de valores a atributos que no deberían ser accesibles para el usuario, como contraseñas o valores de administrador. Para abordar este problema, Laravel proporciona la función fillable y guarded en los modelos para especificar los atributos que pueden ser asignados de forma masiva o los que deben ser protegidos contra la asignación masiva. En el decimoctavo capítulo del curso "Laravel desde cero", aprenderás cómo utilizar la asignación masiva en Laravel y cómo proteger tu aplicación de vulnerabilidades de seguridad relacionadas con la asignación masiva. Con estos conocimientos, podrás utilizar la asignación masiva de manera segura y eficiente en tus aplicaciones Laravel.
2 comentarios
Inicia sesión para comentar
Comentarios:
-
Walter hace 8 meses
📌 Asignación masiva
Nos permite reemplazar:
$curso = new Curso(); $curso->name = $request->name; $curso->description= $request->description; $curso->categoria= $request->categoria; $curso->save();
Por sólo esta línea de código:
$curso = Curso::create($request->all());
Por cuestiones de seguridad, para que no se agreguen campos no deseados en nuestra tabla, debemos indicarle al modelo cuáles son las propiedades deseadas (autorizadas) para crear el objeto. Eso lo hacemos agregando en app\Models\Curso.php:
protected $fillable = [ 'name', 'description', 'categoria' ];
Si la cantidad de propiedades es mucha podemos optar por usar:
protected $guarded = [ 'status' ];
Podemos dejar el array vacío y aún así nos permitirá la asignación masiva.
Ahora en el método update podemos reemplazar por:
$curso->update($request->all());
-
Juan Carlos Montaña Garzon hace 10 meses
una consulta, o mas bien error:
al dejarle activo en el modelo protected $fillable…. me sale un error de que SQLSTATE[HY000]: General error: 1364 Field 'nombre' doesn't have a default value (SQL: insert into `cursos` (`updated_at`, `created_at`)
pero cuando se deja activo protected $guarded=[]; me sale el error Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given, called in C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Database\Query\Grammars\Grammar.php on line 920.
sin embargo, si se imprime el json cuando se envia return $request->all(); desde el controller