2017-09-22 129 views
1

我是新來的領域。我有類似下面的模式:React Native中的境界子查詢

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噸不同的食物,做我的餐廳提供一餐/組合爲了它。

例如,如果你設置食物1至巨無霸,FOOD2到薯條,food3到軟飲料,你應該得到一頓飯回來叫巨無霸餐

如果設置食物1至榴蓮,FOOD2到熱口袋,food3到香酥品牌模仿粥,沒飯吃ID將返回,因爲我的餐廳不供應組合這樣的。

+0

你能解釋一下你在查詢結果中有什麼成就嗎? – bennygenel

+0

@bennygenel確定只是給我的問題添加了更多解釋 – John

回答

1

我對SQL不太瞭解,但是我從你的問題中瞭解到,你正在嘗試找到含有特定食物的膳食。

領域查詢和模型就像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對象可以用領域建模這樣

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}`) 

這只是一個小例子,可以幫助你一點。希望能幫助到你。

+0

是'$ {foodId}'和數組?我指的是這個陳述'realm..objects('Meal')。filtered('foods.id == $ {foodId}')'。基本上我只想回來吃飯,如果我通過它的三種食物出現在餐中。 – John

+0

@John我在舉例時並不認爲它是一個數組。 'filtered'接受'AND'的使用。你可以嘗試'foods.id == $ {foodId1}和foods.id == $ {foodId2}和食物。id == $ {foodId3}'。我不確定這是否會工作,因爲沒有它的文檔。 – bennygenel