Skip to content
← All rules
Relational DatabasesDatabase performance

relational-databases/no-query-in-loop

Queries inside loops and collection callbacks should be batched or expressed set-wise when they depend on each item.

sqlloopsbatching
TypeScript
const users = await Promise.all(ids.map(id => db.user.findUnique({ where: { id } })));
Finding

Disallow per-item relational queries.

Setup

Install the package, register its plugin factory, then enable the rule.

Install the package

pnpm add -D @scruple/relational-databases

Register the plugin

In scruple.config.ts, register the factory under the relational-databases namespace used by the rule ID.

import { relationalDatabases } from "@scruple/relational-databases";

plugins: {
  "relational-databases": relationalDatabases(),
},

Enable the rule

"relational-databases/no-query-in-loop": "warn"
Package
@scruple/relational-databases
Default threshold
Plugin default
Minimum confidence
Plugin default

Released under the MIT License.