2017-09-22 8 views
1

私は領域に新しいです。レルム内のレルムサブクエリネイティブ

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のLOTを書くこと以外に開始する場所がわからないんだけど、私は次のようなスキーマを持っています。それほど冗長な方法はありませんか?

詳細

は基本的に私はこのような二つの他のオブジェクトがあります、だから私の元のクエリは、3種類の食品を与えられたかどうかを判断するためのものです

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'}, 
    }, 
}; 

は私のレストランでは、食事/コンボを提供していそれのための。例えば

あなたは、ビッグマックフリースにfood2にソフトドリンクにfood3をfood1を設定した場合、あなたが戻ってビッグマック食事と呼ばれる食事を取得する必要があります。

あなたはドリアンホットポケットクラスティブランドの模造粥にfood3にfood2にfood1を設定した場合、私のレストランでは、そのようなコンボを提供していないので、食事なしのIDが、返されません。

+0

質問の結果であなたが達成しようとしていることをもう少し説明できますか? – bennygenel

+0

@bennygenelは私の質問に多くの説明を追加しました – John

答えて

1

私はSQLについてよく分かりませんが、私があなたの質問から理解するのは、特定の食品を含む食事を見つけようとしていることです。

Realmのクエリとモデルは、NoSQLデータベースと同じように機能するため、モデルを作成する際に少し違いを感じる必要があります。

たとえば、3つのテーブルがあるとします。 1つに食事が含まれ、1つには食品が含まれ、1つにはMealIdに含まれるデータが含まれます。FoodId。レルムでは、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} ')'。基本的に私は3つの食べ物を食べると食事だけを返したい。 – John

+0

@ジョン私が例を挙げている間、私は配列としてそれを考えなかった。 'filtered'は' AND'の使用を受け入れます。お試しください 'foods.id == $ {foodId1} AND foods.id == $ {foodId2} AND食品。id == $ {foodId3} '。私はこれについてのドキュメントがないので、これがうまくいくかどうか分からない。 – bennygenel