【问题标题】:How to reference on already created object in Realm?如何在领域中引用已创建的对象?
【发布时间】:2016-11-01 13:15:40
【问题描述】:

让我们以官方领域文档为例。我们有汽车和人。

const CarSchema = {
  name: 'Car',
  properties: {
    id:  {type: 'string'}, // UUID
    make:  {type: 'string'},
    model: {type: 'string'}
  }
};

const PersonSchema = {
  name: 'Person',
  properties: {
    name:  {type: 'string'},
    car: '' // Something here to reference on already created car??
  }
};

例如,我已经创建了一些带有 UUID id-s 的汽车。现在我想创建一个用户。在 UI 中,它看起来像表单,您可以在其中输入用户名并从下拉列表中选择已创建的车辆之一。

那么如何引用已经创建的汽车呢?应该是带id的字符串,还是什么?

【问题讨论】:

  • 不应该是{type: 'CarSchema'},吗?
  • @Divers 好的,然后应该如何创建一个人,car 的值应该是什么?
  • 我不知道它在 JS 中会如何,但在 Java 中应该是这样的:CarSchema car = new CarSchema(12313, "Volvo", "XC60"); PersonSchema person = new PersonSchema("Belarussian", car); 它适用于有适当构造函数的情况。
  • @Divers 看起来我抓住了你。谢谢,我会尝试一种方法:)
  • @Divers 在你的例子中,如果我要换车,是否也会在 Person 对象中改变?比如我把“Volvo”改成“VOLVO”,会影响所有人吗?

标签: database react-native realm


【解决方案1】:

链接是 Realm 中的一等公民,因此您无需引入人工外键。您可以直接链接到另一个对象模式。在基于 JavaScript 的绑定中,您可以通过将相关对象模式的名称指定为 type 来实现这一点,如下所示。

const PersonSchema = {
  name: 'Person',
  properties: {
    name:  { type: 'string' },
    car:   { type: 'Car' } // or just: 'Car'
  }
};

使用这样的模型,您可以创建Person 对象,并附加一个已经存在的Car,如下所示:

const realm = …
const volvo = realm.objects("Car").filtered("make = $0 AND model = $1", "Volvo", "XC60")[0];
const person = realm.create("Person", {
   name: "Tim",
   car:  volvo,
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多