问题描述
我刚刚使用了knex异议js。目前,我与一对多表的关系如下。
表user_groups:
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
------------+--------------------------+-----------+----------+--------------------------------------------+----------+--------------+-------------
id | integer | | not null | nextval('dl_user_groups_id_seq'::regclass) | plain | |
title | character varying(128) | | not null | | extended | |
slug | character varying(128) | | not null | | extended | |
desc | character varying(512) | | | | extended | |
created_at | timestamp with time zone | | not null | CURRENT_TIMESTAMP | plain | |
updated_at | timestamp with time zone | | not null | CURRENT_TIMESTAMP | plain | |
表角色:
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
---------------+--------------------------+-----------+----------+--------------------------------------+----------+--------------+-------------
id | integer | | not null | nextval('dl_roles_id_seq'::regclass) | plain | |
user_group_id | integer | | not null | | plain | |
title | character varying(128) | | not null | | extended | |
slug | character varying(128) | | not null | | extended | |
desc | character varying(512) | | | | extended | |
created_at | timestamp with time zone | | not null | CURRENT_TIMESTAMP | plain | |
updated_at | timestamp with time zone | | not null | CURRENT_TIMESTAMP | plain | |
这可以为role.js建模:
'use strict';
const { Model } = require('objection');
const UserGroupsModel = require(__basedir + '/app/models/user_groups');
class RolesModel extends Model {
static get tableName() {
return 'dl_roles';
}
static get jsonSchema() {
return {
type: 'object',required: ['user_group_id','title'],properties: {
id: { type: 'integer' },user_group_id: { type: 'integer' },title: { type: 'string',minLength: 1,maxLength: 128 },slug: { type: 'string',desc: { type: 'string',maxLenght: 512 }
}
}
}
static get relationMappings() {
return {
user_groups: {
relation: Model.BelongsToOneRelation,modelClass: UserGroupsModel,join: {
from: 'dl_roles.user_group_id',to: 'dl_user_groups.id'
}
}
};
};
}
module.exports = RolesModel;
user_groups.js
'use strict';
const { Model } = require('objection');
const Crypto = require('crypto');
const RolesModel = require(__basedir + '/app/models/roles');
class UserGroupsModel extends Model {
static get tableName() {
return 'dl_user_groups';
}
static get jsonSchema() {
return {
type: 'object',required: ['title'],maxLength: 512 }
}
}
}
static get relationMappings() {
return {
roles: {
relation: Model.HasManyRelation,modelClass: RolesModel,join: {
from: 'dl_user_groups.id',to: 'dl_roles.user_group_id'
}
}
};
};
}
module.exports = UserGroupsModel;
这是我想转换为异议js的查询。
select ug.title as group,r.title as role,r.slug,r.desc
from public.dl_roles r
join public.dl_user_groups ug on r.user_group_id = ug.id;
结果:
group | role | slug | desc
--------+---------------+---------------+------
TELKM | Administrator | administrator |
TELKM | Instructor | instructor |
TELKM | Learner | learner |
TELKM | Guest | guest |
APPS | Apps | Apps |
这是我的异议查询:
'use strict';
const RolesModel = require(__basedir + '/app/models/roles');
const Slugify = require('slugify');
exports.getRolesAll = async function() {
return new Promise(async (resolve,reject) => {
try {
let _data = await RolesModel
.query()
.joinRelated('user_groups');
return resolve({
statusCode: 200,data: _data,message: 'All data'
});
} catch (err) {
return reject(err);
}
});
};
我尝试使用joinRelated
和eager
,但没有用。我希望Advanced可以给我答案,如何将一对多连接起来,并像上面的查询一样从父表中获取所有字段。
谢谢。
解决方法
我已经通过使用原始查询解决了我的问题。这是我的查询使用异议js。
RolesModel
.query()
.select('user_groups.*','roles.*')
.join('user_groups','user_groups.id','roles.user_group_id');
我希望这可以帮助某人。