Docs Menu
Docs Home
/ /
Datos del modelo

Relaciones - SDK de Flutter

Puedes referenciar otros modelos de Realm desde tu modelo de Realm. Esto te permite crear los siguientes tipos de relaciones entre objetos de Realm:

  • Relación de uno a uno

  • Relación de muchos

  • Relación inversa

También puede incrustar un objeto Realm directamente dentro de otro para crear una estructura de datos anidada. Los objetos incrustados son similares a las relaciones, pero ofrecen restricciones adicionales. Para obtener más información sobre estas restricciones y cómo crear objetos incrustados, consulte la documentación del tipo de datos Objetos incrustados.

Tip

Consulta de objetos relacionados

Una relación de uno a uno significa que un objeto está relacionado de una manera específica con no más de otro objeto.

Para establecer una relación de uno a uno, cree una propiedad en su modelo cuyo tipo sea otro modelo. Varios objetos pueden hacer referencia al mismo objeto.

Importante

Las relaciones de uno a uno deben ser opcionales

Al declarar una relación "a-uno" en el modelo de objetos, esta debe ser una propiedad opcional. Si se intenta que la relación "a-uno" sea obligatoria, Realm genera una excepción en tiempo de ejecución.

@RealmModel()
class _Bike {
@PrimaryKey()
late ObjectId id;
late String name;
late _Person? owner;
}
@RealmModel()
class _Person {
@PrimaryKey()
late ObjectId id;
late String firstName;
late String lastName;
late int? age;
}

Una relación de muchos significa que un objeto está relacionado de una manera específica con varios objetos.

Puede crear una relación entre un objeto y cualquier número de objetos utilizando una propiedad de tipo List<T> en su aplicación, donde T es una clase de modelo Realm.

@RealmModel()
class _Scooter {
@PrimaryKey()
late ObjectId id;
late String name;
late _Person? owner;
}
@RealmModel()
class _ScooterShop {
@PrimaryKey()
late ObjectId id;
late String name;
late List<_Scooter> scooters;
}

Una relación inversa vincula un objeto Realm con cualquier otro objeto Realm que haga referencia a él en relaciones de uno o de muchos.

Las relaciones inversas tienen las siguientes propiedades:

  • Debe definir explícitamente una propiedad en el modelo del objeto como una relación inversa. El esquema no puede inferir la relación inversa.

  • Las relaciones inversas se actualizan automáticamente con los vínculos de retroceso correspondientes. Se puede encontrar el mismo conjunto de objetos de Realm con una consulta manual, pero el campo de relación inversa reduce el código de consulta repetitivo y la posibilidad de error.

  • No se puede establecer manualmente el valor de una propiedad de relación inversa. En su lugar, Realm actualiza las relaciones implícitas al agregar o eliminar un objeto en la relación.

  • Los backlinks solo funcionan con objetos de Realm. Los objetos que aún no se han añadido a un realm no tienen backlinks.

Por ejemplo, la relación "a muchos" "un usuario tiene muchas tareas" no crea automáticamente la relación inversa "una tarea pertenece a un usuario". Si no se especifica la relación inversa en el modelo de objetos de tarea, se debe ejecutar una consulta independiente para buscar el usuario asignado a una tarea determinada.

Utilice la anotación de la propiedad "Backlink" para definir una relación inversa. Pase un símbolo del nombre del campo "a uno" o "a muchos" para el que está creando el backlink como argumento Backlink() a. Incluya un Iterable del modelo de objeto al que está creando el backlink en el campo debajo de la anotación.

@RealmModel()
class _User {
@PrimaryKey()
late ObjectId id;
late String username;
// One-to-many relationship that the backlink is created for below.
late List<_Task> tasks;
}
@RealmModel()
class _Task {
@PrimaryKey()
late ObjectId id;
late String description;
late bool isComplete;
// Backlink field. Links back to the `tasks` property in the `_User` model.
@Backlink(#tasks)
late Iterable<_User> linkedUser;
}

Nota

Relaciones inversas no presentes en el esquema de sincronización del dispositivo

Si utiliza Atlas Device Sync, las relaciones inversas no están presentes en el esquema de sincronización de dispositivos del lado del servidor en su aplicación de App Services. Dado que no puede establecer directamente el valor de una relación inversa, esta no existe en el esquema de sincronización de dispositivos.

Para obtener más información sobre el esquema de sincronización de dispositivos del lado del servidor, consulte Configurar y actualizar su modelo de datos en la documentación de Atlas App Services.

Volver

Tipos de datos

En esta página