updateorcreate property name mass fillable assignment allow php laravel mass-assignment

php - property - ¿Qué significa "Asignación masiva" en Laravel?



updateorcreate laravel (4)

Cuando revisé el Documento Laravel sobre la parte del tema ORM Elocuente, obtuve un nuevo término Mass Assignment .

Mostrar documento Cómo hacer asignación masiva y las configuraciones de propiedades que se pueden fillable o fillable . Pero después de pasar por eso, no entendí claramente acerca de la Mass Assignment y cómo funciona.

En mi experiencia pasada en CodeIgniter, tampoco escuché acerca de este término.

¿Alguien tiene una explicación simple sobre eso?


Asignación masiva significa que está llenando una fila con más de una columna usando una matriz de datos. (algo así como un atajo en lugar de construir manualmente la matriz) usando Input::all() .

Técnicamente solo desde lo alto de mi cabeza. Rellenable significa qué columnas de la tabla pueden insertarse, guardado significa que el modelo no puede insertarse en esa columna en particular.

Tenga en cuenta que cuando intenta hacer una asignación masiva con like, inserta en una columna llamada "secret", y ha especificado que está protegida, puede intentar insertarla a través del modelo, pero nunca se insertará realmente en la base de datos.

Esto es por seguridad y protección en su mesa cuando usa el modelo. La asignación masiva parece ser solo un aviso o advertencia de que no le dijiste al modelo cuáles son rellenables y protegidos y lo hacen vulnerable a algún tipo de ataque.


La asignación masiva es cuando envía una matriz a la creación del modelo, básicamente configurando un conjunto de campos en el modelo de una sola vez, en lugar de uno por uno, algo así como:

$user = new User(Input::all());

(Esto es en lugar de establecer explícitamente cada valor en el modelo por separado).

Puede usar el fillable para proteger los campos que desea que esto realmente permita la actualización.

Digamos en su tabla de usuarios que tiene un campo que es user_type y que puede tener valores de usuario / admin.

Obviamente, no desea que los usuarios puedan actualizar este valor. En teoría, si utilizó el código anterior, alguien podría inyectar en un formulario un nuevo campo para user_type y enviar ''admin'' junto con los otros datos del formulario, y cambiar fácilmente su cuenta a una cuenta de administrador ... malas noticias.

Añadiendo:

$fillable = array(''name'', ''password'', ''email'');

Usted se está asegurando de que solo esos valores puedan actualizarse mediante mass assignment

Para poder actualizar el valor user_type , debe establecerlo explícitamente en el modelo y guardarlo, así:

$user->user_type = ''admin''; $user->save();


La asignación masiva es un proceso de envío de una matriz de datos que se guardará en el modelo especificado a la vez. En general, no es necesario que guarde los datos de su modelo en una base individual, sino en un solo proceso.

La asignación masiva es buena, pero hay ciertos problemas de seguridad detrás de ella. ¿Qué pasa si alguien pasa un valor al modelo y sin protección definitivamente pueden modificar todos los campos, incluida la identificación. Eso no es bueno.

Supongamos que tiene la tabla "alumnos", con los campos "tipo_estudiante, primer nombre, apellido_último" . Es posible que desee asignar en masa "primer nombre, último nombre", pero desea proteger student_type para que no se modifique directamente. Ahí es donde se pueden rellenar y custodiar .

Rellenable le permite especificar qué campos son asignables en masa en su modelo, puede hacerlo agregando la variable especial $fillable al modelo. Entonces en el modelo:

class Student extends Model { protected $fillable = [''first_name'', ''last_name'']; //only the field names inside the array can be mass-assign }

el '' student_type '' no está incluido, lo que significa que están exentos.

Guardado es el reverso de rellenables. Si rellenable especifica qué campos se asignarán en masa, guardado especifica qué campos no se asignan en masa. Entonces en el modelo:

class Student extends Model { protected $guarded = [''student_type'']; //the field name inside the array is not mass-assignable }

debe usar $ rellenables o $ guardados, no ambos.

Para más detalles, abra el enlace: - Asignación masiva