Fix for #4431 - converting SQL joins back to left joins, syntax specifying join type as string is old which doesn't work in latest versions of knex.
This commit is contained in:
parent
7f7bd8f447
commit
7109b34ea3
2 changed files with 29 additions and 41 deletions
|
@ -541,7 +541,7 @@ module External {
|
|||
if (!linkTable || !linkPrimary) {
|
||||
return
|
||||
}
|
||||
const rows = related[key].rows || []
|
||||
const rows = related[key]?.rows || []
|
||||
const found = rows.find(
|
||||
(row: { [key: string]: any }) =>
|
||||
row[linkPrimary] === relationship.id ||
|
||||
|
|
|
@ -210,49 +210,37 @@ class InternalBuilder {
|
|||
const { toTable, throughTable } = JSON.parse(key)
|
||||
if (!throughTable) {
|
||||
// @ts-ignore
|
||||
query = query.join(
|
||||
toTable,
|
||||
function () {
|
||||
for (let relationship of relationships) {
|
||||
const from = relationship.from,
|
||||
to = relationship.to
|
||||
// @ts-ignore
|
||||
this.orOn(`${fromTable}.${from}`, "=", `${toTable}.${to}`)
|
||||
}
|
||||
},
|
||||
"left"
|
||||
)
|
||||
query = query.leftJoin(toTable, function () {
|
||||
for (let relationship of relationships) {
|
||||
const from = relationship.from,
|
||||
to = relationship.to
|
||||
// @ts-ignore
|
||||
this.orOn(`${fromTable}.${from}`, "=", `${toTable}.${to}`)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
query = query
|
||||
// @ts-ignore
|
||||
.join(
|
||||
throughTable,
|
||||
function () {
|
||||
for (let relationship of relationships) {
|
||||
const fromPrimary = relationship.fromPrimary
|
||||
const from = relationship.from
|
||||
// @ts-ignore
|
||||
this.orOn(
|
||||
`${fromTable}.${fromPrimary}`,
|
||||
"=",
|
||||
`${throughTable}.${from}`
|
||||
)
|
||||
}
|
||||
},
|
||||
"left"
|
||||
)
|
||||
.join(
|
||||
toTable,
|
||||
function () {
|
||||
for (let relationship of relationships) {
|
||||
const toPrimary = relationship.toPrimary
|
||||
const to = relationship.to
|
||||
// @ts-ignore
|
||||
this.orOn(`${toTable}.${toPrimary}`, `${throughTable}.${to}`)
|
||||
}
|
||||
},
|
||||
"left"
|
||||
)
|
||||
.leftJoin(throughTable, function () {
|
||||
for (let relationship of relationships) {
|
||||
const fromPrimary = relationship.fromPrimary
|
||||
const from = relationship.from
|
||||
// @ts-ignore
|
||||
this.orOn(
|
||||
`${fromTable}.${fromPrimary}`,
|
||||
"=",
|
||||
`${throughTable}.${from}`
|
||||
)
|
||||
}
|
||||
})
|
||||
.leftJoin(toTable, function () {
|
||||
for (let relationship of relationships) {
|
||||
const toPrimary = relationship.toPrimary
|
||||
const to = relationship.to
|
||||
// @ts-ignore
|
||||
this.orOn(`${toTable}.${toPrimary}`, `${throughTable}.${to}`)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
return query.limit(BASE_LIMIT)
|
||||
|
|
Loading…
Reference in a new issue