From 282249c9948a3db30c5260242cdc18c71fc2cafb Mon Sep 17 00:00:00 2001 From: Vytor Calixto <vytorcalixto@gmail.com> Date: Fri, 17 Mar 2017 10:12:44 -0300 Subject: [PATCH] Add composite foreign key habilities to RQF Now you can join tables with composite foreign/primary keys using RQF. In the join attribute just use an array of columns that need to be used in the join --- src/libs/middlewares/reqQueryFields.js | 14 +++++++++++++- src/libs/routes/enrollment.js | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/libs/middlewares/reqQueryFields.js b/src/libs/middlewares/reqQueryFields.js index 1fe597d3..a383ade2 100644 --- a/src/libs/middlewares/reqQueryFields.js +++ b/src/libs/middlewares/reqQueryFields.js @@ -201,7 +201,19 @@ class ReqQueryFields { let foreignTable = ''; if(value.join.foreignTable) foreignTable = value.join.foreignTable+'.'; // Fazemos o join - req.sql.join(value.table, null, foreignTable+value.join.foreign+'='+value.table+'.'+value.join.primary); + let onClause = ''; + if(Array.isArray(value.join.primary)) { + // Se é um array, montamos a cláusula ON com mais de uma coluna + value.join.primary.forEach((column, index, arr) => { + onClause += foreignTable+value.join.foreign[index]+'='+value.table+'.'+column; + if(index < arr.length-1) { + onClause+=' AND '; + } + }); + } else { + onClause = foreignTable+value.join.foreign+'='+value.table+'.'+value.join.primary; + } + req.sql.join(value.table, null, onClause); // Marcamos o join como feito para não ter problemas hasJoined[value.name] = true; // values[k].hasJoined = true; diff --git a/src/libs/routes/enrollment.js b/src/libs/routes/enrollment.js index 6f5a623c..af0904ab 100644 --- a/src/libs/routes/enrollment.js +++ b/src/libs/routes/enrollment.js @@ -188,8 +188,8 @@ rqf.addField({ field: 'id' }, join: { - primary: 'id', - foreign: 'escola_id', + primary: ['id', 'ano_censo'], + foreign: ['escola_id', 'ano_censo'], foreignTable: 'matricula' } }).addValue({ -- GitLab