React Native中的领域子查询

时间:2017-09-22 23:54:06

标签: react-native realm

我对领域不熟悉。我有一个如下的架构:

class MealItem {}
MealItem.schema = {
    name: 'MealItem',
    properties: {
        mealId: {type: 'int'},
        foodId: {type: 'int'},
    },
};

我想做相同的事情:

SELECT
  mealId
FROM MealItem
WHERE foodId = @food1
AND mealId IN (SELECT mealId FROM MealItem WHERE foodId = @food2
AND mealId IN (SELECT mealId FROM MealItem WHERE foodId = @food3))

我不知道从哪里开始,除了为循环编写大量的javascript。是否有一种不那么冗长的方式呢?

更多信息

基本上我还有另外两个这样的对象:

class Meal {}
Meal.schema = {
    name: 'Meal',
    properties: {
        mealId: {type: 'int'},
        mealName: {type: 'string'},
    },
};
class Food{}
Food.schema = {
    name: 'Food',
    properties: {
        foodId: {type: 'int'},
        foodName: {type: 'string'},
    },
};

所以我的原始查询是为了确定是否给出了3种不同的食物,我的餐厅是否提供了一餐/组合。

例如,如果您将food1设置为 Big Mac ,food2设置为 Fries ,food3设置为 Soft Drink ,您应该回来吃饭叫做 Big Mac Meal

如果您将food1设置为榴莲,将food2设置为热口袋,将food3设置为 Krusty Brand Imitation Gruel ,则不会返回任何用餐ID,因为我的餐厅没有这样的组合服务。

1 个答案:

答案 0 :(得分:1)

我对SQL并不了解,但我从您的问题中了解到,您正在尝试寻找含有特定食物的食物。

Realm查询和模型的工作方式类似于NoSQL数据库,因此在创建模型时可能需要稍微考虑一下。

例如,假设您有3个表。一个包含膳食,一个包含食物,一个包含MealId包含哪个FoodId的数据。在Realm中你不需要3桌。你可以认为它是一个javascript对象。

实施例

const meal = {
  mealId: 0001,
  name: 'Big Fat Menu',
  price: '4.99'
  foods: [{
    foodId: 11,
    name: 'Burger'
  }, {
    foodId: 12,
    name: 'Fries'
  }, {
    foodId: 13,
    name: 'Coke'
  }]
}

这个javascript对象可以像Realm这样

建模
const FoodSchema = {
  name: 'Food',
  primaryKey: 'foodId',
  properties: {
    foodId: 'string'
    name: 'string',
  }
};

const MealsSchema = {
  name: 'Meal',
  primaryKey: 'mealId',
  properties: {
    mealId: 'string'
    name: 'string',
    price: 'double',
    foods: { type: 'list', , objectType: 'Food'}
  }
};

使用此模式,您可以进行以下查询以获得包含特定食物的膳食

const meals = realm..objects('Meal').filtered(`foods.id == ${foodId}`)

这只是一个小例子来帮助你。希望它有所帮助。