0

我正在尝试使用 jugglingdb (和 mysql 适配器)来获取患者列表。我们的模式设置为患者必须是用户,但用户不必是患者。这意味着 Patient 有一个 userId,而 User 表保存着患者的姓名。

Patient
    id
    userId
User
    id
    givenName
    familyName
    middleInitial

创建初始页面时,我们只是用来Patient.all抓取结果,并patient.user(...抓取用户对象/用户名。这适用于少量记录,但不适用于数千条记录。

只有在 Patient 表中引用了他们的 id 时,我如何获取用户列表?mysql查询示例:

SELECT * FROM User WHERE id IN (SELECT id FROM Patient) AND familyName LIKE '%doe%';

我已经浏览了一段时间的jugglingdb-mysql 适配器并没有找到理想的解决方案,否则,这个问题是我迄今为止找到的唯一其他解决方案。

我可以使用的另一种选择/查询是在 Patient 和 User 之间创建一个内部连接,然后过滤结果:

SELECT Patient.id
      ,User.familyName
FROM Patient 
    INNER JOIN User ON Patient.userId = User.id 
WHERE User.familyName LIKE '%doe%';

但同样,我还没有找到使用 jugglingdb 连接的解决方案。

4

1 回答 1

1

只要关系存在,您始终可以使用包含功能。例如:

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 本身内部。

于 2014-08-13T14:04:08.567 回答