Cuando revisé la parte del tema Laravel Document sobre Eloquent ORM, obtuve un nuevo término Mass Assignment
.
Mostrar documento Cómo hacer Asignación de masas y los fillable
o guarded
Configuración de propiedades. Pero después de pasar por eso, no entendí claramente Mass Assignment
cómo funciona.
En mi experiencia pasada en CodeIgniter, tampoco escuché sobre este término.
¿Alguien tiene una explicación simple sobre eso?
php
laravel
mass-assignment
Chen-Tsu Lin
fuente
fuente
Respuestas:
La asignación masiva es cuando envía una matriz a la creación del modelo, básicamente configurando un grupo de campos en el modelo de una sola vez, en lugar de uno por uno, algo así como:
(Esto es en lugar de establecer explícitamente cada valor en el modelo por separado).
Puede usar
fillable
para proteger qué campos desea que esto permita realmente la actualización.También puede bloquear la asignación masiva de todos los campos haciendo esto:
Digamos que en su tabla de usuario tiene un campo que es
user_type
y que puede tener valores de usuario / administradorObviamente, no desea que los usuarios puedan actualizar este valor. En teoría, si usó el código anterior, alguien podría inyectar en un formulario un nuevo campo
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:
Se asegura de que solo esos valores se puedan actualizar utilizando
mass assignment
Para poder actualizar el
user_type
valor, debe establecerlo explícitamente en el modelo y guardarlo, de esta manera:fuente
$user = new User(Input::all());
(como programador) es tan descontrolado (o en qué escenario sería tan útil).$user = new User; $user->name = 'Neo';
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 necesita guardar datos en su modelo uno por uno, sino más bien 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 puede modificar definitivamente todos los campos, incluida la ID? Eso no es bueno.
Digamos que usted tiene mesa "de los estudiantes, con los campos "student_type, nombre, apellido” . Es posible que desee asignar masa 'nombre, apellido', pero que desea proteger student_type de ser cambiado directamente. Ahí es donde se puede llenar y vigilado tener lugar.
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:el ' tipo_estudiante ' no está incluido, lo que significa que están exentos.
Guardado es el reverso de rellenable. Si rellenable especifica qué campos se asignarán en masa, guardado especifica qué campos no son asignables en masa. Entonces en el modelo:
debe usar $ fillable o $ guarded, no ambos.
Para más detalles abra el enlace: - Asignación masiva
fuente
La asignación masiva significa que está completando una fila con más de una columna utilizando una matriz de datos. (algo así como un acceso directo 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 se pueden insertar, 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, inserte en una columna llamada "secreto", y ha especificado que está guardado, puede intentar insertarlo 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 que se puede rellenar y que está protegido y lo hace vulnerable a algún tipo de ataque.
fuente
Esto es cuando una matriz de datos recibidos se guarda a la vez en un modelo.
Debido a los problemas de seguridad con este método en laravel, se recomienda que defina los campos que desea que los datos solicitados llenen en el Modelo.
Puede usar la
$fillable
variable para definir los campos que desea completar en la tabla de la base de datos.P.ej
Cuando laravel detecta que está asignando datos en masa, lo obliga a definir los campos que desea asignar en masa en la clase de modelo.
Alguien puede pasar fácilmente datos no deseados en un formulario html a su base de datos.
fuente