我正在尝试使用jugglingdb (和mysql适配器)来获取患者列表。我们的模式是这样设置的,即患者必须是用户,但用户不必是患者。这意味着患者有一个userId,而User表保存患者的姓名。
Patient
id
userId
User
id
givenName
familyName
middleInitial在创建初始页面时,我们只需使用Patient.all获取结果,使用patient.user(...获取用户对象/用户名。这对于少量的记录来说是可以的,但是对于数千条记录来说就不行了。
只有在患者表中引用了用户的id时,我才能获取用户列表?mysql查询示例:
SELECT * FROM User WHERE id IN (SELECT id FROM Patient) AND familyName LIKE '%doe%';我已经浏览了jugglingdb-mysql adapter一段时间了,还没有找到一个理想的解决方案,除此之外,this question是我到目前为止唯一找到的其他解决方案。
我可以使用的另一个替代/查询是在Patient和User之间创建一个内部连接,然后过滤结果:
SELECT Patient.id
,User.familyName
FROM Patient
INNER JOIN User ON Patient.userId = User.id
WHERE User.familyName LIKE '%doe%';但同样,我也没有找到使用杂耍数据库连接的解决方案。
发布于 2014-08-13 22:04:09
只要关系存在,您就可以始终使用include功能。例如:
Patient.belongsTo(User, { as: 'user', foreignKey: 'userId' });
// Empty callback for async getter.
var c = function () { };
Patient.all({
where: { blah: blash },
include: [ 'user' ]
}, function (err, patients) {
var user = patients[0].user(c);
}
);您甚至可以将关系包含到关系中。例如:
Role.belongsTo(User, { as: 'role', foreignKey: 'roleId' });
Patient.all({
where: { blah: blash },
include: [ { user: 'role' } ]
}, function (err, patients) {
var user = patients[0].user(c);
var userRole = user.role(c);
}
);需要注意的是,有时返回的关系对象(例如“角色”对象)可能是只读的。我没有深入研究这背后的原因,所以我不能给你一个有把握的答案,为什么会发生这种情况,如何发生,或者发生在哪里,但我相信这可能是在JugglingDB内部。
https://stackoverflow.com/questions/19013462
复制相似问题