Skip to content

Commit 74ef809

Browse files
committed
fixes #1983
1 parent ee9545b commit 74ef809

File tree

3 files changed

+48
-5
lines changed

3 files changed

+48
-5
lines changed

‎lib/queryBuilder/QueryBuilder.js‎

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,8 @@ class QueryBuilder extends QueryBuilderBase {
483483
}
484484

485485
hasWheres() {
486-
return prebuildQuery(this).has(QueryBuilderBase.WhereSelector);
486+
const queryWithoutGraph = this.clone().clearWithGraph();
487+
return prebuildQuery(queryWithoutGraph).has(QueryBuilderBase.WhereSelector);
487488
}
488489

489490
hasSelects() {
@@ -653,7 +654,8 @@ class QueryBuilder extends QueryBuilderBase {
653654
}
654655

655656
toKnexQuery(knexBuilder = this.knex().queryBuilder()) {
656-
return buildKnexQuery(prebuildQuery(this), knexBuilder);
657+
const prebuiltQuery = prebuildQuery(this.clone());
658+
return buildKnexQuery(prebuiltQuery, knexBuilder);
657659
}
658660

659661
async execute() {
@@ -1526,9 +1528,6 @@ function ensureJoinRelatedOperation(builder, joinOperation) {
15261528
}
15271529

15281530
function prebuildQuery(builder) {
1529-
// Take a clone so that we don't modify this instance.
1530-
builder = builder.clone();
1531-
15321531
builder = addImplicitOperations(builder);
15331532
builder = callOnBuildHooks(builder);
15341533

‎tests/integration/find.js‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,47 @@ module.exports = (session) => {
489489
expect(res[0].id).to.equal(3);
490490
});
491491
});
492+
493+
it('.distinctOn() many-to-many', async () => {
494+
await session.populate([]);
495+
await Model2.query().insertGraph([
496+
{
497+
idCol: 1,
498+
model2Relation1: [{ id: 1 }, { id: 2 }],
499+
},
500+
{
501+
idCol: 2,
502+
model2Relation1: [{ id: 5 }, { id: 6 }],
503+
},
504+
{
505+
idCol: 3,
506+
model2Relation1: [{ id: 3 }, { id: 4 }],
507+
},
508+
]);
509+
510+
const result = await Model2.query()
511+
.distinctOn('id_col')
512+
.joinRelated('model2Relation1')
513+
.where('model2Relation1.id', '<', 5)
514+
.orderBy('id_col');
515+
516+
expect(result).to.eql([
517+
{
518+
idCol: 1,
519+
model1Id: null,
520+
model2Prop1: null,
521+
model2Prop2: null,
522+
$afterFindCalled: 1,
523+
},
524+
{
525+
idCol: 3,
526+
model1Id: null,
527+
model2Prop1: null,
528+
model2Prop2: null,
529+
$afterFindCalled: 1,
530+
},
531+
]);
532+
});
492533
}
493534

494535
it('.count()', () => {

‎tests/unit/queryBuilder/QueryBuilder.js‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,6 +1142,9 @@ describe('QueryBuilder', () => {
11421142
let query = model.$query();
11431143
chai.expect(query.hasWheres()).to.equal(true);
11441144

1145+
query = model.$query().withGraphJoined('manyToManyRelation');
1146+
chai.expect(query.hasWheres()).to.equal(true);
1147+
11451148
query = model.$relatedQuery('belongsToOneRelation');
11461149
chai.expect(query.hasWheres()).to.equal(true);
11471150

0 commit comments

Comments
 (0)