目前遇到的問題是通過sequelize進(jìn)行關(guān)聯(lián)查詢后需要的問題是關(guān)聯(lián)查詢結(jié)果第一次查詢沒問題,再查詢一次就會(huì)報(bào)錯(cuò)。1、兩個(gè)關(guān)聯(lián)的模型(1)菜單模型'usestrict';module.exports=app=>{const{STRING,INTEGER,DATE}=app.Sequelize;lettable_name='qt_admin_menu';constAdminMenu=app.model.define(table_name,{menu_id:{type:'VARCHAR(32)',allowNull:false,defaultValue:'',primaryKey:true},parent_id:{type:'VARCHAR(32)',allowNull:false,defaultValue:'0',primaryKey:false},pk:{type:'VARCHAR(32)',allowNull:false,defaultValue:'',primaryKey:false},menu_type:{type:'TINYINT(3)UNSIGNED',allowNull:true,defaultValue:'1',primaryKey:false},top_menu:{type:'INT(1)UNSIGNED',allowNull:true,defaultValue:'2',primaryKey:false},status:{type:'TINYINT(3)UNSIGNED',allowNull:true,defaultValue:'1',primaryKey:false},list_order:{type:'TINYINT(5)UNSIGNED',allowNull:true,defaultValue:'1',primaryKey:false},menu_app:{type:'VARCHAR(15)',allowNull:true,defaultValue:'',primaryKey:false},controller:{type:'VARCHAR(30)',allowNull:true,defaultValue:'',primaryKey:false},action:{type:'VARCHAR(30)',allowNull:true,defaultValue:'',primaryKey:false},url_method:{type:'VARCHAR(10)',allowNull:true,defaultValue:'get',primaryKey:false},menu_url:{type:'VARCHAR(200)',allowNull:true,defaultValue:'',primaryKey:false},param:{type:'VARCHAR(50)',allowNull:true,defaultValue:'',primaryKey:false},menu_name:{type:'VARCHAR(30)',allowNull:true,defaultValue:'',primaryKey:false},icon:{type:'VARCHAR(20)',allowNull:true,defaultValue:'',primaryKey:false},remark:{type:'VARCHAR(255)',allowNull:true,defaultValue:'',primaryKey:false},isdelete:{type:'INT(1)',allowNull:true,defaultValue:'2',primaryKey:false}});//AdminMenu.removeAttribute('id');returnAdminMenu;};(2)角色菜單關(guān)聯(lián)表模型'usestrict';module.exports=app=>{const{STRING,INTEGER,DATE}=app.Sequelize;lettable_name='qt_admin_role_menu';constAdminRoleMenu=app.model.define(table_name,{id:{type:'INT(11)',allowNull:false,defaultValue:null,primaryKey:true,autoIncrement:true},role_id:{type:'INT(11)',allowNull:false,primaryKey:false},menu_id:{type:'VARCHAR(32)',allowNull:false,defaultValue:'',primaryKey:false}});returnAdminRoleMenu;};2、service里面的查詢'usestrict';constService=require('egg').Service;classMenuServiceextendsService{//默認(rèn)不需要提供構(gòu)造函數(shù)。constructor(ctx){//如果需要在構(gòu)造函數(shù)做一些處理,一定要有這句話,才能保證后面`this.ctx`的使用。super(ctx);//就可以直接通過this.ctx獲取ctx了//還可以直接通過this.app獲取app了this.table_name='qt_admin_menu';//加載modelthis.adminMenuModel=ctx.model.AdminMenu;this.adminRoleMenuModel=ctx.model.AdminRoleMenu;//定義hasMany關(guān)聯(lián)this.adminMenuModel.hasMany(this.adminRoleMenuModel,{as:'u',through:null,foreignKey:'menu_id'})//this.adminRoleMenuModel.belongsToMany(this.adminMenuModel,{////as:'adminMenuModel',//foreignKey:'menu_id'//});}asyncgetRoleMenu(rid){//[this.app.Sequelize.fn('if','adminRoleMenuModel.menu_idisnull','false','true'),'selected']constresult=awaitthis.adminMenuModel.findAll({raw:true,attributes:['menu_id','parent_id','menu_name','icon',[this.app.Sequelize.col('u.id'),'selected']],include:[{attributes:[],model:this.adminRoleMenuModel,as:'u',where:{role_id:rid,},required:false}],order:[['top_menu','ASC'],['list_order','ASC']]})//.then(rows=>rows&&rows.map(r=>r.toJSON()));//console.log(result);//constresult=awaitthis.app.mysql.query('selecta.*,b.menu_idasselectedex,if(b.menu_idisnull,"false","true")asselectedfromqt_admin_menualeftjoinqt_admin_role_menubona.menu_id=b.menu_idandb.role_id=?ORDERBYa.top_menu,a.list_order',[rid]);returnresult;}}module.exports=MenuService;3、查詢結(jié)果修改完文件之后,執(zhí)行請(qǐng)求,查詢結(jié)果正常,打印SQL也正常SELECT`qt_admin_menu`.`menu_id`,`qt_admin_menu`.`parent_id`,`qt_admin_menu`.`menu_name`,`qt_admin_menu`.`icon`,`u`.`id`AS`selected`FROM`qt_admin_menu`AS`qt_admin_menu`LEFTOUTERJOIN`qt_admin_role_menu`AS`u`ON`qt_admin_menu`.`menu_id`=`u`.`menu_id`AND`u`.`role_id`='3'ORDERBY`qt_admin_menu`.`top_menu`ASC,`qt_admin_menu`.`list_order`ASC;結(jié)果數(shù)據(jù):{menu_id:'ef535c8a938665d1d0641a4e86ee83ed',parent_id:'a8e66f7be77c9bf71a2511331ac6ba32',menu_name:'列表組',icon:null,selected:null}但是再執(zhí)行一次就會(huì)報(bào)錯(cuò)了Youhaveusedthealiasuintwoseparateassociations.Aliasedassociationsmusthaveuniquealiases.網(wǎng)上也找不到相應(yīng)的問題,希望大神幫忙解決一下。非常感謝!
sequelize 關(guān)聯(lián)查詢問題
尚方寶劍之說
2019-05-08 12:51:55