Pertenecer a
Un pertenece a
establece una conexión de uno a uno con otro modelo, de tal manera que cada instancia del modelo declarante “pertenece” a una instancia del otro modelo.
Por ejemplo, si su aplicación incluye usuarios y empresas, y cada usuario puede ser asignado a una empresa exactamente, los siguientes tipos representan esa relación. Ten en cuenta que en el objeto User
hay tanto un CompanyID
como una Company
. Por defecto, el CompanyID
se utiliza implícitamente para crear una relación de clave foránea entre las tablas User
y Company
, y por lo tanto debe incluirse en la estructura User
con el fin de llenar el struct Company
.
// `User` belongs to `Company`, `CompanyID` is the foreign key |
Consulte Carga diligente para obtener detalles sobre cómo llenar la estructura interior.
Sobrescritura de Clave Foránea
Para definir una relación de pertenencia, la clave foránea debe existir, la clave foránea por defecto utiliza el nombre del tipo del propietario más el nombre del campo principal.
Para el ejemplo anterior, para definir el modelo User
que pertenece a Company
, la clave foránea debe ser CompanyID
por convención
GORM proporciona una manera de personalizar la clave foránea, por ejemplo:
type User struct { |
Sobrescritura de Referencias
Para una relación perteneciente, GORM usualmente usa el campo primario del propietario como el valor de la clave foránea, para el ejemplo anterior, es el campo ID
de Company
.
Al asignar un usuario a una empresa, GORM guardará el ID
de la empresa en el campo CompanyID
del usuario.
Puedes cambiarlo con la etiqueta references
, por ejemplo:
type User struct { |
NOTA GORM generalmente asume la relación como
tiene una
si el nombre de clave foránea ya existe en el tipo del propietario, necesitamos especificarreferences
en la relaciónpertenece a
.
type User struct { |
CRUD con Pertenece a
Por favor, compruebe que el modo de asociación para trabajar con relaciones pertenece a
Carga diligente
GORM permite la carga diligente con asociaciones pertenece a usando precarga
o Uniones
, consulte precarga (carga diligente) para más detalles
Restricciones de Clave Foránea
Puede configurar OnUpdate
, OnDelete
restricciones con la etiqueta constraint
, se creará al migrar con GORM, por ejemplo:
type User struct { |