2015-04-20 115 views
2

使用Sails.js文档页面给出的示例,我得到以下错误:“最大调用堆栈大小超出错误”。Sails.js一对多关联

items.find().populate("user", {name:givenName}).exec(function(err, response) { 
    console.log(response); 
} 

的问题是,当我看使用Wireshark,对数据库的查询试图找到每个用户(和数据库是大),但它不会使任何连接。

items 
+-----------+--------------+------+-----+ 
| Field  | Type   | Null | Key | 
+-----------+--------------+------+-----+ 
| id  | int(6)  | NO | PRI | 
| name  | varchar(255) | NO |  | 
+-----------+--------------+------+-----+ 
user 
+-----------+--------------+------+-----+ 
| Field  | Type   | Null | Key | 
+-----------+--------------+------+-----+ 
| id  | int(6)  | NO | PRI | 
| name  | varchar(255) | NO |  | 
| item_id | int(11)  | YES | MUL | 
+-----------+--------------+------+-----+ 
+1

有了这个查询,你得到所有用户在你的数据库中并为一个用户填充项目,这是你想要的吗? – jaumard

+1

我犯了一个错误,我刚刚纠正了我写的内容:我想要所有具有user_id = user.id的项目(两个表均由主键/外键链接) – johnmalkovitch

回答

-1

好吧,如果像你说你想只对特定用户的项目做到这一点:

user.findOneByName(givenName).exec(function(err, user) { 
    items.find().where({user : user.id}).exec(function(err, response) { 
     console.log(response); 
    }); 
}); 
+0

对不起,我不清楚,我想要所有项目有一个user_id = user.id(这两个表由主键/外键链接),但给出的参数是例如名称。所以用这个名字,我想在同一个表中获得id,然后将它与另一个表加入。 – johnmalkovitch

+0

我不认为你可以用find/populate来做到这一点......如果你想创建一个连接但你从来没有使用过这个,你需要用.query手工创建你的请求。我认为首先检索你的用户的名字和后发现/其中 – jaumard

+0

我更新了我的帖子来清除我的逻辑,我可以通过使用SQL查询,但然后我失去了什么ORM应该给我,事实上,我可以改变我的数据库一天,仍然能够查询它。 – johnmalkovitch

2

应该是简单的:

items 
    .find() 
    .populate("user") 
    .where({name: givenName}) //or .where({user: {name: givenName}}) 
    .exec(function(err, response) { 
     console.log(response); 
    }); 
+0

我试过了,但它与wireshark结果,我得到一个“Unkown列items.name在字段列表“ – johnmalkovitch

+0

我猜这是一个错字问题,但我找不到在哪里 – johnmalkovitch