fix: slow find with include in mysql (#1304)
* fix: slow find with include in mysql * fix: test * fix: test * chore: console.log * chore: test
This commit is contained in:
parent
a98c9e03ce
commit
33377c7d3a
@ -249,7 +249,7 @@ describe('has many repository', () => {
|
||||
expect(p1.title).toEqual('u1t1');
|
||||
});
|
||||
|
||||
test('find', async () => {
|
||||
test('find with has many', async () => {
|
||||
const u1 = await User.repository.create({ values: { name: 'u1' } });
|
||||
|
||||
const t1 = await Tag.repository.create({ values: { name: 't1' } });
|
||||
|
@ -269,7 +269,12 @@ export class Repository<TModelAttributes extends {} = any, TCreationAttributes e
|
||||
attributes: [primaryKeyField],
|
||||
group: `${model.name}.${primaryKeyField}`,
|
||||
transaction,
|
||||
})
|
||||
include: opts.include.filter((include) => {
|
||||
return (
|
||||
Object.keys(include.where || {}).length > 0 || JSON.stringify(opts?.filter)?.includes(include.association)
|
||||
);
|
||||
}),
|
||||
} as any)
|
||||
).map((row) => {
|
||||
return { row, pk: row.get(primaryKeyField) };
|
||||
});
|
||||
@ -278,6 +283,16 @@ export class Repository<TModelAttributes extends {} = any, TCreationAttributes e
|
||||
return [];
|
||||
}
|
||||
|
||||
const templateModel = await model.findOne({
|
||||
...opts,
|
||||
includeIgnoreAttributes: false,
|
||||
attributes: [primaryKeyField],
|
||||
group: `${model.name}.${primaryKeyField}`,
|
||||
transaction,
|
||||
limit: 1,
|
||||
offset: 0,
|
||||
} as any);
|
||||
|
||||
const where = {
|
||||
[primaryKeyField]: {
|
||||
[Op.in]: ids.map((id) => id['pk']),
|
||||
@ -297,7 +312,7 @@ export class Repository<TModelAttributes extends {} = any, TCreationAttributes e
|
||||
return { rows, include };
|
||||
});
|
||||
}),
|
||||
templateModel: ids[0].row,
|
||||
templateModel: templateModel,
|
||||
});
|
||||
} else {
|
||||
rows = await model.findAll({
|
||||
|
Loading…
Reference in New Issue
Block a user