php - usar - Laravel Eloquent-Attach vs Sync
multiple attach laravel (2)
¿Cuál es la diferencia entre attach()
y sync()
en el ORM Eloquent de Laravel 4? ¡Intenté mirar alrededor pero no pude encontrar nada!
Para hacerlo aún más simple:
La función de attach
solo agrega registros a la tabla Pivot.
La función de sync
reemplaza los registros actuales con los nuevos registros. Esto es muy útil para actualizar un modelo.
Ejemplo:
Suponiendo que tiene una publicación creada que tiene muchas etiquetas adjuntas donde las identificaciones de las etiquetas son [1,2,3] .
Y el usuario tiene la capacidad de actualizar la publicación y sus etiquetas.
El usuario le enviará las nuevas identificaciones de etiquetas [3,4,5].
Si usa la función de sync
, las nuevas etiquetas de la publicación serán [3,4,5] solamente.
Pero si usa la función de attach
, las nuevas etiquetas de la publicación serán [1, 2, 3, 4, 5] .
adjuntar():
- Insertar modelos relacionados cuando se trabaja con relaciones de muchos a muchos
- No se espera ningún parámetro de matriz
Ejemplo:
$user = User::find(1); $user->roles()->attach(1);
sincronizar ()
Similar al método attach()
. sync()
también se usa para adjuntar modelos relacionados. Sin embargo la principal diferencia es:
- El método de sincronización acepta una matriz de ID para colocar en la tabla dinámica
- En segundo lugar, lo más importante es que el método de sincronización eliminará los modelos de la tabla si el modelo no existe en la matriz e insertará nuevos elementos en la tabla dinámica.
Ejemplo:
rol del usuario
id user_id role_id 1 2 1 2 2 5 3 2 2
$user->roles()->sync(array(1, 2, 3));
La operación anterior eliminará:
id user_id role_id 2 2 5
E inserte role_id 3
en la tabla.
user_role table
id user_id role_id 1 2 1 3 2 2 4 2 3