parse.com从联接表中选择

时间:2014-02-19 15:06:15

标签: join parse-platform

只是想知道我是在正确地做这件事还是有更好的方法。

我有3张桌子,游戏,用户和用户游戏。 UserGame是一个连接表,指向游戏和用户表。

以下脚本将返回用户已加入的所有游戏。

var Game = Parse.Object.extend("Game");
var UserGame = Parse.Object.extend("UserGame");

var innerQuery = new Parse.Query(Game);

var query = new Parse.Query(UserGame);
query.equalTo("user", user);
query.matchesQuery("game", innerQuery);
query.include("game");
query.find({

我现在正在尝试返回用户尚未加入的游戏。我尝试了上述查询的反向,但它不起作用。有什么想法吗?

还有比使用上面的连接表更好的解决方案,我应该只添加一个游戏指针列表到用户表吗?

2 个答案:

答案 0 :(得分:2)

这是有用的(并且无法从网站轻松访问)

https://parse.com/docs/js/symbols/Parse.Query.html

您尝试做的事情似乎是.noContainerIn([results of the first query]).doesNotMatchKeyInQuery

的良好用法 您的第一个示例中的

matchesKeyInQuery似乎更易于使用BTW

答案 1 :(得分:1)

我已经使用了一个内部有两个指针的表。我将解释我做了什么简化,并将其简化为你的情况:

1.使用您的对象Game建立一个查询,以获取此表中存在的所有游戏的数组:

var Game = Parse.Object.extend("Game");
    var query = new Parse.Query(Game);
    query.find({
      success: function(arrayGames) { 
       //store this array to manage later
      },
      error: function(user, error) {
            alert("There is not stored games");
            }
    });

2。获取您想要与存储在UserGame表中存储的游戏进行比较的用户,并对之前获得的数组的每个元素进行查询:

var UserGame = Parse.Object.extend("UserGame");
    var query = new Parse.Query(UserGame);
var currentUser = Parse.User.current();
var currentGame;
for(var i=0; i<arrayGames.length ;i++){
 currentGame=arrayGames[i];
 query.equalTo("Game", currentGame);
 query.notEqualTo("User", currentUser);
  query.find({
      success: function(foundGames) {
      //you have got an array with the games not joined to this user 
      },
       error: function(user, error) {
            alert("There are not joined games ");
                }
    });
}

希望它有所帮助,问我是否需要更多细节;)