# ORM Query Check > Write and check Prisma Client queries against your own schema.prisma. A free in-browser checker > reads the schema and every prisma..(...) call you paste and reports what does not > match it, with the line and the fix. Two metered AI lanes: "write" turns a plain-English data > request into one correct Prisma Client call, and "review" answers every checker finding and > returns fixed code. The page runs the same checker on every reply before showing it. URL: https://orm-query-check.skillsafe.ai/ API tutorial: https://orm-query-check.skillsafe.ai/api.html Derived from: @prisma/prisma-client-api (https://skillsafe.ai/skill/@prisma/prisma-client-api), prisma/skills, MIT Model: gpt-terra (metered; the checker and exports are free) Scope: the Prisma ORM 6 and 7 Client API. Prisma ORM 8 (release candidate) syntax is not checked. ## What the free checker reports - Unknown models (accessors are the model name with a lower-case first letter), methods (findAll, findOne, insert ...), fields (with a did-you-mean), options (limit -> take, offset -> skip) and filter operators (like -> contains). - findUnique, update, delete and upsert whose where has no @id, @unique or compound key (field1_field2). - select together with include or omit at one level; include on a scalar field; omit on a relation. - List relations filtered without some / every / none; to-one relations filtered with some. - String filters on non-String fields, enum values that are not in the enum, list filters on single fields, type mismatches, null on required fields. - Nested writes that do not exist (set inside create), relation writes inside createMany, atomic increment in create or on a non-number, required fields missing from create. - orderBy values other than 'asc' / 'desc', ordering a list relation without _count, distinct on relations, groupBy take/skip without orderBy. - Database support: mode 'insensitive' (PostgreSQL, CockroachDB, MongoDB only), createManyAndReturn / updateManyAndReturn (PostgreSQL, CockroachDB, SQLite), skipDuplicates (not MongoDB, SQL Server, SQLite), Json path syntax (array on PostgreSQL, string on MySQL), isSet (MongoDB). - $queryRawUnsafe / $executeRawUnsafe built from template literals or concatenation (SQL injection), $queryRaw called with parentheses, Prisma.raw on a variable. - await inside $transaction([...]); the outer client used inside an interactive transaction callback. - Queries inside for / map / forEach loops (N+1), several new PrismaClient() calls, a missing driver adapter with the prisma-client generator, removed APIs (rejectOnNotFound, $use). - updateMany / deleteMany without where. ## Paid lanes (task field) - write: input {task:"write", schema, request, facts, note?}. Reply: {task, headline, method, model, code, explanation[], returns, fields_used[], assumptions[], caveats[{kind, text}], cannot}. `cannot` names what the schema lacks instead of faking a field. - review: input {task:"review", schema, code, facts, note?}. Reply: {task, headline, verdict: ok|fix|unsafe, finding_responses[{ref, stance: confirmed|not_applicable, note}], extra_findings[{title, severity, line, evidence, problem, fix}], fixed_code, changes[], to_confirm[]}. - facts is a JSON string from the browser: provider, generator, capabilities, models (fields, relations, unique selectors), enums, and for review the numbered findings and the calls found. ## Reconciliation Every write reply's code and every review's fixed code is re-checked against the schema; every Model.field listed must exist; every checker finding must be answered once; an error the review dismisses, a verdict that contradicts the checker, or evidence that is not in the pasted code is shown as a disagreement. ## Sources The rules follow the skill and Prisma's documentation (case sensitivity, the Prisma Client API reference, Json fields, scalar lists, grouping, transactions), checked on 2026-09-28; see /NOTICE.txt. Independent tool, not affiliated with or endorsed by Prisma Data, Inc.