From 89ca3dfe8313554f71fe9ff56c893814256a9ee7 Mon Sep 17 00:00:00 2001 From: Jon Harrell <4829245+jharrell@users.noreply.github.com> Date: Tue, 7 Jan 2025 10:17:49 -0600 Subject: [PATCH 1/2] add legacy versioning --- docusaurus.config.ts | 10 + .../01-quickstart-prismaPostgres.mdx | 209 + .../01-quickstart-sqlite.mdx | 472 ++ ...-relational-databases-node-cockroachdb.mdx | 48 + .../110-relational-databases-node-mysql.mdx | 71 + ...-relational-databases-node-planetscale.mdx | 63 + ...0-relational-databases-node-postgresql.mdx | 70 + ...10-relational-databases-node-sqlserver.mdx | 73 + ...ional-databases-typescript-cockroachdb.mdx | 76 + ...-relational-databases-typescript-mysql.mdx | 76 + ...ional-databases-typescript-planetscale.mdx | 82 + ...tional-databases-typescript-postgresql.mdx | 71 + ...al-databases-typescript-prismaPostgres.mdx | 69 + ...ational-databases-typescript-sqlserver.mdx | 78 + ...connect-your-database-node-cockroachdb.mdx | 63 + .../100-connect-your-database-node-mysql.mdx | 70 + ...connect-your-database-node-planetscale.mdx | 98 + ...-connect-your-database-node-postgresql.mdx | 64 + ...0-connect-your-database-node-sqlserver.mdx | 39 + ...t-your-database-typescript-cockroachdb.mdx | 63 + ...connect-your-database-typescript-mysql.mdx | 70 + ...t-your-database-typescript-planetscale.mdx | 98 + ...ct-your-database-typescript-postgresql.mdx | 63 + ...our-database-typescript-prismaPostgres.mdx | 52 + ...ect-your-database-typescript-sqlserver.mdx | 40 + ...-using-prisma-migrate-node-cockroachdb.mdx | 61 + .../150-using-prisma-migrate-node-mysql.mdx | 60 + ...-using-prisma-migrate-node-planetscale.mdx | 58 + ...0-using-prisma-migrate-node-postgresql.mdx | 61 + ...50-using-prisma-migrate-node-sqlserver.mdx | 59 + ...-prisma-migrate-typescript-cockroachdb.mdx | 61 + ...-using-prisma-migrate-typescript-mysql.mdx | 59 + ...-prisma-migrate-typescript-planetscale.mdx | 58 + ...g-prisma-migrate-typescript-postgresql.mdx | 60 + ...isma-migrate-typescript-prismaPostgres.mdx | 82 + ...ng-prisma-migrate-typescript-sqlserver.mdx | 59 + ...install-prisma-client-node-cockroachdb.mdx | 26 + .../200-install-prisma-client-node-mysql.mdx | 27 + ...install-prisma-client-node-planetscale.mdx | 29 + ...-install-prisma-client-node-postgresql.mdx | 27 + ...0-install-prisma-client-node-sqlserver.mdx | 27 + ...l-prisma-client-typescript-cockroachdb.mdx | 27 + ...install-prisma-client-typescript-mysql.mdx | 28 + ...l-prisma-client-typescript-planetscale.mdx | 27 + ...ll-prisma-client-typescript-postgresql.mdx | 41 + ...risma-client-typescript-prismaPostgres.mdx | 50 + ...all-prisma-client-typescript-sqlserver.mdx | 27 + ...querying-the-database-node-cockroachdb.mdx | 204 + .../250-querying-the-database-node-mysql.mdx | 204 + ...querying-the-database-node-planetscale.mdx | 205 + ...-querying-the-database-node-postgresql.mdx | 205 + ...0-querying-the-database-node-sqlserver.mdx | 204 + ...ng-the-database-typescript-cockroachdb.mdx | 219 + ...querying-the-database-typescript-mysql.mdx | 219 + ...ng-the-database-typescript-planetscale.mdx | 220 + ...ing-the-database-typescript-postgresql.mdx | 218 + ...the-database-typescript-prismaPostgres.mdx | 377 ++ ...ying-the-database-typescript-sqlserver.mdx | 221 + .../300-next-steps.mdx | 99 + .../120-mongodb-node-mongodb.mdx | 66 + .../120-mongodb-typescript-mongodb.mdx | 71 + ...100-connect-your-database-node-mongodb.mdx | 54 + ...nnect-your-database-typescript-mongodb.mdx | 52 + ...reating-the-prisma-schema-node-mongodb.mdx | 67 + ...g-the-prisma-schema-typescript-mongodb.mdx | 66 + ...200-install-prisma-client-node-mongodb.mdx | 26 + ...stall-prisma-client-typescript-mongodb.mdx | 25 + ...250-querying-the-database-node-mongodb.mdx | 216 + ...erying-the-database-typescript-mongodb.mdx | 229 + .../120-mongodb/300-next-steps.mdx | 93 + .../100-start-from-scratch/index.mdx | 16 + ...-relational-databases-node-cockroachdb.mdx | 76 + .../110-relational-databases-node-mysql.mdx | 77 + ...-relational-databases-node-planetscale.mdx | 75 + ...0-relational-databases-node-postgresql.mdx | 77 + ...10-relational-databases-node-sqlserver.mdx | 76 + ...ional-databases-typescript-cockroachdb.mdx | 76 + ...-relational-databases-typescript-mysql.mdx | 75 + ...ional-databases-typescript-planetscale.mdx | 75 + ...tional-databases-typescript-postgresql.mdx | 75 + ...ational-databases-typescript-sqlserver.mdx | 76 + ...connect-your-database-node-cockroachdb.mdx | 68 + .../100-connect-your-database-node-mysql.mdx | 69 + ...connect-your-database-node-planetscale.mdx | 98 + ...-connect-your-database-node-postgresql.mdx | 56 + ...0-connect-your-database-node-sqlserver.mdx | 34 + ...t-your-database-typescript-cockroachdb.mdx | 68 + ...connect-your-database-typescript-mysql.mdx | 69 + ...t-your-database-typescript-planetscale.mdx | 95 + ...ct-your-database-typescript-postgresql.mdx | 55 + ...ect-your-database-typescript-sqlserver.mdx | 34 + .../150-introspection-node-cockroachdb.mdx | 216 + .../150-introspection-node-mysql.mdx | 219 + .../150-introspection-node-planetscale.mdx | 236 + .../150-introspection-node-postgresql.mdx | 217 + .../150-introspection-node-sqlserver.mdx | 224 + ...0-introspection-typescript-cockroachdb.mdx | 217 + .../150-introspection-typescript-mysql.mdx | 220 + ...0-introspection-typescript-planetscale.mdx | 236 + ...50-introspection-typescript-postgresql.mdx | 216 + ...150-introspection-typescript-sqlserver.mdx | 224 + ...aseline-your-database-node-cockroachdb.mdx | 84 + .../170-baseline-your-database-node-mysql.mdx | 100 + ...baseline-your-database-node-postgresql.mdx | 103 + ...-baseline-your-database-node-sqlserver.mdx | 92 + ...e-your-database-typescript-cockroachdb.mdx | 73 + ...aseline-your-database-typescript-mysql.mdx | 101 + ...ne-your-database-typescript-postgresql.mdx | 102 + ...ine-your-database-typescript-sqlserver.mdx | 92 + ...install-prisma-client-node-cockroachdb.mdx | 36 + .../200-install-prisma-client-node-mysql.mdx | 36 + ...install-prisma-client-node-planetscale.mdx | 36 + ...-install-prisma-client-node-postgresql.mdx | 36 + ...0-install-prisma-client-node-sqlserver.mdx | 36 + ...l-prisma-client-typescript-cockroachdb.mdx | 36 + ...install-prisma-client-typescript-mysql.mdx | 36 + ...l-prisma-client-typescript-planetscale.mdx | 36 + ...ll-prisma-client-typescript-postgresql.mdx | 35 + ...all-prisma-client-typescript-sqlserver.mdx | 36 + ...querying-the-database-node-cockroachdb.mdx | 122 + .../250-querying-the-database-node-mysql.mdx | 124 + ...querying-the-database-node-planetscale.mdx | 136 + ...-querying-the-database-node-postgresql.mdx | 123 + ...0-querying-the-database-node-sqlserver.mdx | 131 + ...ng-the-database-typescript-cockroachdb.mdx | 138 + ...querying-the-database-typescript-mysql.mdx | 137 + ...ng-the-database-typescript-planetscale.mdx | 138 + ...ing-the-database-typescript-postgresql.mdx | 136 + ...ying-the-database-typescript-sqlserver.mdx | 137 + ...75-evolve-your-schema-node-cockroachdb.mdx | 105 + .../275-evolve-your-schema-node-mysql.mdx | 107 + ...275-evolve-your-schema-node-postgresql.mdx | 106 + .../275-evolve-your-schema-node-sqlserver.mdx | 107 + ...lve-your-schema-typescript-cockroachdb.mdx | 108 + ...75-evolve-your-schema-typescript-mysql.mdx | 107 + ...olve-your-schema-typescript-postgresql.mdx | 108 + ...volve-your-schema-typescript-sqlserver.mdx | 107 + .../300-next-steps.mdx | 111 + .../120-mongodb-node-mongodb.mdx | 70 + .../120-mongodb-typescript-mongodb.mdx | 71 + ...100-connect-your-database-node-mongodb.mdx | 56 + ...nnect-your-database-typescript-mongodb.mdx | 54 + .../125-introspection-node-mongodb.mdx | 130 + .../125-introspection-typescript-mongodb.mdx | 128 + ...200-install-prisma-client-node-mongodb.mdx | 27 + ...stall-prisma-client-typescript-mongodb.mdx | 25 + ...250-querying-the-database-node-mongodb.mdx | 219 + ...erying-the-database-typescript-mongodb.mdx | 233 + .../120-mongodb/300-next-steps.mdx | 93 + .../200-add-to-existing-project/index.mdx | 16 + .../02-setup-prisma/index.mdx | 17 + .../100-getting-started/index.mdx | 237 + .../100-introduction/100-what-is-prisma.mdx | 269 + .../100-introduction/200-why-prisma.mdx | 95 + .../250-should-you-use-prisma.mdx | 106 + .../100-introduction/300-data-modeling.mdx | 246 + .../050-overview/100-introduction/index.mdx | 20 + .../node-js-db-tools-tradeoffs.png | Bin 0 -> 17765 bytes .../prisma-makes-devs-productive.png | Bin 0 -> 23811 bytes .../100-introduction/prisma-rest-apis.png | Bin 0 -> 12866 bytes .../user-post-relation-1-n.png | Bin 0 -> 59297 bytes .../100-introduction/user-table.png | Bin 0 -> 4330 bytes .../100-introduction/user-table.svg | 1 + .../300-prisma-in-your-stack/01-rest.mdx | 153 + .../300-prisma-in-your-stack/02-graphql.mdx | 75 + .../300-prisma-in-your-stack/03-fullstack.mdx | 116 + .../04-is-prisma-an-orm.mdx | 447 ++ .../300-prisma-in-your-stack/index.mdx | 16 + .../500-databases/200-database-drivers.mdx | 180 + .../500-databases/250-prisma-postgres.mdx | 113 + .../500-databases/300-postgresql.mdx | 310 + .../050-overview/500-databases/400-mysql.mdx | 235 + .../050-overview/500-databases/500-sqlite.mdx | 93 + .../500-databases/600-mongodb.mdx | 577 ++ .../800-sql-server/020-sql-server-local.mdx | 53 + .../800-sql-server/030-sql-server-docker.mdx | 49 + .../500-databases/800-sql-server/index.mdx | 210 + .../500-databases/840-cockroachdb.mdx | 223 + .../500-databases/850-planetscale.mdx | 356 + .../500-databases/880-supabase.mdx | 71 + .../050-overview/500-databases/890-neon.mdx | 198 + .../050-overview/500-databases/900-turso.mdx | 226 + .../500-databases/950-cloudflare-d1.mdx | 231 + .../drivers/qe-query-engine-adapter.png | Bin 0 -> 117668 bytes .../drivers/qe-query-execution-flow.png | Bin 0 -> 88110 bytes .../embedded-replica-create-replica.png | Bin 0 -> 82793 bytes .../images/embedded-replica-read.png | Bin 0 -> 79608 bytes .../images/embedded-replica-remote-read.png | Bin 0 -> 66251 bytes .../embedded-replica-write-propagation.png | Bin 0 -> 89371 bytes .../050-overview/500-databases/index.mdx | 16 + .../050-overview/500-databases/mongodb.png | Bin 0 -> 26812 bytes .../500-databases/mysql-connection-string.png | Bin 0 -> 14409 bytes .../postgresql-connection-string.png | Bin 0 -> 15637 bytes .../050-overview/600-beyond-prisma-orm.mdx | 170 + .../200-orm/050-overview/_category_.json | 5 + .../200-orm/050-overview/index.mdx | 12 + .../10-overview/02-data-sources.mdx | 42 + .../10-overview/03-generators.mdx | 103 + .../10-overview/04-location.mdx | 121 + .../100-prisma-schema/10-overview/index.mdx | 262 + .../20-data-model/10-models.mdx | 1224 ++++ .../20-relations/100-one-to-one-relations.mdx | 307 + .../200-one-to-many-relations.mdx | 276 + .../300-many-to-many-relations.mdx | 546 ++ .../20-relations/400-self-relations.mdx | 438 ++ ...-special-rules-for-referential-actions.mdx | 255 + .../410-referential-actions/index.mdx | 516 ++ .../20-relations/420-relation-mode.mdx | 260 + .../500-troubleshooting-relations.mdx | 283 + .../20-data-model/20-relations/index.mdx | 566 ++ .../20-relations/one-to-many.png | Bin 0 -> 41597 bytes .../20-relations/quick-fix-index.png | Bin 0 -> 27929 bytes .../20-relations/quick-fix-index.snagx | Bin 0 -> 99541 bytes .../20-relations/relations-intro.png | Bin 0 -> 36481 bytes .../20-relations/sample-schema.png | Bin 0 -> 130861 bytes .../20-data-model/30-indexes.mdx | 532 ++ .../20-data-model/40-views.mdx | 371 ++ .../20-data-model/50-database-mapping.mdx | 234 + .../20-data-model/60-multi-schema.mdx | 197 + .../70-unsupported-database-features.mdx | 104 + .../20-data-model/80-table-inheritance.mdx | 328 + .../100-prisma-schema/20-data-model/index.mdx | 10 + .../100-prisma-schema/50-introspection.mdx | 397 ++ .../80-postgresql-extensions.mdx | 113 + .../200-orm/100-prisma-schema/_category_.json | 5 + .../200-orm/100-prisma-schema/index.mdx | 11 + .../005-introduction.mdx | 181 + .../010-generating-prisma-client.mdx | 162 + .../015-instantiate-prisma-client.mdx | 59 + .../100-connection-management.mdx | 108 + .../115-connection-pool.mdx | 218 + .../200-pgbouncer.mdx | 89 + .../050-databases-connections/index.mdx | 339 + .../serverless-connections-2.png | Bin 0 -> 44932 bytes .../serverless-connections.png | Bin 0 -> 18742 bytes .../100-custom-model-and-field-names.mdx | 319 + .../150-error-formatting.mdx | 41 + .../200-read-replicas.mdx | 83 + .../220-database-polyfills.mdx | 23 + .../000-setup-and-configuration/index.mdx | 16 + .../prisma-client-generation-workflow.png | Bin 0 -> 43346 bytes .../prisma-client-node-module.png | Bin 0 -> 54310 bytes .../100-queries/030-crud.mdx | 1052 +++ .../100-queries/035-select-fields.mdx | 336 + .../100-queries/037-relation-queries.mdx | 1394 ++++ .../100-queries/050-filtering-and-sorting.mdx | 470 ++ .../100-queries/055-pagination.mdx | 230 + .../056-aggregation-grouping-summarizing.mdx | 735 +++ .../100-queries/058-transactions.mdx | 1389 ++++ .../100-queries/060-full-text-search.mdx | 324 + .../100-queries/061-custom-validation.mdx | 190 + .../100-queries/062-computed-fields.mdx | 180 + .../100-queries/063-excluding-fields.mdx | 234 + .../100-queries/064-custom-models.mdx | 176 + .../100-queries/070-case-sensitivity.mdx | 245 + .../100-query-optimization-performance.mdx | 457 ++ .../200-prisma-client/100-queries/index.mdx | 10 + .../150-using-raw-sql/100-typedsql.mdx | 230 + .../150-using-raw-sql/200-raw-queries.mdx | 867 +++ .../150-using-raw-sql/300-safeql.mdx | 383 ++ .../150-using-raw-sql/index.mdx | 71 + .../057-composite-types.mdx | 799 +++ .../080-null-and-undefined.mdx | 485 ++ .../100-working-with-json-fields.mdx | 1018 +++ .../200-working-with-scalar-lists-arrays.mdx | 221 + ...ing-with-composite-ids-and-constraints.mdx | 208 + .../200-special-fields-and-types/index.mdx | 180 + .../300-client-extensions/100-model.mdx | 162 + .../300-client-extensions/110-client.mdx | 67 + .../300-client-extensions/120-query.mdx | 299 + .../300-client-extensions/130-result.mdx | 223 + .../140-shared-extensions.mdx | 155 + .../150-type-utilities.mdx | 101 + .../200-extension-examples.mdx | 69 + .../100-soft-delete-middleware.mdx | 672 ++ .../500-middleware/200-logging-middleware.mdx | 90 + .../300-session-data-middleware.mdx | 72 + .../500-middleware/index.mdx | 193 + .../300-client-extensions/index.mdx | 273 + .../400-type-safety/050-prisma-validator.mdx | 157 + ...inst-partial-structures-of-model-types.mdx | 137 + .../830-prisma-type-system.mdx | 165 + .../400-type-safety/index.mdx | 267 + .../450-testing/100-unit-testing.mdx | 352 + .../450-testing/150-integration-testing.mdx | 481 ++ .../450-testing/Docker_Diagram_V1.png | Bin 0 -> 28507 bytes .../200-prisma-client/450-testing/index.mdx | 14 + .../500-deployment/001-deploy-prisma.mdx | 40 + .../101-traditional/200-deploy-to-heroku.mdx | 278 + .../101-traditional/225-deploy-to-render.mdx | 125 + .../101-traditional/250-deploy-to-koyeb.mdx | 200 + .../101-traditional/300-deploy-to-flyio.mdx | 55 + .../images/heroku-architecture.png | Bin 0 -> 106454 bytes .../images/heroku-deployed.png | Bin 0 -> 42038 bytes .../images/koyeb-app-creation.png | Bin 0 -> 1273043 bytes .../images/koyeb-architecture.png | Bin 0 -> 32386 bytes .../101-traditional/images/koyeb-deployed.png | Bin 0 -> 24842 bytes .../500-deployment/101-traditional/index.mdx | 16 + .../150-deploy-to-azure-functions.mdx | 37 + .../201-serverless/300-deploy-to-vercel.mdx | 107 + .../400-deploy-to-aws-lambda.mdx | 337 + .../201-serverless/500-deploy-to-netlify.mdx | 110 + .../300-00-deploy-to-vercel-architecture.png | Bin 0 -> 122195 bytes .../300-10-deploy-to-vercel-deploy-button.png | Bin 0 -> 9067 bytes ...00-10-deploy-to-vercel-deploy-button.snagx | Bin 0 -> 42190 bytes .../300-20-deploy-to-vercel-select-github.png | Bin 0 -> 22173 bytes ...00-20-deploy-to-vercel-select-github.snagx | Bin 0 -> 76895 bytes ...00-30-deploy-to-vercel-create-git-repo.png | Bin 0 -> 24143 bytes ...-30-deploy-to-vercel-create-git-repo.snagx | Bin 0 -> 81187 bytes ...-40-deploy-to-vercel-configure-project.png | Bin 0 -> 25249 bytes ...0-deploy-to-vercel-configure-project.snagx | Bin 0 -> 83572 bytes .../300-50-deploy-to-vercel-success.png | Bin 0 -> 157343 bytes .../300-50-deploy-to-vercel-success.snagx | Bin 0 -> 470726 bytes ...to-vercel-preview-environment-variable.png | Bin 0 -> 135383 bytes ...-vercel-preview-environment-variable.snagx | Bin 0 -> 463210 bytes ...deploy-to-vercel-environment-variables.png | Bin 0 -> 35853 bytes ...ploy-to-vercel-environment-variables.snagx | Bin 0 -> 118906 bytes .../500-01-deploy-to-netlify-architecture.png | Bin 0 -> 36749 bytes ...loy-to-netlify-example-repo-click-fork.png | Bin 0 -> 39095 bytes ...y-to-netlify-example-repo-click-fork.snagx | Bin 0 -> 142205 bytes ...-netlify-example-repo-create-fork-page.png | Bin 0 -> 135794 bytes ...etlify-example-repo-create-fork-page.snagx | Bin 0 -> 501148 bytes ...etlify-copy-supabase-connection-string.png | Bin 0 -> 202619 bytes ...lify-copy-supabase-connection-string.snagx | Bin 0 -> 648293 bytes ...to-netlify-netlify-init-configure-site.png | Bin 0 -> 44874 bytes ...-netlify-netlify-init-configure-site.snagx | Bin 0 -> 172712 bytes ...500-06-deploy-to-netlify-site-settings.png | Bin 0 -> 151141 bytes ...0-06-deploy-to-netlify-site-settings.snagx | Bin 0 -> 519062 bytes ...netlify-environment-variables-settings.png | Bin 0 -> 113181 bytes ...tlify-environment-variables-settings.snagx | Bin 0 -> 399057 bytes ...deploy-to-netlify-application-deployed.png | Bin 0 -> 43961 bytes ...ploy-to-netlify-application-deployed.snagx | Bin 0 -> 241882 bytes ...tlify-application-deployed-call-result.png | Bin 0 -> 76095 bytes ...ify-application-deployed-call-result.snagx | Bin 0 -> 353362 bytes .../500-deployment/201-serverless/index.mdx | 16 + .../500-deployment/301-edge/100-overview.mdx | 59 + .../301-edge/450-deploy-to-cloudflare.mdx | 738 +++ .../301-edge/485-deploy-to-vercel.mdx | 477 ++ .../301-edge/550-deploy-to-deno-deploy.mdx | 275 + .../301-edge/images/450-03-import-project.png | Bin 0 -> 156365 bytes .../images/450-03-import-project.snagx | Bin 0 -> 837867 bytes .../301-edge/images/450-04-connect-db.png | Bin 0 -> 227305 bytes .../301-edge/images/450-04-connect-db.snagx | Bin 0 -> 879013 bytes .../301-edge/images/450-05-data-proxy.png | Bin 0 -> 173869 bytes .../301-edge/images/450-05-data-proxy.snagx | Bin 0 -> 629236 bytes .../301-edge/images/550-01-create-repo.png | Bin 0 -> 266787 bytes ...0-02-deploy-to-deno-project-parameters.png | Bin 0 -> 156843 bytes ...02-deploy-to-deno-project-parameters.snagx | Bin 0 -> 538715 bytes .../500-deployment/301-edge/index.mdx | 16 + .../500-deployment/400-module-bundlers.mdx | 19 + ...y-database-changes-with-prisma-migrate.mdx | 69 + ...oy-migrations-from-a-local-environment.mdx | 56 + ...aveats-when-deploying-to-aws-platforms.mdx | 68 + .../700-deploy-to-a-different-os.mdx | 20 + .../500-deployment/index.mdx | 16 + .../130-logging.mdx | 174 + .../240-metrics.mdx | 572 ++ .../250-opentelemetry-tracing.mdx | 482 ++ .../600-observability-and-logging/index.mdx | 19 + .../600-observability-and-logging/jaeger.png | Bin 0 -> 126087 bytes .../trace-diagram.png | Bin 0 -> 15085 bytes .../140-debugging.mdx | 55 + .../230-handling-exceptions-and-errors.mdx | 46 + .../index.mdx | 19 + .../200-orm/200-prisma-client/_category_.json | 5 + .../200-orm/200-prisma-client/index.mdx | 11 + .../050-getting-started.mdx | 237 + .../005-overview.mdx | 35 + .../010-mental-model.mdx | 178 + .../070-migration-histories.mdx | 86 + .../200-shadow-database.mdx | 145 + .../300-limitations-and-known-issues.mdx | 77 + .../600-legacy-migrate.mdx | 466 ++ .../index.mdx | 10 + .../database-first-migration-flow.png | Bin 0 -> 36990 bytes .../db-push-flow.png | Bin 0 -> 25855 bytes .../entity-first-migration-flow.png | Bin 0 -> 26623 bytes .../prisma-migrate-dev-flow.png | Bin 0 -> 89947 bytes .../prisma-migrate-diff-flow.png | Bin 0 -> 67090 bytes .../prisma-migrate-lifecycle.png | Bin 0 -> 199855 bytes .../prisma-migrate-state-mgt.png | Bin 0 -> 69194 bytes .../migrate-mapping.png | Bin 0 -> 21073 bytes .../shadow-database.png | Bin 0 -> 1990156 bytes .../shadow-db.png | Bin 0 -> 37081 bytes .../300-workflows/10-seeding.mdx | 440 ++ .../300-workflows/100-team-development.mdx | 211 + .../110-native-database-types.mdx | 105 + .../120-native-database-functions.mdx | 83 + .../20-prototyping-your-schema.mdx | 289 + .../300-workflows/200-troubleshooting.mdx | 138 + .../300-workflows/30-baselining.mdx | 88 + .../40-customizing-migrations.mdx | 291 + .../300-workflows/45-data-migration.mdx | 260 + .../300-workflows/50-squashing-migrations.mdx | 130 + .../60-generating-down-migrations.mdx | 153 + .../70-patching-and-hotfixing.mdx | 272 + .../80-unsupported-database-features.mdx | 57 + .../90-development-and-production.mdx | 142 + .../300-workflows/deploy-db.png | Bin 0 -> 46449 bytes .../300-workflows/existing-database.png | Bin 0 -> 26311 bytes .../300-workflows/index.mdx | 10 + .../300-workflows/migrate-team-dev.png | Bin 0 -> 71339 bytes .../300-workflows/migration-history.png | Bin 0 -> 43852 bytes .../300-workflows/new-dev-db.png | Bin 0 -> 53917 bytes .../300-prisma-migrate/_category_.json | 5 + .../200-orm/300-prisma-migrate/index.mdx | 11 + .../200-orm/400-tools/05-prisma-cli.mdx | 262 + .../200-orm/400-tools/06-prisma-studio.mdx | 293 + .../200-orm/400-tools/_category_.json | 5 + .../images/prisma-studio/01-models-view.png | Bin 0 -> 83810 bytes .../prisma-studio/02-open-close-models.png | Bin 0 -> 155648 bytes .../03-model-view-keyboard-shortcuts.png | Bin 0 -> 75142 bytes .../04-save-multiple-changes.png | Bin 0 -> 291111 bytes .../prisma-studio/05-add-remove-filters.png | Bin 0 -> 333662 bytes .../prisma-studio/06-show-hide-fields.png | Bin 0 -> 249416 bytes .../prisma-studio/07-show-hide-records.png | Bin 0 -> 189685 bytes .../images/prisma-studio/08-model-sort.png | Bin 0 -> 300174 bytes .../400-tools/images/prisma-studio/array.svg | 4 + .../images/prisma-studio/boolean.svg | 4 + .../images/prisma-studio/database.svg | 4 + .../images/prisma-studio/datetime.svg | 1 + .../400-tools/images/prisma-studio/enum.svg | 6 + .../400-tools/images/prisma-studio/number.svg | 7 + .../400-tools/images/prisma-studio/object.svg | 5 + .../400-tools/images/prisma-studio/string.svg | 4 + .../200-orm/400-tools/index.mdx | 11 + .../050-prisma-client-reference.mdx | 5816 +++++++++++++++++ .../100-prisma-schema-reference.mdx | 3479 ++++++++++ .../200-prisma-cli-reference.mdx | 1505 +++++ .../500-reference/250-error-reference.mdx | 540 ++ .../300-environment-variables-reference.mdx | 281 + .../500-reference/350-database-features.mdx | 113 + .../500-reference/375-supported-databases.mdx | 53 + .../500-reference/380-connection-urls.mdx | 119 + .../500-reference/400-system-requirements.mdx | 143 + .../050-client-preview-features.mdx | 95 + .../080-cli-preview-features.mdx | 30 + .../500-preview-features/index.mdx | 18 + .../200-orm/500-reference/_category_.json | 5 + .../200-orm/500-reference/index.mdx | 17 + .../100-under-the-hood/100-engines.mdx | 237 + .../800-more/100-under-the-hood/index.mdx | 20 + .../query-engine-node-js-at-runtime.png | Bin 0 -> 15880 bytes .../typical-flow-query-engine-at-runtime.png | Bin 0 -> 71100 bytes .../500-upgrading-to-prisma-6.mdx | 416 ++ .../001-rejectonnotfound-changes.mdx | 177 + .../101-jsonprotocol-changes.mdx | 336 + .../600-upgrading-to-prisma-5/index.mdx | 358 + .../700-upgrading-to-prisma-4.mdx | 495 ++ .../100-named-constraints.mdx | 165 + .../150-referential-actions.mdx | 206 + .../800-upgrading-to-prisma-3/index.mdx | 161 + .../200-upgrading-versions/900-codemods.mdx | 43 + .../200-upgrading-versions/index.mdx | 52 + .../250-upgrading-to-use-preview-features.mdx | 25 + .../01-how-to-upgrade.mdx | 137 + .../02-schema-incompatibilities-mysql.mdx | 776 +++ ...02-schema-incompatibilities-postgresql.mdx | 777 +++ .../03-upgrading-the-prisma-layer-mysql.mdx | 1311 ++++ ...-upgrading-the-prisma-layer-postgresql.mdx | 1321 ++++ .../04-upgrading-nexus-prisma-to-nexus.mdx | 774 +++ .../05-upgrading-prisma-binding-to-nexus.mdx | 1329 ++++ ...-upgrading-prisma-binding-to-sdl-first.mdx | 1692 +++++ .../07-upgrading-a-rest-api.mdx | 251 + .../08-upgrade-from-mongodb-beta.mdx | 232 + .../images/TablePlus-GUI.png | Bin 0 -> 165631 bytes ...missing-default-constraints-to-columns.png | Bin 0 -> 131401 bytes .../images/altering-columns-to-use-enum.png | Bin 0 -> 212604 bytes .../images/download-graphql-schema.png | Bin 0 -> 586217 bytes ...xpose-prisma-model-fields-with-t-model.png | Bin 0 -> 39518 bytes .../fix-columns-with-json-data-types.png | Bin 0 -> 132890 bytes .../fix-incorrect-m-n-relations-sql.png | Bin 0 -> 193876 bytes .../images/fix-schema-incompatibilities.png | Bin 0 -> 50051 bytes .../images/prisma-cli-introspection-flow.png | Bin 0 -> 30299 bytes .../regenerate-resolvers-with-t-crud.png | Bin 0 -> 71855 bytes .../run-sql-command-to-alter-column.png | Bin 0 -> 120846 bytes .../use-t-crud-to-generate-resolvers.png | Bin 0 -> 48878 bytes .../800-upgrade-from-prisma-1/index.mdx | 11 + .../800-more/300-upgrade-guides/index.mdx | 10 + .../400-comparisons/01-prisma-and-typeorm.mdx | 1239 ++++ .../02-prisma-and-sequelize.mdx | 455 ++ .../03-prisma-and-mongoose.mdx | 288 + .../400-comparisons/04-prisma-and-drizzle.mdx | 485 ++ .../800-more/400-comparisons/index.mdx | 18 + .../01-migrate-from-typeorm.mdx | 1143 ++++ .../02-migrate-from-sequelize.mdx | 1280 ++++ .../03-migrate-from-mongoose.mdx | 1082 +++ .../04-migrate-from-drizzle.mdx | 514 ++ .../450-migrating-to-prisma/index.mdx | 10 + .../040-env-files.mdx | 125 + ...naging-env-files-and-setting-variables.mdx | 150 + .../200-using-multiple-env-files.mdx | 83 + .../050-environment-variables/index.mdx | 47 + .../100-editor-setup.mdx | 73 + .../500-development-environment/index.mdx | 17 + ...ompletion-in-graphql-resolvers-with-js.mdx | 262 + ...00-working-with-many-to-many-relations.mdx | 198 + .../300-implicit-to-explicit-conversion.mdx | 144 + .../400-nextjs-help.mdx | 111 + .../450-pkg-issue.mdx | 29 + ...-comparing-columns-through-raw-queries.mdx | 211 + .../600-vercel-caching-issue.mdx | 103 + .../700-netlify-caching-issue.mdx | 105 + .../800-check-constraints.mdx | 454 ++ .../900-prisma-nuxt-module.mdx | 354 + .../600-help-and-troubleshooting/index.mdx | 13 + .../200-orm/800-more/700-releases.mdx | 89 + .../200-orm/800-more/_category_.json | 5 + .../version-legacy/200-orm/800-more/index.mdx | 11 + .../version-legacy/200-orm/index.mdx | 19 + .../300-accelerate/200-getting-started.mdx | 262 + .../300-accelerate/250-connection-pooling.mdx | 123 + .../300-accelerate/300-caching.mdx | 240 + .../300-accelerate/350-static-ip.mdx | 56 + .../300-accelerate/400-api-reference.mdx | 181 + .../300-accelerate/500-known-limitations.mdx | 46 + .../300-accelerate/550-evaluating.mdx | 228 + .../300-accelerate/580-local-development.mdx | 66 + .../version-legacy/300-accelerate/600-faq.mdx | 202 + .../300-accelerate/650-troubleshoot.mdx | 158 + .../300-accelerate/700-feedback.mdx | 13 + .../300-accelerate/800-examples.mdx | 22 + .../300-accelerate/900-compare.mdx | 104 + .../version-legacy/300-accelerate/index.mdx | 106 + .../400-pulse/200-getting-started.mdx | 213 + .../100-general-database-instructions.mdx | 188 + .../250-database-setup/200-aws-rds.mdx | 29 + .../250-database-setup/300-railway.mdx | 141 + .../400-pulse/250-database-setup/400-neon.mdx | 52 + .../250-database-setup/500-supabase.mdx | 19 + .../250-database-setup/_category_.json | 4 + .../400-pulse/250-database-setup/index.mdx | 24 + .../400-pulse/275-static-ip.mdx | 38 + .../400-pulse/300-database-events.mdx | 199 + .../400-pulse/400-api-reference.mdx | 412 ++ .../400-pulse/500-known-limitations.mdx | 61 + .../version-legacy/400-pulse/600-faq.mdx | 178 + .../version-legacy/400-pulse/700-feedback.mdx | 8 + .../version-legacy/400-pulse/800-examples.mdx | 19 + .../400-pulse/images/add-group.png | Bin 0 -> 109154 bytes .../images/aws-rds-create-parameter-group.png | Bin 0 -> 577279 bytes .../400-pulse/images/pulse-usecase.png | Bin 0 -> 89696 bytes .../400-pulse/images/railway-database-url.png | Bin 0 -> 155932 bytes .../images/railway-template-configure.png | Bin 0 -> 592005 bytes .../images/replication-slot-submission.png | Bin 0 -> 132659 bytes .../set-logical-replication-parameter.png | Bin 0 -> 342897 bytes .../supabase-direct-database-connection.png | Bin 0 -> 28164 bytes .../400-pulse/images/what-is-pulse.png | Bin 0 -> 50093 bytes .../version-legacy/400-pulse/index.mdx | 101 + .../version-legacy/500-platform/10-about.mdx | 170 + .../500-platform/20-concepts/_category_.json | 4 + .../500-platform/30-maturity-levels.mdx | 40 + .../500-platform/50-support.mdx | 40 + .../500-platform/60-platform-cli/10-about.mdx | 16 + .../60-platform-cli/20-commands.mdx | 312 + .../60-platform-cli/_category_.json | 7 + .../500-platform/60-platform-cli/index.mdx | 16 + .../500-platform/_category_.json | 5 + .../version-legacy/500-platform/index.mdx | 18 + .../20-style-guide/01-writing-style.mdx | 169 + .../20-style-guide/02-word-choice.mdx | 329 + .../03-spelling-punctuation-formatting.mdx | 284 + .../20-style-guide/04-schema-models.mdx | 35 + .../05-prisma-product-names.mdx | 22 + .../20-style-guide/06-image-guidelines.mdx | 160 + .../07-user-interace-guidelines.mdx | 259 + .../20-style-guide/10-boilerplate-content.mdx | 41 + .../images/save-multiple-changes.png | Bin 0 -> 124134 bytes .../images/snagit-arrow-line-config.png | Bin 0 -> 185830 bytes .../snagit-screenshot-shadow-config.png | Bin 0 -> 118485 bytes .../images/snagit-text-annotation-config.png | Bin 0 -> 51879 bytes .../600-about/20-style-guide/index.mdx | 16 + .../30-docs-components/01-mdx-examples.mdx | 540 ++ .../30-docs-components/03-frontmatter.mdx | 148 + .../600-about/30-docs-components/index.mdx | 11 + .../version-legacy/600-about/40-template.mdx | 16 + .../version-legacy/600-about/_category_.json | 4 + .../version-legacy/600-about/index.mdx | 35 + .../700-optimize/200-getting-started.mdx | 105 + .../700-optimize/300-recordings.mdx | 53 + .../100-excessive-number-of-rows-returned.mdx | 30 + .../200-queries-on-unindexed-columns.mdx | 85 + ...-table-scans-caused-by-like-operations.mdx | 33 + .../400-repeated-query.mdx | 34 + .../500-select-returning.mdx | 31 + .../600-avoid-db-money.mdx | 28 + .../400-recommendations/700-avoid-char.mdx | 21 + .../400-recommendations/700-avoid-varchar.mdx | 23 + .../900-avoid-timestamp-timestampz-0.mdx | 26 + .../400-recommendations/_category_.json | 4 + .../400-recommendations/index.mdx | 15 + .../700-optimize/450-prisma-ai.mdx | 18 + .../700-optimize/500-performance-metrics.mdx | 29 + .../version-legacy/700-optimize/600-faq.mdx | 31 + .../700-optimize/700-known-limitations.mdx | 53 + .../version-legacy/700-optimize/index.mdx | 91 + .../version-legacy-sidebars.json | 414 ++ versions.json | 1 + 598 files changed, 94021 insertions(+) create mode 100644 versioned_docs/version-legacy/100-getting-started/01-quickstart-prismaPostgres.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/01-quickstart-sqlite.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-prismaPostgres.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-prismaPostgres.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-prismaPostgres.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-prismaPostgres.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-prismaPostgres.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/300-next-steps.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/100-connect-your-database-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/100-connect-your-database-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/125-creating-the-prisma-schema-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/125-creating-the-prisma-schema-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/200-install-prisma-client-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/200-install-prisma-client-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/250-querying-the-database-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/250-querying-the-database-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/300-next-steps.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/index.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-planetscale.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-mysql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-postgresql.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-sqlserver.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/300-next-steps.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/100-connect-your-database-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/100-connect-your-database-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/125-introspection-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/125-introspection-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/200-install-prisma-client-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/200-install-prisma-client-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/250-querying-the-database-node-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/250-querying-the-database-typescript-mongodb.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/300-next-steps.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/index.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/02-setup-prisma/index.mdx create mode 100644 versioned_docs/version-legacy/100-getting-started/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/100-what-is-prisma.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/200-why-prisma.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/250-should-you-use-prisma.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/300-data-modeling.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/node-js-db-tools-tradeoffs.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/prisma-makes-devs-productive.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/prisma-rest-apis.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/user-post-relation-1-n.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/user-table.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/100-introduction/user-table.svg create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/01-rest.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/02-graphql.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/03-fullstack.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/04-is-prisma-an-orm.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/200-database-drivers.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/250-prisma-postgres.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/300-postgresql.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/400-mysql.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/500-sqlite.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/600-mongodb.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/020-sql-server-local.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/030-sql-server-docker.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/840-cockroachdb.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/850-planetscale.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/880-supabase.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/890-neon.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/900-turso.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/950-cloudflare-d1.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/drivers/qe-query-engine-adapter.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/drivers/qe-query-execution-flow.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/embedded-replica-create-replica.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/embedded-replica-read.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/embedded-replica-remote-read.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/embedded-replica-write-propagation.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/mongodb.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/mysql-connection-string.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/500-databases/postgresql-connection-string.png create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/600-beyond-prisma-orm.mdx create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/_category_.json create mode 100644 versioned_docs/version-legacy/200-orm/050-overview/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/02-data-sources.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/03-generators.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/04-location.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/10-models.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/100-one-to-one-relations.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/200-one-to-many-relations.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/300-many-to-many-relations.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/400-self-relations.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/100-special-rules-for-referential-actions.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/420-relation-mode.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/500-troubleshooting-relations.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/one-to-many.png create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.png create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.snagx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/relations-intro.png create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/sample-schema.png create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/30-indexes.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/40-views.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/50-database-mapping.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/60-multi-schema.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/70-unsupported-database-features.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/80-table-inheritance.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/50-introspection.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/80-postgresql-extensions.mdx create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/_category_.json create mode 100644 versioned_docs/version-legacy/200-orm/100-prisma-schema/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/005-introduction.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/010-generating-prisma-client.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/015-instantiate-prisma-client.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/100-connection-management.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/115-connection-pool.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/200-pgbouncer.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/serverless-connections-2.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/serverless-connections.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/100-custom-model-and-field-names.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/150-error-formatting.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/200-read-replicas.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/220-database-polyfills.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/prisma-client-generation-workflow.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/prisma-client-node-module.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/030-crud.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/035-select-fields.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/037-relation-queries.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/050-filtering-and-sorting.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/055-pagination.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/056-aggregation-grouping-summarizing.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/058-transactions.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/060-full-text-search.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/061-custom-validation.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/062-computed-fields.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/063-excluding-fields.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/064-custom-models.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/070-case-sensitivity.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/100-query-optimization-performance.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/100-typedsql.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/200-raw-queries.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/300-safeql.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/057-composite-types.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/080-null-and-undefined.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/100-working-with-json-fields.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/200-working-with-scalar-lists-arrays.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/300-working-with-composite-ids-and-constraints.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/100-model.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/110-client.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/120-query.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/130-result.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/140-shared-extensions.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/150-type-utilities.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/200-extension-examples.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/100-soft-delete-middleware.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/200-logging-middleware.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/300-session-data-middleware.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/050-prisma-validator.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/100-operating-against-partial-structures-of-model-types.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/830-prisma-type-system.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/100-unit-testing.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/150-integration-testing.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/Docker_Diagram_V1.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/001-deploy-prisma.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/200-deploy-to-heroku.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/225-deploy-to-render.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/250-deploy-to-koyeb.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/300-deploy-to-flyio.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/heroku-architecture.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/heroku-deployed.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-app-creation.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-architecture.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-deployed.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/150-deploy-to-azure-functions.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/300-deploy-to-vercel.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/400-deploy-to-aws-lambda.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/500-deploy-to-netlify.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-00-deploy-to-vercel-architecture.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-10-deploy-to-vercel-deploy-button.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-10-deploy-to-vercel-deploy-button.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-20-deploy-to-vercel-select-github.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-20-deploy-to-vercel-select-github.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-30-deploy-to-vercel-create-git-repo.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-30-deploy-to-vercel-create-git-repo.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-40-deploy-to-vercel-configure-project.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-40-deploy-to-vercel-configure-project.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-50-deploy-to-vercel-success.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-50-deploy-to-vercel-success.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-60-deploy-to-vercel-preview-environment-variable.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-60-deploy-to-vercel-preview-environment-variable.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-70-deploy-to-vercel-environment-variables.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-70-deploy-to-vercel-environment-variables.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-01-deploy-to-netlify-architecture.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-02-deploy-to-netlify-example-repo-click-fork.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-02-deploy-to-netlify-example-repo-click-fork.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-03-deploy-to-netlify-example-repo-create-fork-page.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-03-deploy-to-netlify-example-repo-create-fork-page.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-04-deploy-to-netlify-copy-supabase-connection-string.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-04-deploy-to-netlify-copy-supabase-connection-string.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-05-deploy-to-netlify-netlify-init-configure-site.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-05-deploy-to-netlify-netlify-init-configure-site.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-06-deploy-to-netlify-site-settings.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-06-deploy-to-netlify-site-settings.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-07-deploy-to-netlify-environment-variables-settings.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-07-deploy-to-netlify-environment-variables-settings.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-08-deploy-to-netlify-application-deployed.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-08-deploy-to-netlify-application-deployed.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-09-deploy-to-netlify-application-deployed-call-result.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-09-deploy-to-netlify-application-deployed-call-result.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/100-overview.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/450-deploy-to-cloudflare.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/485-deploy-to-vercel.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/550-deploy-to-deno-deploy.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/images/450-03-import-project.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/images/450-03-import-project.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/images/450-04-connect-db.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/images/450-04-connect-db.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/images/450-05-data-proxy.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/images/450-05-data-proxy.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/images/550-01-create-repo.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/images/550-02-deploy-to-deno-project-parameters.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/images/550-02-deploy-to-deno-project-parameters.snagx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/301-edge/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/400-module-bundlers.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/550-deploy-database-changes-with-prisma-migrate.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/600-deploy-migrations-from-a-local-environment.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/650-caveats-when-deploying-to-aws-platforms.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/700-deploy-to-a-different-os.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/600-observability-and-logging/130-logging.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/600-observability-and-logging/240-metrics.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/600-observability-and-logging/250-opentelemetry-tracing.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/600-observability-and-logging/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/600-observability-and-logging/jaeger.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/600-observability-and-logging/trace-diagram.png create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/700-debugging-and-troubleshooting/140-debugging.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/700-debugging-and-troubleshooting/230-handling-exceptions-and-errors.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/700-debugging-and-troubleshooting/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/_category_.json create mode 100644 versioned_docs/version-legacy/200-orm/200-prisma-client/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/050-getting-started.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/005-overview.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/010-mental-model.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/070-migration-histories.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/200-shadow-database.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/300-limitations-and-known-issues.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/600-legacy-migrate.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/database-first-migration-flow.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/db-push-flow.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/entity-first-migration-flow.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/prisma-migrate-dev-flow.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/prisma-migrate-diff-flow.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/prisma-migrate-lifecycle.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/prisma-migrate-state-mgt.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/migrate-mapping.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/shadow-database.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/shadow-db.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/10-seeding.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/100-team-development.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/110-native-database-types.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/120-native-database-functions.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/20-prototyping-your-schema.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/200-troubleshooting.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/30-baselining.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/40-customizing-migrations.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/45-data-migration.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/50-squashing-migrations.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/60-generating-down-migrations.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/70-patching-and-hotfixing.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/80-unsupported-database-features.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/90-development-and-production.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/deploy-db.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/existing-database.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/migrate-team-dev.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/migration-history.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/300-workflows/new-dev-db.png create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/_category_.json create mode 100644 versioned_docs/version-legacy/200-orm/300-prisma-migrate/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/05-prisma-cli.mdx create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/06-prisma-studio.mdx create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/_category_.json create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/01-models-view.png create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/02-open-close-models.png create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/03-model-view-keyboard-shortcuts.png create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/04-save-multiple-changes.png create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/05-add-remove-filters.png create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/06-show-hide-fields.png create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/07-show-hide-records.png create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/08-model-sort.png create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/array.svg create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/boolean.svg create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/database.svg create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/datetime.svg create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/enum.svg create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/number.svg create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/object.svg create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/images/prisma-studio/string.svg create mode 100644 versioned_docs/version-legacy/200-orm/400-tools/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/050-prisma-client-reference.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/100-prisma-schema-reference.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/200-prisma-cli-reference.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/250-error-reference.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/300-environment-variables-reference.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/350-database-features.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/375-supported-databases.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/380-connection-urls.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/400-system-requirements.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/500-preview-features/050-client-preview-features.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/500-preview-features/080-cli-preview-features.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/500-preview-features/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/_category_.json create mode 100644 versioned_docs/version-legacy/200-orm/500-reference/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/100-under-the-hood/100-engines.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/100-under-the-hood/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/100-under-the-hood/query-engine-node-js-at-runtime.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/100-under-the-hood/typical-flow-query-engine-at-runtime.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/500-upgrading-to-prisma-6.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/600-upgrading-to-prisma-5/001-rejectonnotfound-changes.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/600-upgrading-to-prisma-5/101-jsonprotocol-changes.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/600-upgrading-to-prisma-5/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/700-upgrading-to-prisma-4.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/800-upgrading-to-prisma-3/100-named-constraints.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/800-upgrading-to-prisma-3/150-referential-actions.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/800-upgrading-to-prisma-3/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/900-codemods.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/250-upgrading-to-use-preview-features.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/01-how-to-upgrade.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/02-schema-incompatibilities-mysql.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/02-schema-incompatibilities-postgresql.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/03-upgrading-the-prisma-layer-mysql.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/03-upgrading-the-prisma-layer-postgresql.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/04-upgrading-nexus-prisma-to-nexus.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/05-upgrading-prisma-binding-to-nexus.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/06-upgrading-prisma-binding-to-sdl-first.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/07-upgrading-a-rest-api.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/08-upgrade-from-mongodb-beta.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/TablePlus-GUI.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/add-missing-default-constraints-to-columns.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/altering-columns-to-use-enum.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/download-graphql-schema.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/expose-prisma-model-fields-with-t-model.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/fix-columns-with-json-data-types.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/fix-incorrect-m-n-relations-sql.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/fix-schema-incompatibilities.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/prisma-cli-introspection-flow.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/regenerate-resolvers-with-t-crud.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/run-sql-command-to-alter-column.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/use-t-crud-to-generate-resolvers.png create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/300-upgrade-guides/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/400-comparisons/01-prisma-and-typeorm.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/400-comparisons/02-prisma-and-sequelize.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/400-comparisons/03-prisma-and-mongoose.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/400-comparisons/04-prisma-and-drizzle.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/400-comparisons/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/450-migrating-to-prisma/01-migrate-from-typeorm.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/450-migrating-to-prisma/02-migrate-from-sequelize.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/450-migrating-to-prisma/03-migrate-from-mongoose.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/450-migrating-to-prisma/04-migrate-from-drizzle.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/450-migrating-to-prisma/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/500-development-environment/050-environment-variables/040-env-files.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/500-development-environment/050-environment-variables/100-managing-env-files-and-setting-variables.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/500-development-environment/050-environment-variables/200-using-multiple-env-files.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/500-development-environment/050-environment-variables/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/500-development-environment/100-editor-setup.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/500-development-environment/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/100-autocompletion-in-graphql-resolvers-with-js.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/200-working-with-many-to-many-relations.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/300-implicit-to-explicit-conversion.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/400-nextjs-help.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/450-pkg-issue.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/500-comparing-columns-through-raw-queries.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/600-vercel-caching-issue.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/700-netlify-caching-issue.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/800-check-constraints.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/900-prisma-nuxt-module.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/600-help-and-troubleshooting/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/700-releases.mdx create mode 100644 versioned_docs/version-legacy/200-orm/800-more/_category_.json create mode 100644 versioned_docs/version-legacy/200-orm/800-more/index.mdx create mode 100644 versioned_docs/version-legacy/200-orm/index.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/200-getting-started.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/250-connection-pooling.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/300-caching.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/350-static-ip.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/400-api-reference.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/500-known-limitations.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/550-evaluating.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/580-local-development.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/600-faq.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/650-troubleshoot.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/700-feedback.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/800-examples.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/900-compare.mdx create mode 100644 versioned_docs/version-legacy/300-accelerate/index.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/200-getting-started.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/250-database-setup/100-general-database-instructions.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/250-database-setup/200-aws-rds.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/250-database-setup/300-railway.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/250-database-setup/400-neon.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/250-database-setup/500-supabase.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/250-database-setup/_category_.json create mode 100644 versioned_docs/version-legacy/400-pulse/250-database-setup/index.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/275-static-ip.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/300-database-events.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/400-api-reference.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/500-known-limitations.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/600-faq.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/700-feedback.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/800-examples.mdx create mode 100644 versioned_docs/version-legacy/400-pulse/images/add-group.png create mode 100644 versioned_docs/version-legacy/400-pulse/images/aws-rds-create-parameter-group.png create mode 100644 versioned_docs/version-legacy/400-pulse/images/pulse-usecase.png create mode 100644 versioned_docs/version-legacy/400-pulse/images/railway-database-url.png create mode 100644 versioned_docs/version-legacy/400-pulse/images/railway-template-configure.png create mode 100644 versioned_docs/version-legacy/400-pulse/images/replication-slot-submission.png create mode 100644 versioned_docs/version-legacy/400-pulse/images/set-logical-replication-parameter.png create mode 100644 versioned_docs/version-legacy/400-pulse/images/supabase-direct-database-connection.png create mode 100644 versioned_docs/version-legacy/400-pulse/images/what-is-pulse.png create mode 100644 versioned_docs/version-legacy/400-pulse/index.mdx create mode 100644 versioned_docs/version-legacy/500-platform/10-about.mdx create mode 100644 versioned_docs/version-legacy/500-platform/20-concepts/_category_.json create mode 100644 versioned_docs/version-legacy/500-platform/30-maturity-levels.mdx create mode 100644 versioned_docs/version-legacy/500-platform/50-support.mdx create mode 100644 versioned_docs/version-legacy/500-platform/60-platform-cli/10-about.mdx create mode 100644 versioned_docs/version-legacy/500-platform/60-platform-cli/20-commands.mdx create mode 100644 versioned_docs/version-legacy/500-platform/60-platform-cli/_category_.json create mode 100644 versioned_docs/version-legacy/500-platform/60-platform-cli/index.mdx create mode 100644 versioned_docs/version-legacy/500-platform/_category_.json create mode 100644 versioned_docs/version-legacy/500-platform/index.mdx create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/01-writing-style.mdx create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/02-word-choice.mdx create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/03-spelling-punctuation-formatting.mdx create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/04-schema-models.mdx create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/05-prisma-product-names.mdx create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/06-image-guidelines.mdx create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/07-user-interace-guidelines.mdx create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/10-boilerplate-content.mdx create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/images/save-multiple-changes.png create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/images/snagit-arrow-line-config.png create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/images/snagit-screenshot-shadow-config.png create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/images/snagit-text-annotation-config.png create mode 100644 versioned_docs/version-legacy/600-about/20-style-guide/index.mdx create mode 100644 versioned_docs/version-legacy/600-about/30-docs-components/01-mdx-examples.mdx create mode 100644 versioned_docs/version-legacy/600-about/30-docs-components/03-frontmatter.mdx create mode 100644 versioned_docs/version-legacy/600-about/30-docs-components/index.mdx create mode 100644 versioned_docs/version-legacy/600-about/40-template.mdx create mode 100644 versioned_docs/version-legacy/600-about/_category_.json create mode 100644 versioned_docs/version-legacy/600-about/index.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/200-getting-started.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/300-recordings.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/100-excessive-number-of-rows-returned.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/200-queries-on-unindexed-columns.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/300-full-table-scans-caused-by-like-operations.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/400-repeated-query.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/500-select-returning.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/600-avoid-db-money.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/700-avoid-char.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/700-avoid-varchar.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/900-avoid-timestamp-timestampz-0.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/_category_.json create mode 100644 versioned_docs/version-legacy/700-optimize/400-recommendations/index.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/450-prisma-ai.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/500-performance-metrics.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/600-faq.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/700-known-limitations.mdx create mode 100644 versioned_docs/version-legacy/700-optimize/index.mdx create mode 100644 versioned_sidebars/version-legacy-sidebars.json create mode 100644 versions.json diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 71805d2b03..ed067af884 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -127,6 +127,12 @@ const config: Config = { sidebarPath: "./sidebars.ts", // Remove this to remove the "edit this page" links. editUrl: "https://github.com/prisma/docs/tree/main", + lastVersion: 'current', + versions: { + current: { + label: '6.0', + }, + }, }, blog: false, theme: { @@ -222,6 +228,10 @@ const config: Config = { label: "Examples", className: "indigo external__link", }, + { + type: 'docsVersionDropdown', + position: 'right', + }, { href: "https://github.com/prisma/", position: "right", diff --git a/versioned_docs/version-legacy/100-getting-started/01-quickstart-prismaPostgres.mdx b/versioned_docs/version-legacy/100-getting-started/01-quickstart-prismaPostgres.mdx new file mode 100644 index 0000000000..46d93ca390 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/01-quickstart-prismaPostgres.mdx @@ -0,0 +1,209 @@ +--- +title: 'Quickstart' +metaTitle: 'Quickstart with TypeScript & Prisma Postgres' +metaDescription: 'Get started with Prisma ORM in 5 minutes. You will learn how to run migrations, send queries and receive real-time updates with a Prisma Postgres database.' +search: true +sidebar_class_name: hidden-sidebar +dbSwitcher: ['sqlite', 'prismaPostgres'] +slugSwitch: /getting-started/quickstart- +sidebar_custom_props: { badge: '5 min' } +--- + +In this Quickstart guide, you'll learn how to get started from scratch with Prisma ORM and a **Prisma Postgres** database in a plain **TypeScript** project. It covers the following workflows: + +- Creating a [Prisma Postgres](https://www.prisma.io/postgres?utm_source=docs) database +- Schema migrations and queries (via [Prisma ORM](https://www.prisma.io/orm)) +- Connection pooling and caching (via [Prisma Accelerate](https://www.prisma.io/accelerate)) +- Real-time database change events (via [Prisma Pulse](https://www.prisma.io/pulse)) + +## Prerequisites + +To successfully complete this tutorial, you need: +- a [Prisma Data Platform](https://console.prisma.io/) (PDP) account +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) + +## 1. Set up a Prisma Postgres database in the Platform Console + +Follow these steps to create your Prisma Postgres database: + +1. Log in to [Prisma Data Platform](https://console.prisma.io/). +1. In a [workspace](/platform/about#workspace) of your choice, click the **New project** button. +1. Type a name for your project in the **Name** field, e.g. **hello-ppg**. +1. In the **Prisma Postgres** section, click the **Get started** button. +1. In the **Region** dropdown, select the region that's closest to your current location, e.g. **US East (N. Virginia)**. +1. Click the **Create project** button. + +At this point, you'll be redirected to the **Database** page where you will need to wait for a few seconds while the status of your database changes from **`PROVISIONING`**, to **`ACTIVATING`** to **`CONNECTED`**. + +Once the green **`CONNECTED`** label appears, your database is ready to use! + +## 2. Download example and install dependencies + +Copy the `try-prisma` command that's shown in the Console, paste it into your terminal and execute it. + +For reference, this is what the command looks like: + +```terminal +npx try-prisma@latest \ + --template databases/prisma-postgres \ + --name hello-prisma \ + --install npm +``` + +Once the `try-prisma` command has terminated, navigate into the project directory: + +```terminal +cd hello-prisma +``` + +## 3. Set database connection and Pulse API key + +The connection to your database and the Pulse API key are configured via environment variables in a `.env` file. + +First, rename the existing `.env.example` file to just `.env`: + +```terminal +mv .env.example .env +``` + +Then, find your database credentials in the **Set up database access** section, copy the `DATABASE_URL` and `PULSE_API_KEY` environment variables and paste them into the `.env` file. + +For reference, the file should now look similar to this: + +```bash no-copy +DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=ey...." +PULSE_API_KEY="ey...." +``` + +## 4. Create database tables (with a schema migration) + +Next, you need to create the tables in your database. You can do this by creating and executing a schema migration with the following command of the Prisma CLI: + +```terminal +npx prisma migrate dev --name init +``` + +This will map the `User` and `Post` models that are defined in your [Prisma schema](/orm/prisma-schema/) to your database. You can also review the SQL migration that was executed and created the tables in the newly created `prisma/migrations` directory. + +## 5. Execute queries with Prisma ORM + +The [`src/queries.ts`](https://github.com/prisma/prisma-examples/blob/latest/databases/prisma-postgres/src/queries.ts) script contains a number of CRUD queries that will write and read data in your database. You can execute it by running the following command in your terminal: + +```terminal +npm run queries +``` + +Once the script has completed, you can inspect the logs in your terminal or use Prisma Studio to explore what records have been created in the database: + +```terminal +npx prisma studio +``` + +## 6. Explore caching with Prisma Accelerate + +The [`src/caching.ts`](https://github.com/prisma/prisma-examples/blob/latest/databases/prisma-postgres/src/caching.ts) script contains a sample query that uses [Stale-While-Revalidate](/accelerate/caching#stale-while-revalidate-swr) (SWR) and [Time-To-Live](/accelerate/caching#time-to-live-ttl) (TTL) to cache a database query using Prisma Accelerate. You can execute it as follows: + +```terminal +npm run caching +``` + +Take note of the time that it took to execute the query, e.g.: + +``` +The query took 2009.2467149999998ms. +``` + +Now, run the script again: + +```terminal +npm run caching +``` + +You'll notice that the time the query took will be a lot shorter this time, e.g.: + +``` +The query took 300.5655280000001ms. +``` + +## 7. Observe real-time events in your database + +The [`src/realtime.ts`](https://github.com/prisma/prisma-examples/blob/latest/databases/prisma-postgres/src/realtime.ts) script contains a demo for receiving real-time change [events](/pulse/database-events) from your database. You can start the script as follows: + +```terminal +npm run realtime +``` + +The script now created a [stream](/pulse/api-reference#stream) that will receive database events and print them to the console whenever a write-operation (i.e. _create_, _update_ or _delete_) happens on the `User` table. + +To test the stream, you can open Prisma Studio: + +```terminal +npx prisma studio +``` + +... and make a change to the `User` table, e.g. create a new record. Once you've saved the change, you should see an output in the terminal that looks similar to this: + +``` +Received an event: { + action: 'create', + created: { id: 3, email: 'burk@prisma.io', name: 'Nikolas' }, + id: '01JAFNSZHQRDTW773BCAA9G7FJ' +} +``` + +## 8. Next steps + +In this Quickstart guide, you have learned how to get started with Prisma ORM in a plain TypeScript project. Feel free to explore the Prisma Client API a bit more on your own, e.g. by including filtering, sorting, and pagination options in the `findMany` query or exploring more operations like `update` and `delete` queries. + +### Explore the data in Prisma Studio + +Prisma ORM comes with a built-in GUI to view and edit the data in your database. You can open it using the following command: + +```terminal +npx prisma studio +``` + +With Prisma Postgres, you can also directly use Prisma Studio inside the [Console](https://console.prisma.io) by selecting the **Studio** tab in your project. + +### Explore ready-to-run Prisma ORM examples + +Check out the [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository on GitHub to see how Prisma ORM can be used with your favorite library. The repo contains examples with Express, NestJS, GraphQL as well as fullstack examples with Next.js and Vue.js, and a lot more. + +### Build real-time apps with Prisma Pulse + +[Prisma Pulse](/pulse) enables you to create applications that instantly react to changes in your database, allowing you to build type-safe real-time features and applications easily: + +| Demo | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| [`starter`](https://github.com/prisma/prisma-examples/tree/latest/pulse/starter) | A Prisma Pulse starter app | +| [`email-with-resend`](https://github.com/prisma/prisma-examples/tree/latest/pulse/email-with-resend) | An example app to send emails to new users using Prisma Pulse and Resend | +| [`fullstack-leaderboard`](https://github.com/prisma/prisma-examples/tree/latest/pulse/fullstack-leaderboard) | A live leaderboard (built with Next.js) | +| [`fullstack-simple-chat`](https://github.com/prisma/prisma-examples/tree/latest/pulse/fullstack-simple-chat) | A simple chat app (built with Next.js & Express) | +| [`product-search-with-typesense`](https://github.com/prisma/prisma-examples/tree/latest/pulse/product-search-with-typesense) | A cron job that syncs data into Typesense (built with Hono.js) | +| [`data-sync-with-bigquery`](https://github.com/prisma/prisma-examples/tree/latest/pulse/data-sync-with-bigquery) | A script that automatically syncs data into Google BigQuery | + +### Speed up your database queries with Prisma Accelerate + +[Prisma Accelerate](/accelerate) is a connection pooler and global database cache that can drastically speed up your database queries. Check out the [Speed Test](https://accelerate-speed-test.prisma.io/) or try Accelerate with your favorite framework: + +| Demo | Description | +| ----------------------------------------------- | -------------------------------------------------------------------------- | +| [`nextjs-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/nextjs-starter) | A Next.js project using Prisma Accelerate's caching and connection pooling | +| [`svelte-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/svelte-starter) | A SvelteKit project using Prisma Accelerate's caching and connection pooling | +| [`solidstart-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/solidstart-starter) | A Solidstart project using Prisma Accelerate's caching and connection pooling | +| [`remix-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/remix-starter) | A Remix project using Prisma Accelerate's caching and connection pooling | +| [`nuxt-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/nuxtjs-starter) | A Nuxt.js project using Prisma Accelerate's caching and connection pooling | +| [`astro-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/astro-starter) | An Astro project using Prisma Accelerate's caching and connection pooling | + + +### Build an app with Prisma ORM + +The Prisma blog features comprehensive tutorials about Prisma ORM, check out our latest ones: + +- [Build a fullstack app with Next.js](https://www.youtube.com/watch?v=QXxy8Uv1LnQ&ab_channel=ByteGrad) +- [Build a fullstack app with Remix](https://www.prisma.io/blog/fullstack-remix-prisma-mongodb-1-7D0BfTXBmB6r) (5 parts, including videos) +- [Build a REST API with NestJS](https://www.prisma.io/blog/nestjs-prisma-rest-api-7D056s1BmOL0) + +### Join the Prisma community 💚 + +Prisma has a huge [community](https://www.prisma.io/community) of developers. Join us on [Discord](https://discord.com/invite/KQyTW2H5ca) or ask questions using [GitHub Discussions](https://github.com/prisma/prisma/discussions). diff --git a/versioned_docs/version-legacy/100-getting-started/01-quickstart-sqlite.mdx b/versioned_docs/version-legacy/100-getting-started/01-quickstart-sqlite.mdx new file mode 100644 index 0000000000..4071e1ee4f --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/01-quickstart-sqlite.mdx @@ -0,0 +1,472 @@ +--- +title: 'Quickstart' +metaTitle: 'Quickstart with TypeScript & SQLite' +metaDescription: 'Get started with Prisma ORM in 5 minutes. You will learn how to send queries to a SQLite database in a plain TypeScript script using Prisma Client.' +search: true +sidebar_class_name: hidden-sidebar +dbSwitcher: ['sqlite', 'prismaPostgres'] +slugSwitch: /getting-started/quickstart- +sidebar_custom_props: { badge: '5 min' } +--- + +In this Quickstart guide, you'll learn how to get started with Prisma ORM from scratch using a plain **TypeScript** project and a local **SQLite** database file. It covers **data modeling**, **migrations** and **querying** a database. + +If you want to use Prisma ORM with your own PostgreSQL, MySQL, MongoDB or any other supported database, go here instead: + +- [Start with Prisma ORM from scratch](/getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-postgresql) +- [Add Prisma ORM to an existing project](/getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-postgresql) + +## Prerequisites + +You need [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions). + +## 1. Create TypeScript project and set up Prisma ORM + +As a first step, create a project directory and navigate into it: + +```terminal +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a TypeScript project using npm: + +```terminal +npm init -y +npm install typescript tsx @types/node --save-dev +``` + +This creates a `package.json` with an initial setup for your TypeScript app. + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +Now, initialize TypeScript: + +```terminal +npx tsc --init +``` + +Then, install the Prisma CLI as a development dependency in the project: + +```terminal +npm install prisma --save-dev +``` + +Finally, set up Prisma ORM with the `init` command of the Prisma CLI: + +```terminal +npx prisma init --datasource-provider sqlite +``` + +This creates a new `prisma` directory with a `schema.prisma` file and configures SQLite as your database. You're now ready to model your data and create your database with some tables. + +## 2. Model your data in the Prisma schema + +The Prisma schema provides an intuitive way to model data. Add the following models to your `schema.prisma` file: + +```prisma file=prisma/schema.prisma showLineNumbers +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} +``` + +Models in the Prisma schema have two main purposes: + +- Represent the tables in the underlying database +- Serve as foundation for the generated Prisma Client API + +In the next section, you will map these models to database tables using Prisma Migrate. + +## 3. Run a migration to create your database tables with Prisma Migrate + +At this point, you have a Prisma schema but no database yet. Run the following command in your terminal to create the SQLite database and the `User` and `Post` tables represented by your models: + +```terminal +npx prisma migrate dev --name init +``` + +This command did three things: + +1. It created a new SQL migration file for this migration in the `prisma/migrations` directory. +2. It executed the SQL migration file against the database. +3. It ran `prisma generate` under the hood (which installed the `@prisma/client` package and generated a tailored Prisma Client API based on your models). + +Because the SQLite database file didn't exist before, the command also created it inside the `prisma` directory with the name `dev.db` as defined via the environment variable in the `.env` file. + +Congratulations, you now have your database and tables ready. Let's go and learn how you can send some queries to read and write data! + +## 4. Explore how to send queries to your database with Prisma Client + +To send queries to the database, you will need a TypeScript file to execute your Prisma Client queries. Create a new file called `script.ts` for this purpose: + +```terminal +touch script.ts +``` + +Then, paste the following boilerplate into it: + +```ts file=script.ts showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +This code contains a `main` function that's invoked at the end of the script. It also instantiates `PrismaClient` which represents the query interface to your database. + +### 4.1. Create a new `User` record + +Let's start with a small query to create a new `User` record in the database and log the resulting object to the console. Add the following code to your `script.ts` file: + +```ts file=script.ts highlight=6-12;add showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // add-start + const user = await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + }, + }) + console.log(user) + // add-end +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Instead of copying the code, you can type it out in your editor to experience the autocompletion Prisma Client provides. You can also actively invoke the autocompletion by pressing the CTRL+SPACE keys on your keyboard. + +Next, execute the script with the following command: + + + + + +```terminal +npx tsx script.ts +``` + + + + +```code no-copy +{ id: 1, email: 'alice@prisma.io', name: 'Alice' } +``` + + + + + +Great job, you just created your first database record with Prisma Client! 🎉 + +In the next section, you'll learn how to read data from the database. + +### 4.2. Retrieve all `User` records + +Prisma Client offers various queries to read data from your database. In this section, you'll use the `findMany` query that returns _all_ the records in the database for a given model. + +Delete the previous Prisma Client query and add the new `findMany` query instead: + +```ts file=script.ts highlight=6-7;add showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // add-start + const users = await prisma.user.findMany() + console.log(users) + // add-end +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Execute the script again: + + + + + +```terminal +npx tsx script.ts +``` + + + + + +```code no-copy +[{ id: 1, email: 'alice@prisma.io', name: 'Alice' }] +``` + + + + + +Notice how the single `User` object is now enclosed with square brackets in the console. That's because the `findMany` returned an array with a single object inside. + +### 4.3. Explore relation queries with Prisma Client + +One of the main features of Prisma Client is the ease of working with [relations](/orm/prisma-schema/data-model/relations). In this section, you'll learn how to create a `User` and a `Post` record in a nested write query. Afterwards, you'll see how you can retrieve the relation from the database using the `include` option. + +First, adjust your script to include the nested query: + +```ts file=script.ts highlight=6-24;add showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // add-start + const user = await prisma.user.create({ + data: { + name: 'Bob', + email: 'bob@prisma.io', + posts: { + create: [ + { + title: 'Hello World', + published: true + }, + { + title: 'My second post', + content: 'This is still a draft' + } + ], + }, + }, + }) + console.log(user) + // add-end +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Run the query by executing the script again: + + + + + +```terminal +npx tsx script.ts +``` + + + + + +```code no-copy +{ id: 2, email: 'bob@prisma.io', name: 'Bob' } +``` + + + + + +By default, Prisma Client only returns _scalar_ fields in the result objects of a query. That's why, even though you also created a new `Post` record for the new `User` record, the console only printed an object with three scalar fields: `id`, `email` and `name`. + +In order to also retrieve the `Post` records that belong to a `User`, you can use the `include` option via the `posts` relation field: + +```ts file=script.ts highlight=6-11;add showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { +// add-start + const usersWithPosts = await prisma.user.findMany({ + include: { + posts: true, + }, + }) + console.dir(usersWithPosts, { depth: null }) + // add-end +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Run the script again to see the results of the nested read query: + + + + + +```terminal +npx tsx script.ts +``` + + + + + +```code no-copy +[ + { id: 1, email: 'alice@prisma.io', name: 'Alice', posts: [] }, + { + id: 2, + email: 'bob@prisma.io', + name: 'Bob', + posts: [ + { + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 2 + }, + { + id: 2, + title: 'My second post', + content: 'This is still a draft', + published: false, + authorId: 2 + } + ] + } +] +``` + + + + + +This time, you're seeing two `User` objects being printed. Both of them have a `posts` field (which is empty for `"Alice"` and populated with a single `Post` object for `"Bob"`) that represents the `Post` records associated with them. + +Notice that the objects in the `usersWithPosts` array are fully typed as well. This means you will get autocompletion and the TypeScript compiler will prevent you from accidentally typing them. + +## 5. Next steps + +In this Quickstart guide, you have learned how to get started with Prisma ORM in a plain TypeScript project. Feel free to explore the Prisma Client API a bit more on your own, e.g. by including filtering, sorting, and pagination options in the `findMany` query or exploring more operations like `update` and `delete` queries. + +### Explore the data in Prisma Studio + +Prisma ORM comes with a built-in GUI to view and edit the data in your database. You can open it using the following command: + +```terminal +npx prisma studio +``` + +### Set up Prisma ORM with your own database + +If you want to move forward with Prisma ORM using your own PostgreSQL, MySQL, MongoDB or any other supported database, follow the Set Up Prisma ORM guides: + +- [Start with Prisma ORM from scratch](/getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-postgresql) +- [Add Prisma ORM to an existing project](/getting-started/setup-prisma/add-to-existing-project) + +### Get query insights and analytics with Prisma Optimize + +[Prisma Optimize](/optimize) helps you generate insights and provides recommendations that can help you make your database queries faster. + +Optimize aims to help developers of all skill levels write efficient database queries, reducing database load and making applications more responsive. + +### Explore ready-to-run Prisma ORM examples + +Check out the [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository on GitHub to see how Prisma ORM can be used with your favorite library. The repo contains examples with Express, NestJS, GraphQL as well as fullstack examples with Next.js and Vue.js, and a lot more. + +### Build real-time apps with Prisma Pulse + +[Prisma Pulse](/pulse) enables you to create applications that instantly react to changes in your database, allowing you to build type-safe real-time features and applications easily: + +| Demo | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| [`starter`](https://github.com/prisma/prisma-examples/tree/latest/pulse/starter) | A Prisma Pulse starter app | +| [`email-with-resend`](https://github.com/prisma/prisma-examples/tree/latest/pulse/email-with-resend) | An example app to send emails to new users using Prisma Pulse and Resend | +| [`fullstack-leaderboard`](https://github.com/prisma/prisma-examples/tree/latest/pulse/fullstack-leaderboard) | A live leaderboard (built with Next.js) | +| [`fullstack-simple-chat`](https://github.com/prisma/prisma-examples/tree/latest/pulse/fullstack-simple-chat) | A simple chat app (built with Next.js & Express) | +| [`product-search-with-typesense`](https://github.com/prisma/prisma-examples/tree/latest/pulse/product-search-with-typesense) | A cron job that syncs data into Typesense (built with Hono.js) | +| [`data-sync-with-bigquery`](https://github.com/prisma/prisma-examples/tree/latest/pulse/data-sync-with-bigquery) | A script that automatically syncs data into Google BigQuery | + +### Speed up your database queries with Prisma Accelerate + +[Prisma Accelerate](/accelerate) is a connection pooler and global database cache that can drastically speed up your database queries. Check out the [Speed Test](https://accelerate-speed-test.prisma.io/) or try Accelerate with your favorite framework: + +| Demo | Description | +| ----------------------------------------------- | -------------------------------------------------------------------------- | +| [`nextjs-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/nextjs-starter) | A Next.js project using Prisma Accelerate's caching and connection pooling | +| [`svelte-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/svelte-starter) | A SvelteKit project using Prisma Accelerate's caching and connection pooling | +| [`solidstart-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/solidstart-starter) | A Solidstart project using Prisma Accelerate's caching and connection pooling | +| [`remix-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/remix-starter) | A Remix project using Prisma Accelerate's caching and connection pooling | +| [`nuxt-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/nuxtjs-starter) | A Nuxt.js project using Prisma Accelerate's caching and connection pooling | +| [`astro-starter`](https://github.com/prisma/prisma-examples/tree/latest/accelerate/astro-starter) | An Astro project using Prisma Accelerate's caching and connection pooling | + + +### Build an app with Prisma ORM + +The Prisma blog features comprehensive tutorials about Prisma ORM, check out our latest ones: + +- [Build a fullstack app with Next.js](https://www.youtube.com/watch?v=QXxy8Uv1LnQ&ab_channel=ByteGrad) +- [Build a fullstack app with Remix](https://www.prisma.io/blog/fullstack-remix-prisma-mongodb-1-7D0BfTXBmB6r) (5 parts, including videos) +- [Build a REST API with NestJS](https://www.prisma.io/blog/nestjs-prisma-rest-api-7D056s1BmOL0) + +### Join the Prisma community 💚 + +Prisma has a huge [community](https://www.prisma.io/community) of developers. Join us on [Discord](https://discord.com/invite/KQyTW2H5ca) or ask questions using [GitHub Discussions](https://github.com/prisma/prisma/discussions). diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-cockroachdb.mdx new file mode 100644 index 0000000000..73d607b1be --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-cockroachdb.mdx @@ -0,0 +1,48 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using JavaScript and CockroachDB (15 min)' +metaDescription: 'Learn how to create a new Node.js project from scratch by connecting Prisma ORM to your CockroachDB database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + + + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [CockroachDB](https://www.cockroachlabs.com/) database server running + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a Node.js project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma --save-dev +``` + +This creates a `package.json` with an initial setup for a Node.js app. + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-mysql.mdx new file mode 100644 index 0000000000..3e8130fc94 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-mysql.mdx @@ -0,0 +1,71 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using JavaScript and MySQL (15 min)' +metaDescription: 'Learn how to create a new Node.js project from scratch by connecting Prisma ORM to your MySQL database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-mysql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + + + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [MySQL](https://www.mysql.com/) database server running + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a Node.js project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma --save-dev +``` + +This creates a `package.json` with an initial setup for a Node.js app. + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-planetscale.mdx new file mode 100644 index 0000000000..cef31fcb4e --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-planetscale.mdx @@ -0,0 +1,63 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using JavaScript and PlanetScale (15 min)' +metaDescription: 'Learn how to create a new Node.js project from scratch by connecting Prisma ORM to your PlanetScale database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-planetscale +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + + + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [PlanetScale](https://planetscale.com/) database server running + + + +This tutorial will also assume that you can push to the `main` branch of your database. Do not do this if your `main` branch has been promoted to production. + + + +Next, initialize a Node.js project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma --save-dev +``` + +This creates a `package.json` with an initial setup for a Node.js app. + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma Schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-postgresql.mdx new file mode 100644 index 0000000000..8a456799f8 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-postgresql.mdx @@ -0,0 +1,70 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using JavaScript and PostgreSQL (15 min)' +metaDescription: 'Learn how to create a new Node.js project from scratch by connecting Prisma ORM to your PostgreSQL database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-postgresql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + + + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [PostgreSQL](https://www.postgresql.org/) database server running + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a Node.js project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma --save-dev +``` + +This creates a `package.json` with an initial setup for a Node.js app. + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-sqlserver.mdx new file mode 100644 index 0000000000..30047e3686 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-node-sqlserver.mdx @@ -0,0 +1,73 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using JavaScript and SQL Server (15 min)' +metaDescription: 'Learn how to create a new Node.js project from scratch by connecting Prisma ORM to your SQL Server database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-sqlserver +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + + + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- A [Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/?view=sql-server-ver16) database + - [Microsoft SQL Server on Linux for Docker](/orm/overview/databases/sql-server/sql-server-docker) + - [Microsoft SQL Server on Windows (local)](/orm/overview/databases/sql-server/sql-server-local) + + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a Node.js project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma --save-dev +``` + +This creates a `package.json` with an initial setup for a Node.js app. + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..8d240309ce --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-cockroachdb.mdx @@ -0,0 +1,76 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using TypeScript and CockroachDB (15 min)' +metaDescription: 'Learn how to create a new TypeScript project from scratch by connecting Prisma ORM to your CockroachDB database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + + + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [CockroachDB](https://www.cockroachlabs.com/) database server running + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a TypeScript project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma typescript tsx @types/node --save-dev +``` + +This creates a `package.json` with an initial setup for your TypeScript app. + +Next, initialize TypeScript: + +```terminal copy +npx tsc --init +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-mysql.mdx new file mode 100644 index 0000000000..3fbca53bbe --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-mysql.mdx @@ -0,0 +1,76 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using TypeScript and MySQL (15 min)' +metaDescription: 'Learn how to create a new TypeScript project from scratch by connecting Prisma ORM to your MySQL database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-mysql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + + + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [MySQL](https://www.mysql.com/) database server running + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a TypeScript project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma typescript tsx @types/node --save-dev +``` + +This creates a `package.json` with an initial setup for your TypeScript app. + +Next, initialize TypeScript: + +```terminal copy +npx tsc --init +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-planetscale.mdx new file mode 100644 index 0000000000..b48752c76c --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-planetscale.mdx @@ -0,0 +1,82 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using TypeScript and PlanetScale (15 min)' +metaDescription: 'Learn how to create a new TypeScript project from scratch by connecting Prisma ORM to your PlanetScale database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-planetscale +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + + + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [PlanetScale](https://planetscale.com/) database server running + + + +This tutorial will also assume that you can push to the `main` branch of your database. Do not do this if your `main` branch has been promoted to production. + + + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a TypeScript project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma typescript tsx @types/node --save-dev +``` + +This creates a `package.json` with an initial setup for your TypeScript app. + +Next, initialize TypeScript: + +```terminal copy +npx tsc --init +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-postgresql.mdx new file mode 100644 index 0000000000..d7947f61e8 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-postgresql.mdx @@ -0,0 +1,71 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using TypeScript and PostgreSQL (15 min)' +metaDescription: 'Learn how to create a new TypeScript project from scratch by connecting Prisma ORM to your PostgreSQL database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [PostgreSQL](https://www.postgresql.org/) database server running + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a TypeScript project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma typescript tsx @types/node --save-dev +``` + +This creates a `package.json` with an initial setup for your TypeScript app. + +Next, initialize TypeScript: + +```terminal copy +npx tsc --init +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-prismaPostgres.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-prismaPostgres.mdx new file mode 100644 index 0000000000..98e3bfa222 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-prismaPostgres.mdx @@ -0,0 +1,69 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using TypeScript and Prisma Postgres (15 min)' +metaDescription: 'Learn how to create a new TypeScript project from scratch by connecting Prisma ORM to your Prisma Postgres database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-prismaPostgres +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + +Learn how to create a new TypeScript project with a Prisma Postgres database from scratch. This tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate) and covers the following workflows: + +- Creating a TypeScript project on your local machine from scratch +- Creating a [Prisma Postgres](https://www.prisma.io/postgres?utm_source=docs) database +- Schema migrations and queries (via [Prisma ORM](https://www.prisma.io/orm)) +- Connection pooling and caching (via [Prisma Accelerate](https://www.prisma.io/accelerate)) +- Real-time database change events (via [Prisma Pulse](https://www.prisma.io/pulse)) + +## Prerequisites + +To successfully complete this tutorial, you need: +- a [Prisma Data Platform](https://console.prisma.io/) (PDP) account +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) (see [system requirements](/orm/reference/system-requirements) for officially supported versions) + +## Create project setup + +Create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a TypeScript project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma typescript tsx @types/node --save-dev +``` + +This creates a `package.json` with an initial setup for your TypeScript app. + +Next, initialize TypeScript: + +```terminal copy +npx tsc --init +``` + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command did the following: + +- It created a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- It created a [`.env`](/orm/more/development-environment/environment-variables/env-files) file in the root directory of the project, which is used for defining environment variables (such as your database connection and API keys). + +In the next section, you'll learn how to connect your Prisma Postgres database to the project you just created on your file system. \ No newline at end of file diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-sqlserver.mdx new file mode 100644 index 0000000000..143b6ef8e8 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases-typescript-sqlserver.mdx @@ -0,0 +1,78 @@ +--- +title: 'Relational databases' +metaTitle: 'Start from scratch with Prisma ORM using TypeScript and SQL Server (15 min)' +metaDescription: 'Learn how to create a new TypeScript project from scratch by connecting Prisma ORM to your SQL Server database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases- +--- + + + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- A [Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/?view=sql-server-ver16) database + - [Microsoft SQL Server on Linux for Docker](/orm/overview/databases/sql-server/sql-server-docker) + - [Microsoft SQL Server on Windows (local)](/orm/overview/databases/sql-server/sql-server-local) + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a TypeScript project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma typescript tsx @types/node --save-dev +``` + +This creates a `package.json` with an initial setup for your TypeScript app. + +Next, initialize TypeScript: + +```terminal copy +npx tsc --init +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma using a different package manager. + + + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-cockroachdb.mdx new file mode 100644 index 0000000000..3c951fae2a --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-cockroachdb.mdx @@ -0,0 +1,63 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using JavaScript and CockroachDB' +metaDescription: 'Connect your database to your project using JavaScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-node-cockroachdb +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL as the `provider`. For CockroachDB, you need to edit the `datasource` block to use the `cockroachdb` provider instead: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "cockroachdb" + url = env("DATABASE_URL") +} +``` + +The `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`. You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. CockroachDB uses the PostgreSQL connection URL format, which has the following structure (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?PARAMETERS +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running. The default for CockroachDB is `26257`. +- `DATABASE`: The name of the database +- `PARAMETERS`: Any additional connection parameters. See the CockroachDB documentation [here](https://www.cockroachlabs.com/docs/stable/connection-parameters.html#additional-connection-parameters). + +For a [CockroachDB Serverless](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart.html) or [Cockroach Dedicated](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart-trial-cluster) database hosted on [CockroachDB Cloud](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart/), the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="postgresql://:@..cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full&sslrootcert=$HOME/.postgresql/root.crt&options=--" +``` + +To find your connection string on CockroachDB Cloud, click the 'Connect' button on the overview page for your database cluster, and select the 'Connection string' tab. + +For a [CockroachDB database hosted locally](https://www.cockroachlabs.com/docs/stable/secure-a-cluster.html), the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="postgresql://root@localhost:26257?sslmode=disable" +``` + +Your connection string is displayed as part of the welcome text when starting CockroachDB from the command line. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-mysql.mdx new file mode 100644 index 0000000000..b411215349 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-mysql.mdx @@ -0,0 +1,70 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using JavaScript and MySQL' +metaDescription: 'Connect your database to your project using JavaScript and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-node-mysql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-mysql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL, so you first need to switch the `provider` to `mysql`: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="mysql://johndoe:randompassword@localhost:3306/mydb" +``` + + + +We recommend adding `.env` to your `.gitignore` file to prevent committing your environment variables. + + + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database typically depends on the database you use. For MySQL, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running (typically `3306` for MySQL) +- `DATABASE`: The name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) + +As an example, for a MySQL database hosted on AWS RDS, the [connection URL](/orm/reference/connection-urls) might look similar to this: + +```bash file=.env +DATABASE_URL="mysql://johndoe:XXX@mysql–instance1.123456789012.us-east-1.rds.amazonaws.com:3306/mydb" +``` + +When running MySQL locally, your connection URL typically looks similar to this: + +```bash file=.env +DATABASE_URL="mysql://root:randompassword@localhost:3306/mydb" +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-planetscale.mdx new file mode 100644 index 0000000000..2bdd31ed54 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-planetscale.mdx @@ -0,0 +1,98 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using JavaScript and PlanetScale' +metaDescription: 'Connect your database to your project using JavaScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-node-planetscale +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-planetscale +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL as the `provider`. For PlanetScale, you need to edit the `datasource` block to use the `mysql` provider instead: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +You will also need to set the relation mode type to `prisma` in order to [emulate foreign key constraints](/orm/overview/databases/planetscale#option-1-emulate-relations-in-prisma-client) in the `datasource` block: + +```prisma file=schema.prisma highlight=4;add showLineNumbers +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + //add-next-line + relationMode = "prisma" +} +``` + +> **Note**: Since February 2024, you can alternatively [use foreign key constraints on a database-level in PlanetScale](/orm/overview/databases/planetscale#option-2-enable-foreign-key-constraints-in-the-planetscale-database-settings), which omits the need for setting `relationMode = "prisma"`. + +The `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="mysql://janedoe:mypassword@server.us-east-2.psdb.cloud/mydb?sslaccept=strict" +``` + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database typically depends on the database you use. PlanetScale uses the MySQL connection URL format, which has the following structure (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running (typically `3306` for MySQL) +- `DATABASE`: The name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) + +For a database hosted with PlanetScale, the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="mysql://myusername:mypassword@server.us-east-2.psdb.cloud/mydb?sslaccept=strict" +``` + +The connection URL for a given database branch can be found from your PlanetScale account by going to the overview page for the branch and selecting the 'Connect' dropdown. In the 'Passwords' section, generate a new password and select 'Prisma' to get the Prisma format for the connection URL. + +
+Alternative method: connecting using the PlanetScale CLI + +Alternatively, you can connect to your PlanetScale database server using the [PlanetScale CLI](https://planetscale.com/docs/concepts/planetscale-environment-setup), and use a local connection URL. In this case the connection URL will look like this: + +```bash file=.env +DATABASE_URL="mysql://root@localhost:PORT/mydb" +``` + + + +We recommend adding `.env` to your `.gitignore` file to prevent committing your environment variables. + + + +To connect to your branch, use the following command: + +```terminal +pscale connect prisma-test branchname --port PORT +``` + +The `--port` flag can be omitted if you are using the default port `3306`. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-postgresql.mdx new file mode 100644 index 0000000000..cb7bf42e14 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-postgresql.mdx @@ -0,0 +1,64 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using JavaScript and PostgreSQL' +metaDescription: 'Connect your database to your project using JavaScript and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-node-postgresql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-postgresql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public" +``` + + + +We recommend adding `.env` to your `.gitignore` file to prevent committing your environment variables. + + + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. For PostgreSQL, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `HOST`: The name of your host name (for the local environment, it is `localhost`) +- `PORT`: The port where your database server is running (typically `5432` for PostgreSQL) +- `DATABASE`: The name of the [database](https://www.postgresql.org/docs/12/manage-ag-overview.html) +- `SCHEMA`: The name of the [schema](https://www.postgresql.org/docs/12/ddl-schemas.html) inside the database + +If you're unsure what to provide for the `schema` parameter for a PostgreSQL connection URL, you can probably omit it. In that case, the default schema name `public` will be used. + +As an example, for a PostgreSQL database hosted on Heroku, the [connection URL](/orm/reference/connection-urls) might look similar to this: + +```bash file=.env +DATABASE_URL="postgresql://opnmyfngbknppm:XXX@ec2-46-137-91-216.eu-west-1.compute.amazonaws.com:5432/d50rgmkqi2ipus?schema=hello-prisma" +``` + +When running PostgreSQL locally on macOS, your user and password as well as the database name _typically_ correspond to the current _user_ of your OS, e.g. assuming the user is called `janedoe`: + +```bash file=.env +DATABASE_URL="postgresql://janedoe:janedoe@localhost:5432/janedoe?schema=hello-prisma" +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-sqlserver.mdx new file mode 100644 index 0000000000..5a32619510 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-node-sqlserver.mdx @@ -0,0 +1,39 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using JavaScript and SQL Server' +metaDescription: 'Connect your database to your project using JavaScript and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-node-sqlserver +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-sqlserver +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "sqlserver" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +The following example connection URL [uses SQL authentication](/orm/overview/databases/sql-server), but there are [other ways to format your connection URL](/orm/overview/databases/sql-server) + +```bash file=.env + DATABASE_URL="sqlserver://localhost:1433;database=mydb;user=sa;password=r@ndomP@$$w0rd;trustServerCertificate=true" +``` + + + +We recommend adding `.env` to your `.gitignore` file to prevent committing your environment variables. + + + +Adjust the connection URL to match your setup - see [Microsoft SQL Server connection URL](/orm/overview/databases/sql-server) for more information. + +> Make sure TCP/IP connections are enabled via [SQL Server Configuration Manager](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-configuration-manager?view=sql-server-ver16&viewFallbackFrom=sql-server-ver16) to avoid `No connection could be made because the target machine actively refused it. (os error 10061)` + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..1cc853a88d --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-cockroachdb.mdx @@ -0,0 +1,63 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using TypeScript and CockroachDB' +metaDescription: 'Connect your database to your project using TypeScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: 'hidden-sidebar tech-switch' +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL as the `provider`. For CockroachDB, you need to edit the `datasource` block to use the `cockroachdb` provider instead: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "cockroachdb" + url = env("DATABASE_URL") +} +``` + +The `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`. You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. CockroachDB uses the PostgreSQL connection URL format, which has the following structure (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?PARAMETERS +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running. The default for CockroachDB is `26257`. +- `DATABASE`: The name of the database +- `PARAMETERS`: Any additional connection parameters. See the CockroachDB documentation [here](https://www.cockroachlabs.com/docs/stable/connection-parameters.html#additional-connection-parameters). + +For a [CockroachDB Serverless](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart.html) or [Cockroach Dedicated](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart-trial-cluster) database hosted on [CockroachDB Cloud](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart/), the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="postgresql://:@..cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full&sslrootcert=$HOME/.postgresql/root.crt&options=--" +``` + +To find your connection string on CockroachDB Cloud, click the 'Connect' button on the overview page for your database cluster, and select the 'Connection string' tab. + +For a [CockroachDB database hosted locally](https://www.cockroachlabs.com/docs/stable/secure-a-cluster.html), the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="postgresql://root@localhost:26257?sslmode=disable" +``` + +Your connection string is displayed as part of the welcome text when starting CockroachDB from the command line. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-mysql.mdx new file mode 100644 index 0000000000..da1fbbfb8d --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-mysql.mdx @@ -0,0 +1,70 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using TypeScript and MySQL' +metaDescription: 'Connect your database to your project using TypeScript and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-mysql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-mysql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL, so you first need to switch the `provider` to `mysql`: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="mysql://johndoe:randompassword@localhost:3306/mydb" +``` + + + +We recommend adding `.env` to your `.gitignore` file to prevent committing your environment variables. + + + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database typically depends on the database you use. For MySQL, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running (typically `3306` for MySQL) +- `DATABASE`: The name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) + +As an example, for a MySQL database hosted on AWS RDS, the [connection URL](/orm/reference/connection-urls) might look similar to this: + +```bash file=.env +DATABASE_URL="mysql://johndoe:XXX@mysql–instance1.123456789012.us-east-1.rds.amazonaws.com:3306/mydb" +``` + +When running MySQL locally, your connection URL typically looks similar to this: + +```bash file=.env +DATABASE_URL="mysql://root:randompassword@localhost:3306/mydb" +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-planetscale.mdx new file mode 100644 index 0000000000..0ed6c3a10b --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-planetscale.mdx @@ -0,0 +1,98 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using TypeScript and PlanetScale' +metaDescription: 'Connect your database to your project using TypeScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-planetscale +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-planetscale +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL as the `provider`. For PlanetScale, you need to edit the `datasource` block to use the `mysql` provider instead: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +You will also need to set the relation mode type to `prisma` in order to [emulate foreign key constraints](/orm/overview/databases/planetscale#option-1-emulate-relations-in-prisma-client) in the `datasource` block: + +```prisma file=schema.prisma highlight=4;add showLineNumbers +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + //add-next-line + relationMode = "prisma" +} +``` + +> **Note**: Since February 2024, you can alternatively [use foreign key constraints on a database-level in PlanetScale](/orm/overview/databases/planetscale#option-2-enable-foreign-key-constraints-in-the-planetscale-database-settings), which omits the need for setting `relationMode = "prisma"`. + +The `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="mysql://janedoe:mypassword@server.us-east-2.psdb.cloud/mydb?sslaccept=strict" +``` + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database typically depends on the database you use. PlanetScale uses the MySQL connection URL format, which has the following structure (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running (typically `3306` for MySQL) +- `DATABASE`: The name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) + +For a database hosted with PlanetScale, the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="mysql://myusername:mypassword@server.us-east-2.psdb.cloud/mydb?sslaccept=strict" +``` + +The connection URL for a given database branch can be found from your PlanetScale account by going to the overview page for the branch and selecting the 'Connect' dropdown. In the 'Passwords' section, generate a new password and select 'Prisma' to get the Prisma format for the connection URL. + +
+Alternative method: connecting using the PlanetScale CLI + +Alternatively, you can connect to your PlanetScale database server using the [PlanetScale CLI](https://planetscale.com/docs/concepts/planetscale-environment-setup), and use a local connection URL. In this case the connection URL will look like this: + +```bash file=.env +DATABASE_URL="mysql://root@localhost:PORT/mydb" +``` + + + +We recommend adding `.env` to your `.gitignore` file to prevent committing your environment variables. + + + +To connect to your branch, use the following command: + +```terminal +pscale connect prisma-test branchname --port PORT +``` + +The `--port` flag can be omitted if you are using the default port `3306`. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-postgresql.mdx new file mode 100644 index 0000000000..32f6cf4efd --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-postgresql.mdx @@ -0,0 +1,63 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using TypeScript and PostgreSQL' +metaDescription: 'Connect your database to your project using TypeScript and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-postgresql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public" +``` + + + +We recommend adding `.env` to your `.gitignore` file to prevent committing your environment variables. + + + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. For PostgreSQL, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `HOST`: The name of your host name (for the local environment, it is `localhost`) +- `PORT`: The port where your database server is running (typically `5432` for PostgreSQL) +- `DATABASE`: The name of the [database](https://www.postgresql.org/docs/12/manage-ag-overview.html) +- `SCHEMA`: The name of the [schema](https://www.postgresql.org/docs/12/ddl-schemas.html) inside the database + +If you're unsure what to provide for the `schema` parameter for a PostgreSQL connection URL, you can probably omit it. In that case, the default schema name `public` will be used. + +As an example, for a PostgreSQL database hosted on Heroku, the [connection URL](/orm/reference/connection-urls) might look similar to this: + +```bash file=.env +DATABASE_URL="postgresql://opnmyfngbknppm:XXX@ec2-46-137-91-216.eu-west-1.compute.amazonaws.com:5432/d50rgmkqi2ipus?schema=hello-prisma" +``` + +When running PostgreSQL locally on macOS, your user and password as well as the database name _typically_ correspond to the current _user_ of your OS, e.g. assuming the user is called `janedoe`: + +```bash file=.env +DATABASE_URL="postgresql://janedoe:janedoe@localhost:5432/janedoe?schema=hello-prisma" +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-prismaPostgres.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-prismaPostgres.mdx new file mode 100644 index 0000000000..23df5d318e --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-prismaPostgres.mdx @@ -0,0 +1,52 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using TypeScript and Prisma Postgres' +metaDescription: 'Connect your database to your project using TypeScript and Prisma Postgres' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: 'hidden-sidebar tech-switch' +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-prismaPostgres +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-prismaPostgres +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +## Set up a Prisma Postgres database in the PDP Console + +Follow these steps to create your Prisma Postgres database: + +1. Log in to [PDP Console](https://console.prisma.io/). +1. In a [workspace](/platform/about#workspace) of your choice, click the **New project** button. +1. Type a name for your project in the **Name** field, e.g. **hello-ppg**. +1. In the **Prisma Postgres** section, click the **Get started** button. +1. In the **Region** dropdown, select the region that's closest to your current location, e.g. **US East (N. Virginia)**. +1. Click the **Create project** button. + +At this point, you'll be redirected to the **Dashboard** where you will need to wait for a few seconds while the status of your database changes from **`PROVISIONING`**, to **`ACTIVATING`** to **`CONNECTED`**. + +Once the green **`CONNECTED`** label appears, your database is ready to use. + +In the Console UI, you'll see a code snippet for a `.env` file with two environment variables defined. + +## Set environment variables in your local project + +Copy both environment variables from the Console UI and paste them into your `.env` file. Your `.env` file should look similar to this: + +```bash file=.env no-copy +DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=ey..." +PULSE_API_KEY="ey..." +``` + +> **Note**: The `api_key` in the `DATABASE_URL` should be identical to the `PULSE_API_KEY`. Don't worry too much about the `PULSE_API_KEY` yet, we'll explain later why you need that. + +By setting the `DATABASE_URL` in the `.env` file, you're ensuring that Prisma ORM can connect to your database. The `DATABASE_URL` is used in the `datasource` block in your Prisma schema: + +```prisma file=prisma/schema.prisma +datasource db { + provider = "postgresql" + // highlight-next-line + url = env("DATABASE_URL") +} +``` + +That's it! You can now start using the Prisma CLI to interact with your Prisma Postgres database. In the next section, you'll learn how to use the Prisma CLI to create and run migrations against your database to update its schema. \ No newline at end of file diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-sqlserver.mdx new file mode 100644 index 0000000000..3b9715f0a9 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/100-connect-your-database-typescript-sqlserver.mdx @@ -0,0 +1,40 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your database using TypeScript and SQL Server' +metaDescription: 'Connect your database to your project using TypeScript and SQL Server' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-sqlserver +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "sqlserver" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +The following example connection URL [uses SQL authentication](/orm/overview/databases/sql-server), but there are [other ways to format your connection URL](/orm/overview/databases/sql-server) + +```bash file=.env + DATABASE_URL="sqlserver://localhost:1433;database=mydb;user=sa;password=r@ndomP@$$w0rd;trustServerCertificate=true" +``` + + + +We recommend adding `.env` to your `.gitignore` file to prevent committing your environment variables. + + + +Adjust the connection URL to match your setup - see [Microsoft SQL Server connection URL](/orm/overview/databases/sql-server) for more information. + +> Make sure TCP/IP connections are enabled via [SQL Server Configuration Manager](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-configuration-manager?view=sql-server-ver16&viewFallbackFrom=sql-server-ver16) to avoid `No connection could be made because the target machine actively refused it. (os error 10061)` + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-cockroachdb.mdx new file mode 100644 index 0000000000..19a1b7d312 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-cockroachdb.mdx @@ -0,0 +1,61 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with JavaScript and CockroachDB' +metaDescription: 'Create database tables with Prisma Migrate using JavaScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-cockroachdb +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use [Prisma Migrate](/orm/prisma-migrate) to create the tables in your database. Add the following Prisma data model to your Prisma schema in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma copy showLineNumbers +model Post { + id BigInt @id @default(sequence()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId BigInt +} + +model Profile { + id BigInt @id @default(sequence()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId BigInt @unique +} + +model User { + id BigInt @id @default(sequence()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +To map your data model to the database schema, you need to use the `prisma migrate` CLI commands: + +```terminal +npx prisma migrate dev --name init +``` + +This command does two things: + +1. It creates a new SQL migration file for this migration +1. It runs the SQL migration file against the database + +:::note +`generate` is called under the hood by default, after running `prisma migrate dev`. If the `prisma-client-js` generator is defined in your schema, this will check if `@prisma/client` is installed and install it if it's missing. +::: + +Great, you now created three tables in your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-mysql.mdx new file mode 100644 index 0000000000..26ef1f6f08 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-mysql.mdx @@ -0,0 +1,60 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with JavaScript and MySQL' +metaDescription: 'Create database tables with Prisma Migrate using JavaScript and MySQL' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-mysql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-mysql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + + +In this guide, you'll use [Prisma Migrate](/orm/prisma-migrate) to create the tables in your database. Add the following Prisma data model to your Prisma schema in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma copy showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String @db.VarChar(255) + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +To map your data model to the database schema, you need to use the `prisma migrate` CLI commands: + +```terminal +npx prisma migrate dev --name init +``` + +This command does two things: + +1. It creates a new SQL migration file for this migration +1. It runs the SQL migration file against the database + +> **Note**: `generate` is called under the hood by default, after running `prisma migrate dev`. If the `prisma-client-js` generator is defined in your schema, this will check if `@prisma/client` is installed and install it if it's missing. + +Great, you now created three tables in your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-planetscale.mdx new file mode 100644 index 0000000000..2d731d4b6b --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-planetscale.mdx @@ -0,0 +1,58 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with JavaScript and PlanetScale' +metaDescription: 'Create database tables with Prisma Migrate using JavaScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-planetscale +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-planetscale +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use Prisma's [`db push` command](/orm/prisma-migrate/workflows/prototyping-your-schema) to create the tables in your database. Add the following Prisma data model to your Prisma schema in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma copy showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String @db.VarChar(255) + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int + + @@index(authorId) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique + + @@index(userId) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +You are now ready to push your new schema to your database. Connect to your `main` branch using the instructions in [Connect your database](/getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-planetscale). + +Now use the `db push` CLI command to push to the `main` branch: + +```terminal +npx prisma db push +``` + +Great, you now created three tables in your database with Prisma's `db push` command 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-postgresql.mdx new file mode 100644 index 0000000000..1c661a0bee --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-postgresql.mdx @@ -0,0 +1,61 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with JavaScript and PostgreSQL' +metaDescription: 'Create database tables with Prisma Migrate using JavaScript and PostgreSQL' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-postgresql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-postgresql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use [Prisma Migrate](/orm/prisma-migrate) to create the tables in your database. Add the following data model to your [Prisma schema](/orm/prisma-schema) in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String @db.VarChar(255) + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +To map your data model to the database schema, you need to use the `prisma migrate` CLI commands: + +```terminal +npx prisma migrate dev --name init +``` + +This command does two things: + +1. It creates a new SQL migration file for this migration +1. It runs the SQL migration file against the database + +:::note +`generate` is called under the hood by default, after running `prisma migrate dev`. If the `prisma-client-js` generator is defined in your schema, this will check if `@prisma/client` is installed and install it if it's missing. +::: + +Great, you now created three tables in your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-sqlserver.mdx new file mode 100644 index 0000000000..642c907fb6 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-node-sqlserver.mdx @@ -0,0 +1,59 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with JavaScript and SQL Server' +metaDescription: 'Create database tables with Prisma Migrate using JavaScript and SQL Server' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-node-sqlserver +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-sqlserver +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use [Prisma Migrate](/orm/prisma-migrate) to create the tables in your database. Add the following Prisma data model to your Prisma schema in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma copy showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String @db.VarChar(255) + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +To map your data model to the database schema, you need to use the `prisma migrate` CLI commands: + +```terminal +npx prisma migrate dev --name init +``` + +This command does two things: + +1. It creates a new SQL migration file for this migration +1. It runs the SQL migration file against the database + +> **Note**: `generate` is called under the hood by default, after running `prisma migrate dev`. If the `prisma-client-js` generator is defined in your schema, this will check if `@prisma/client` is installed and install it if it's missing. + +Great, you now created three tables in your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..c8f1bb5409 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-cockroachdb.mdx @@ -0,0 +1,61 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with TypeScript and CockroachDB' +metaDescription: 'Create database tables with Prisma Migrate using TypeScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use [Prisma Migrate](/orm/prisma-migrate) to create the tables in your database. Add the following Prisma data model to your Prisma schema in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma copy showLineNumbers +model Post { + id BigInt @id @default(sequence()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId BigInt +} + +model Profile { + id BigInt @id @default(sequence()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId BigInt @unique +} + +model User { + id BigInt @id @default(sequence()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +To map your data model to the database schema, you need to use the `prisma migrate` CLI commands: + +```terminal +npx prisma migrate dev --name init +``` + +This command does two things: + +1. It creates a new SQL migration file for this migration +1. It runs the SQL migration file against the database + +:::note +`generate` is called under the hood by default, after running `prisma migrate dev`. If the `prisma-client-js` generator is defined in your schema, this will check if `@prisma/client` is installed and install it if it's missing. +::: + +Great, you now created three tables in your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-mysql.mdx new file mode 100644 index 0000000000..05d7b56459 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-mysql.mdx @@ -0,0 +1,59 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with TypeScript and MySQL' +metaDescription: 'Create database tables with Prisma Migrate using TypeScript and MySQL' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-mysql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-mysql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use [Prisma Migrate](/orm/prisma-migrate) to create the tables in your database. Add the following Prisma data model to your Prisma schema in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma copy showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String @db.VarChar(255) + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +To map your data model to the database schema, you need to use the `prisma migrate` CLI commands: + +```terminal +npx prisma migrate dev --name init +``` + +This command does two things: + +1. It creates a new SQL migration file for this migration +1. It runs the SQL migration file against the database + +> **Note**: `generate` is called under the hood by default, after running `prisma migrate dev`. If the `prisma-client-js` generator is defined in your schema, this will check if `@prisma/client` is installed and install it if it's missing. + +Great, you now created three tables in your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-planetscale.mdx new file mode 100644 index 0000000000..a0a6f9ba3b --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-planetscale.mdx @@ -0,0 +1,58 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with TypeScript and PlanetScale' +metaDescription: 'Create database tables with Prisma Migrate using TypeScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-planetscale +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-planetscale +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use Prisma's [`db push` command](/orm/prisma-migrate/workflows/prototyping-your-schema) to create the tables in your database. Add the following Prisma data model to your Prisma schema in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma copy showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String @db.VarChar(255) + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int + + @@index(authorId) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique + + @@index(userId) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +You are now ready to push your new schema to your database. Connect to your `main` branch using the instructions in [Connect your database](/getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-planetscale). + +Now use the `db push` CLI command to push to the `main` branch: + +```terminal +npx prisma db push +``` + +Great, you now created three tables in your database with Prisma's `db push` command 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-postgresql.mdx new file mode 100644 index 0000000000..b28f6d5c51 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-postgresql.mdx @@ -0,0 +1,60 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with TypeScript and PostgreSQL' +metaDescription: 'Create database tables with Prisma Migrate using TypeScript and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-postgresql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use [Prisma Migrate](/orm/prisma-migrate) to create the tables in your database. Add the following data model to your [Prisma schema](/orm/prisma-schema) in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String @db.VarChar(255) + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +To map your data model to the database schema, you need to use the `prisma migrate` CLI commands: + +```terminal +npx prisma migrate dev --name init +``` + +This command does two things: + +1. It creates a new SQL migration file for this migration +1. It runs the SQL migration file against the database + +:::note +`generate` is called under the hood by default, after running `prisma migrate dev`. If the `prisma-client-js` generator is defined in your schema, this will check if `@prisma/client` is installed and install it if it's missing. +::: + +Great, you now created three tables in your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-prismaPostgres.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-prismaPostgres.mdx new file mode 100644 index 0000000000..468b239c5a --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-prismaPostgres.mdx @@ -0,0 +1,82 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with TypeScript and Prisma Postgres' +metaDescription: 'Create database tables with Prisma Migrate using TypeScript and Prisma Postgres' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-prismaPostgres +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-prismaPostgres +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use [Prisma Migrate](/orm/prisma-migrate) to create the tables in your database. + +To do so, first add the following Prisma data model to your Prisma schema in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma copy +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +This data model defines three [models](/orm/prisma-schema/data-model/models) (which will be mapped to _tables_ in the underlying database): +- `Post` +- `Profile` +- `User` + +It also defines two [relations](/orm/prisma-schema/data-model/relations): +- A one-to-many relation between `User` and `Post` (i.e. "_one_ user can have _many_ posts") +- A one-to-one relation between `User` and `Profile` (i.e. "_one_ user can have _one_ profile") + +To map your data model to the database schema, you need to use the `prisma migrate` CLI commands: + +```terminal +npx prisma migrate dev --name init +``` + +This command did two things: + +1. It generated a new SQL migration file for this migration +1. It ran the SQL migration file against the database + +You can inspect the generated SQL migration file in the newly created `prisma/migrations` directory. + +:::tip Explore your database in Prisma Studio + +[Prisma Studio](/orm/tools/prisma-studio) is a visual editor for your database. You can open it with the following command in your terminal: + +``` +npx prisma studio +``` + +Since you just created the database, you won't see any records but you can take a look at the empty `User`, `Post` and `Profile` tables. + +::: + +Great, you now created three tables in your database with Prisma Migrate. In the next section, you'll learn how to install Prisma Client which lets you send queries to your database from your TypeScript app. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-sqlserver.mdx new file mode 100644 index 0000000000..997425ebe7 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/150-using-prisma-migrate-typescript-sqlserver.mdx @@ -0,0 +1,59 @@ +--- +title: 'Using Prisma Migrate' +metaTitle: 'Using Prisma Migrate with TypeScript and SQL Server' +metaDescription: 'Create database tables with Prisma Migrate using TypeScript and SQL Server' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-sqlserver +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate- +--- + +## Creating the database schema + +In this guide, you'll use [Prisma Migrate](/orm/prisma-migrate) to create the tables in your database. Add the following Prisma data model to your Prisma schema in `prisma/schema.prisma`: + +```prisma file=prisma/schema.prisma copy showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String @db.VarChar(255) + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +To map your data model to the database schema, you need to use the `prisma migrate` CLI commands: + +```terminal +npx prisma migrate dev --name init +``` + +This command does two things: + +1. It creates a new SQL migration file for this migration +1. It runs the SQL migration file against the database + +> **Note**: `generate` is called under the hood by default, after running `prisma migrate dev`. If the `prisma-client-js` generator is defined in your schema, this will check if `@prisma/client` is installed and install it if it's missing. + +Great, you now created three tables in your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-cockroachdb.mdx new file mode 100644 index 0000000000..6c403e45ae --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-cockroachdb.mdx @@ -0,0 +1,26 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: JavaScript and CockroachDB' +metaDescription: 'Install and generate Prisma Client in your project using JavaScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-cockroachdb +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-mysql.mdx new file mode 100644 index 0000000000..e4f96a707f --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-mysql.mdx @@ -0,0 +1,27 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: JavaScript and MySQL' +metaDescription: 'Install and generate Prisma Client in your project using JavaScript and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-mysql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-node-mysql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-planetscale.mdx new file mode 100644 index 0000000000..c97ee9c749 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-planetscale.mdx @@ -0,0 +1,29 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: JavaScript and PlanetScale ' +metaDescription: 'Install and generate Prisma Client in your project using JavaScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-planetscale +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-node-planetscale +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-postgresql.mdx new file mode 100644 index 0000000000..6c12be66d5 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-postgresql.mdx @@ -0,0 +1,27 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: JavaScript and PostgreSQL' +metaDescription: 'Install and generate Prisma Client in your project using JavaScript and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-postgresql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-node-postgresql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-sqlserver.mdx new file mode 100644 index 0000000000..79298c97e6 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-node-sqlserver.mdx @@ -0,0 +1,27 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: JavaScript and SQL Server' +metaDescription: 'Install and generate Prisma Client in your project using JavaScript and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-sqlserver +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-node-sqlserver +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..4229c38144 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-cockroachdb.mdx @@ -0,0 +1,27 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: TypeScript and CockroachDB' +metaDescription: 'Install and generate Prisma Client in your project using TypeScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-mysql.mdx new file mode 100644 index 0000000000..e52180df1d --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-mysql.mdx @@ -0,0 +1,28 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: TypeScript and MySQL' +metaDescription: 'Install and generate Prisma Client in your project using TypeScript and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-mysql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-typescript-mysql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-planetscale.mdx new file mode 100644 index 0000000000..d6e156fbe0 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-planetscale.mdx @@ -0,0 +1,27 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: TypeScript and PlanetScale' +metaDescription: 'Install and generate Prisma Client in your project using TypeScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-planetscale +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-typescript-planetscale +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-postgresql.mdx new file mode 100644 index 0000000000..64cbb55d0c --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-postgresql.mdx @@ -0,0 +1,41 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: TypeScript and PostgreSQL' +metaDescription: 'Install and generate Prisma Client in your project using TypeScript and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-postgresql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your prisma schema , you will have to update your database schema using either commands +`npx prisma db push` and `npx prisma migrate dev` serve different purposes in managing your database schema with Prisma. Here’s a breakdown of when and why to use each: + +#### `npx prisma migrate dev` + +- **Purpose:** This command generates and applies a new migration based on your Prisma schema changes. It creates migration files that keep a history of changes. +- **Use Case:** Use this when you want to maintain a record of database changes, which is essential for production environments or when working in teams. It allows for version control of your database schema. +- **Benefits:** This command also includes checks for applying migrations in a controlled manner, ensuring data integrity. + + +#### `npx prisma db push` + +- **Purpose:** This command is used to push your current Prisma schema to the database directly. It applies any changes you've made to your schema without creating migration files. +- **Use Case:** It’s particularly useful during the development phase when you want to quickly sync your database schema with your Prisma schema without worrying about migration history. +- **Caution:** It can overwrite data if your schema changes affect existing tables or columns, so it’s best for early-stage development or prototyping. + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-prismaPostgres.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-prismaPostgres.mdx new file mode 100644 index 0000000000..6762917d50 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-prismaPostgres.mdx @@ -0,0 +1,50 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: TypeScript and Prisma Postgres' +metaDescription: 'Install and generate Prisma Client in your project using TypeScript and Prisma Postgres' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-prismaPostgres +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-typescript-prismaPostgres +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +You can now import the `PrismaClient` constructor from the `@prisma/client` package to create an instance of Prisma Client to send queries to your database. You'll learn how to do that in the next section. + +:::note Good to know + +The [`@prisma/client` npm package](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) that was created in your `node_modules` is a _special_ library compared to other npm libraries. + +Usually, the code of an npm package is downloaded in your project from the [npm](https://www.npmjs.com/) registry and is only updated when you explicitly call `npm install` again. The `@prisma/client` npm package is different! + +It contains code (TypeScript types, methods, queries, ...) that is tailored to _your_ Prisma schema file in `prisma/schema.prisma`. This means, that whenever you make changes to your Prisma schema file, you also need to update the `@prisma/client` folder inside `node_modules`. + +However, instead of doing this using an `npm install` as with other npm packages, you can do this by running the `prisma generate` command, which reads your Prisma schema and generates a version of Prisma Client that is tailored to your models: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. + +::: + +## Install the Prisma Accelerate extension + +Since Prisma Postgres provides a connection pool and (optional) caching layer with Prisma Accelerate, you need to install the Accelerate [Client extension](/orm/prisma-client/client-extensions) in your project as well: + +``` +npm install @prisma/extension-accelerate +``` + +With that you're all set to read and write data in your database. Move on to the next page to start querying your Prisma Postgres database using Prisma Client. + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-sqlserver.mdx new file mode 100644 index 0000000000..2d2b62e8b0 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/200-install-prisma-client-typescript-sqlserver.mdx @@ -0,0 +1,27 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: TypeScript and SQL Server' +metaDescription: 'Install and generate Prisma Client in your project using TypeScript and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-sqlserver +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client- +--- + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will have to update your database schema using either `prisma migrate dev` or `prisma db push`. This will keep your database schema in sync with your Prisma schema. The commands will also regenerate Prisma Client. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-cockroachdb.mdx new file mode 100644 index 0000000000..eec49af52f --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-cockroachdb.mdx @@ -0,0 +1,204 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using JavaScript and CockroachDB' +metaDescription: 'Write data to and query the database using JavaScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-cockroachdb +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js copy showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```js file=index.js highlight=2;delete|3,4;add showLineNumbers +async function main() { + //delete-next-line + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-mysql.mdx new file mode 100644 index 0000000000..e2c0d6ac55 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-mysql.mdx @@ -0,0 +1,204 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using JavaScript and MySQL' +metaDescription: 'Write data to and query the database using JavaScript and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-mysql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js copy showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```js file=index.js highlight=2;delete|3,4; showLineNumbers +async function main() { + //delete-next-line + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-planetscale.mdx new file mode 100644 index 0000000000..499a2f6aa6 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-planetscale.mdx @@ -0,0 +1,205 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using JavaScript and PlanetScale' +metaDescription: 'Write data to and query the database using JavaScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-planetscale +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js copy showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```js file=index.js highlight=2;delete|3,4;add showLineNumbers +async function main() { + //delete-next-line + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + + +```js file=index.js copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-postgresql.mdx new file mode 100644 index 0000000000..dbc7b52e2f --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-postgresql.mdx @@ -0,0 +1,205 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using JavaScript and PostgreSQL' +metaDescription: 'Write data to and query the database using JavaScript and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-postgresql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js copy showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + + +```js file=index.js highlight=2;delete|3,4;add showLineNumbers +async function main() { + //delete-next-line + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-sqlserver.mdx new file mode 100644 index 0000000000..bbb75af5f6 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-node-sqlserver.mdx @@ -0,0 +1,204 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using JavaScript and SQL Server' +metaDescription: 'Write data to and query the database using JavaScript and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-node-sqlserver +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js copy showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```js file=index.js highlight=2;delete|3,4;add showLineNumbers +async function main() { + //delete-next-line + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..70174caaf7 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-cockroachdb.mdx @@ -0,0 +1,219 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using TypeScript and CockroachDB' +metaDescription: 'Write data to and query the database using TypeScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.ts` and add the following code to it: + +```js file=index.ts copy showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts highlight=3,4;add showLineNumbers +async function main() { + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +Also note that `allUsers` is _statically typed_ thanks to [Prisma Client's generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types). You can observe the type by hovering over the `allUsers` variable in your editor. It should be typed as follows: + +```ts no-lines +const allUsers: (User & { + posts: Post[] +})[] + +export type Post = { + id: number + title: string + content: string | null + published: boolean + authorId: number | null +} +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +npx tsx index.ts +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-mysql.mdx new file mode 100644 index 0000000000..ff42c929be --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-mysql.mdx @@ -0,0 +1,219 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using TypeScript and MySQL' +metaDescription: 'Write data to and query the database using TypeScript and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-mysql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.ts` and add the following code to it: + +```js file=index.ts copy showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts highlight=3,4;add showLineNumbers +async function main() { + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +Also note that `allUsers` is _statically typed_ thanks to [Prisma Client's generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types). You can observe the type by hovering over the `allUsers` variable in your editor. It should be typed as follows: + +```ts no-lines +const allUsers: (User & { + posts: Post[] +})[] + +export type Post = { + id: number + title: string + content: string | null + published: boolean + authorId: number | null +} +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +npx tsx index.ts +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-planetscale.mdx new file mode 100644 index 0000000000..38e4b1e879 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-planetscale.mdx @@ -0,0 +1,220 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using TypeScript and PlanetScale' +metaDescription: 'Write data to and query the database using TypeScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-planetscale +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.ts` and add the following code to it: + +```js file=index.ts copy showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts highlight=3,4;add showLineNumbers +async function main() { + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +Also note that `allUsers` is _statically typed_ thanks to [Prisma Client's generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types). You can observe the type by hovering over the `allUsers` variable in your editor. It should be typed as follows: + +```ts no-lines +const allUsers: (User & { + posts: Post[] +})[] + +export type Post = { + id: number + title: string + content: string | null + published: boolean + authorId: number | null +} +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +npx tsx index.ts +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-postgresql.mdx new file mode 100644 index 0000000000..0e283fc144 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-postgresql.mdx @@ -0,0 +1,218 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using TypeScript and PostgreSQL' +metaDescription: 'Write data to and query the database using TypeScript and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-postgresql +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.ts` and add the following code to it: + +```js file=index.ts copy showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts highlight=3,4;add showLineNumbers +async function main() { + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +Also note that `allUsers` is _statically typed_ thanks to [Prisma Client's generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types). You can observe the type by hovering over the `allUsers` variable in your editor. It should be typed as follows: + +```ts no-lines +const allUsers: (User & { + posts: Post[] +})[] + +export type Post = { + id: number + title: string + content: string | null + published: boolean + authorId: number | null +} +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +npx tsx index.ts +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-prismaPostgres.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-prismaPostgres.mdx new file mode 100644 index 0000000000..6981cedf72 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-prismaPostgres.mdx @@ -0,0 +1,377 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using TypeScript and Prisma Postgres' +metaDescription: 'Write data to and query the database using TypeScript and Prisma Postgres' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-prismaPostgres +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain TypeScript script to explore some basic features of Prisma Client. + +Create a new file named `queries.ts` and add the following code to it: + +```js file=queries.ts copy +// 1 +import { PrismaClient } from '@prisma/client' +import { withAccelerate } from '@prisma/extension-accelerate' + +// 2 +const prisma = new PrismaClient() + .$extends(withAccelerate()) + +// 3 +async function main() { + // ... you will write your Prisma Client queries here +} + +// 4 +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + // 5 + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor and the `withAccelerate` extension. +1. Instantiate `PrismaClient` and add the Accelerate extension. +1. Define an `async` function named `main` to send queries to the database. +1. Call the `main` function. +1. Close the database connections when the script terminates. + +Inside the `main` function, add the following query to read all `User` records from the database and log the result: + +```ts file=queries.ts +async function main() { + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +npx tsx queries.ts +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). + +In this section, you'll learn how to write a query to _write_ new records into the `Post`, `User` and `Profile` tables all at once. + +Adjust the `main` function by removing the code from before and adding the following: + +```ts file=queries.ts highlight=2-21;add copy +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. + +The records are connected via the [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) that you defined in your Prisma schema. + +Notice that you're also passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +npx tsx queries.ts +``` + +The output should look similar to this: + +```js no-copy showLineNumbers +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +Also note that the `allUsers` variable is _statically typed_ thanks to [Prisma Client's generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types). You can observe the type by hovering over the `allUsers` variable in your editor. It should be typed as follows: + +```ts no-copy showLineNumbers +const allUsers: ({ + posts: { + id: number; + createdAt: Date; + updatedAt: Date; + title: string; + content: string | null; + published: boolean; + authorId: number; + }[]; + profile: { + id: number; + bio: string | null; + userId: number; + } | null; +} & { + ...; +})[] +``` + +
+Expand for a visual view of the records that have been created + + +The query added new records to the `User`, `Post`, and `Profile` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +
+ +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=queries.ts copy +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +npx tsx queries.ts +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 + +## Receive real-time updates when data changes in the database + +Because Prisma Postgres comes with [Prisma Pulse](/pulse) by default, you can easily stream any changes that are happening in your database into your application by simply using your existing `PrismaClient` instance. Let's see how it works! + +First, install the Pulse Client extension in your project: + +```terminal +npm install @prisma/extension-pulse +``` + +Next, create a new file called `realtime.ts` and add the following code to it: + +```ts file=realtime.ts +// 1 +import { PrismaClient } from '@prisma/client'; +import { withPulse } from '@prisma/extension-pulse'; + +// 2 +const apiKey: string = process.env.PULSE_API_KEY ?? ''; +if (!apiKey || apiKey === "") { + console.log(`Please set the \`PULSE_API_KEY\` environment variable in the \`.env\` file.`); + process.exit(1); +} + +// 3 +const prisma = new PrismaClient().$extends( + withPulse({ apiKey: apiKey }) +); + + +async function main() { + + // 4 + const stream = await prisma.user.stream(); + + process.on('exit', () => { + stream.stop(); + }); + + // 5 + console.log(`Waiting for an event on the \`User\` table ... `); + for await (const event of stream) { + console.log('Received an event:', event); + } +} + +main() + .then(async () => { + await prisma.$disconnect(); + }) + .catch(async (e) => { + console.error(e); + await prisma.$disconnect(); + process.exit(1); + }); +``` + +There's a bunch of things happening here, let's take a closer look: + +1. Import the `PrismaClient` constructor and the `withPulse` extension. +1. Read the `PULSE_API_KEY` environmen variable (which is configured in the `.env` file). +1. Instantiate `PrismaClient` and add the Pulse extension (with the Pulse API key). +1. Create a _stream_ to capture any [write-evens](/pulse/database-events) on the `User` table. +1. Start an async iterator that waits for new events and will log them to your terminal. + +Start the script with the following command: + +```terminal +npx tsx realtime.ts +``` + +You should see the following output: + +```terminal no-copy +Waiting for an event on the `User` table ... +``` + +In the same terminal, you'll now see new output being logged whenever: +- a new `User` record is created +- an existing `User` record is updated +- an existing `User` record is deleted + +To trigger one of these events, you can use [Prisma Studio](/orm/tools/prisma-studio). Go ahead and open it (in a new terminal tab or window) using this command: + +```terminal +npx prisma studio +``` + +If you create a new `User` record in the visual editor, you should see output similar to this in previous terminal tab/window: + +```terminal no-copy +Received an event: { + action: 'create', + created: { id: @, email: 'bob@prisma.io', name: 'Bob' }, + id: '01JAFNSZHQRDTW773BCAA9G7FJ' +} +``` + +These change events will also be triggered when you write to the database using Prisma Client. For example, you could update your `queries.ts` file with the following `update` query to rename the user from `"Alice"` to `"Alicia"`: + +```ts file=queries.ts +async function main() { + //add-start + await prisma.user.update({ + where: { + id: 1 + }, + data: { + name: 'Alicia', + email: 'alicia@prisma.io', + } + }); + //add-end +} +``` + +Then you can run the script using the command from before (in a new terminal tab or window): + +```terminal +npx tsx queries.ts +``` + +You should now see output similar to this in previous terminal tab/window: + +```terminal no-copy +{ + action: 'update', + after: { id: 1, email: 'alicia@prisma.io', name: 'Alicia' }, + before: null, + id: '0/2A5A248' +} +``` + +Congratulations! You've now learned how to query a Prisma Postgres database with Prisma Client and how to receive real-time events in your application. If you got lost along the way, want to learn about more queries or explore the caching feature of Prisma Accelerate, check out the comprehensive [Prisma starter template](https://github.com/prisma/prisma-examples/tree/latest/databases/prisma-postgres). \ No newline at end of file diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-sqlserver.mdx new file mode 100644 index 0000000000..b0db613921 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/250-querying-the-database-typescript-sqlserver.mdx @@ -0,0 +1,221 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database using TypeScript and SQL Server' +metaDescription: 'Write data to and query the database using TypeScript and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/relational-databases/install-prisma-client-typescript-sqlserver +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated [Prisma Client](/orm/prisma-client), you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.ts` and add the following code to it: + +```js file=index.ts copy showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts highlight=3,4;add showLineNumbers +async function main() { + // ... you will write your Prisma Client queries here + //add-start + const allUsers = await prisma.user.findMany() + console.log(allUsers) + //add-end +} +``` + +Now run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +The output should look similar to this: + +```js no-lines +[ + { + email: 'alice@prisma.io', + id: 1, + name: 'Alice', + posts: [ + { + content: null, + createdAt: 2020-03-21T16:45:01.246Z, + updatedAt: 2020-03-21T16:45:01.246Z, + id: 1, + published: false, + title: 'Hello World', + authorId: 1, + } + ], + profile: { + bio: 'I like turtles', + id: 1, + userId: 1, + } + } +] +``` + +Also note that `allUsers` is _statically typed_ thanks to [Prisma Client's generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types). You can observe the type by hovering over the `allUsers` variable in your editor. It should be typed as follows: + +```ts no-lines +const allUsers: (User & { + posts: Post[] +})[] + +export type Post = { + id: number + title: string + content: string | null + published: boolean + authorId: number | null +} +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :----- | :------------------ | :-------- | +| `1` | `"alice@prisma.io"` | `"Alice"` | + +**Post** + +| **id** | **createdAt** | **updatedAt** | **title** | **content** | **published** | **authorId** | +| :----- | :------------------------- | :------------------------: | :-------------- | :---------- | :------------ | :----------- | +| `1` | `2020-03-21T16:45:01.246Z` | `2020-03-21T16:45:01.246Z` | `"Hello World"` | `null` | `false` | `1` | + +**Profile** + +| **id** | **bio** | **userId** | +| :----- | :----------------- | :--------- | +| `1` | `"I like turtles"` | `1` | + +> **Note**: The numbers in the `authorId` column on `Post` and `userId` column on `Profile` both reference the `id` column of the `User` table, meaning the `id` value `1` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts copy showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +npx tsx index.ts +``` + +You will see the following output: + +```js no-lines +{ + id: 1, + title: 'Hello World', + content: null, + published: true, + authorId: 1 +} +``` + +The `Post` record with an `id` of `1` now got updated in the database: + +**Post** + +| **id** | **title** | **content** | **published** | **authorId** | +| :----- | :-------------- | :---------- | :------------ | :----------- | +| `1` | `"Hello World"` | `null` | `true` | `1` | + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 + + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/300-next-steps.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/300-next-steps.mdx new file mode 100644 index 0000000000..9e79b9532b --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/110-relational-databases/300-next-steps.mdx @@ -0,0 +1,99 @@ +--- +title: 'Next steps' +metaTitle: 'Next steps after setting up Prisma ORM with your relational database' +metaDescription: 'Next steps to take now that you have successfully added Prisma ORM to your new TypeScript or JavaScript project' +hide_table_of_contents: true +--- + +This section lists a number of potential next steps you can now take from here. Feel free to explore these or read the [Introduction](/orm/overview/introduction/what-is-prisma) page to get a high-level overview of Prisma ORM. + +### Continue exploring the Prisma Client API + +You can send a variety of queries with the Prisma Client API. Check out the [API reference](/orm/prisma-client) and use your existing database setup from this guide to try them out. + +:::tip + +You can use your editor's auto-completion feature to learn about the different API calls and the arguments it takes. Auto-completion is commonly invoked by hitting CTRL+SPACE on your keyboard. + +::: + +
+Expand for more Prisma Client API examples + +Here are a few suggestions for a number of more queries you can send with Prisma Client: + +**Filter all `Post` records that contain `"hello"`** + +```js +const filteredPosts = await prisma.post.findMany({ + where: { + OR: [{ title: { contains: 'hello' } }, { content: { contains: 'hello' } }], + }, +}) +``` + +**Create a new `Post` record and connect it to an existing `User` record** + +```js +const post = await prisma.post.create({ + data: { + title: 'Join us for Prisma Day 2020', + author: { + connect: { email: 'alice@prisma.io' }, + }, + }, +}) +``` + +**Use the fluent relations API to retrieve the `Post` records of a `User` by traversing the relations** + +```js +const posts = await prisma.profile + .findUnique({ + where: { id: 1 }, + }) + .user() + .posts() +``` + +**Delete a `User` record** + +```js +const deletedUser = await prisma.user.delete({ + where: { email: 'sarah@prisma.io' }, +}) +``` + +
+ +### Build an app with Prisma ORM + +The Prisma blog features comprehensive tutorials about Prisma ORM, check out our latest ones: + +- [Build a fullstack app with Next.js](https://www.youtube.com/watch?v=QXxy8Uv1LnQ&ab_channel=ByteGrad) +- [Build a fullstack app with Remix](https://www.prisma.io/blog/fullstack-remix-prisma-mongodb-1-7D0BfTXBmB6r) (5 parts, including videos) +- [Build a REST API with NestJS](https://www.prisma.io/blog/nestjs-prisma-rest-api-7D056s1BmOL0) + +### Explore the data in Prisma Studio + +Prisma Studio is a visual editor for the data in your database. Run `npx prisma studio` in your terminal. + +If you are using [Prisma Postgres](https://www.prisma.io/postgres), you can also directly use Prisma Studio inside the [Console](https://console.prisma.io) by selecting the **Studio** tab in your project. + +### Get query insights and analytics with Prisma Optimize + +[Prisma Optimize](/optimize) helps you generate insights and provides recommendations that can help you make your database queries faster. [Try it out now!](/optimize/getting-started) + +Optimize aims to help developers of all skill levels write efficient database queries, reducing database load and making applications more responsive. + +### Try a Prisma ORM example + +The [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository contains a number of ready-to-run examples: + +| Demo | Stack | Description | +| :------------------------------------------------------------------------------------------------------------------ | :----------- | --------------------------------------------------------------------------------------------------- | +| [`nextjs-api-routes`](https://pris.ly/e/ts/rest-nextjs-api-routes) | Fullstack | Simple [Next.js](https://nextjs.org/) app (React) with a REST API | +| [`nextjs-graphql`](https://pris.ly/e/ts/graphql-nextjs) | Fullstack | Simple [Next.js](https://nextjs.org/) app (React) with a GraphQL API | +| [`graphql-nexus`](https://pris.ly/e/ts/graphql-nexus) | Backend only | GraphQL server based on [`@apollo/server`](https://www.apollographql.com/docs/apollo-server) | +| [`express`](https://pris.ly/e/ts/rest-express) | Backend only | Simple REST API with Express.JS | +| [`grpc`](https://pris.ly/e/ts/grpc) | Backend only | Simple gRPC API | diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb-node-mongodb.mdx new file mode 100644 index 0000000000..7733b53100 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb-node-mongodb.mdx @@ -0,0 +1,66 @@ +--- +title: 'MongoDB' +metaTitle: 'Start from scratch with Prisma ORM using MongoDB and JavaScript (15 min)' +metaDescription: 'Learn how to create a new Node.js project from scratch by connecting Prisma ORM to your MongoDB database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/connect-your-database-node-mongodb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb- +--- + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your MongoDB database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli) and [Prisma Client](/orm/prisma-client). + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- Access to a MongoDB 4.2+ server with a replica set deployment. We recommend using [MongoDB Atlas](https://www.mongodb.com/cloud/atlas). + + + + The MongoDB database connector uses transactions to support nested writes. Transactions **require** a [replica set](https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/) deployment. The easiest way to deploy a replica set is with [Atlas](https://www.mongodb.com/docs/atlas/getting-started/). It's free to get started. + + + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a Node.js project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma --save-dev +``` + +This creates a `package.json` with an initial setup for a Node.js app. + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb-typescript-mongodb.mdx new file mode 100644 index 0000000000..c6a8250f6f --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb-typescript-mongodb.mdx @@ -0,0 +1,71 @@ +--- +title: 'MongoDB' +metaTitle: 'Start from scratch with Prisma ORM using MongoDB and TypeScript (15 min)' +metaDescription: 'Learn how to create a new TypeScript project from scratch by connecting Prisma ORM to your MongoDB database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +sidebar_custom_props: { badge: '15 min' } +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/connect-your-database-typescript-mongodb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb- +--- + +Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your MongoDB database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli) and [Prisma Client](/orm/prisma-client). + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- Access to a MongoDB 4.2+ server with a replica set deployment. We recommend using [MongoDB Atlas](https://www.mongodb.com/cloud/atlas). + + + + The MongoDB database connector uses transactions to support nested writes. Transactions **require** a [replica set](https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/) deployment. The easiest way to deploy a replica set is with [Atlas](https://www.mongodb.com/docs/atlas/getting-started/). It's free to get started. + + + +Make sure you have your database [connection URL](/orm/reference/connection-urls) at hand. If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +## Create project setup + +As a first step, create a project directory and navigate into it: + +```terminal copy +mkdir hello-prisma +cd hello-prisma +``` + +Next, initialize a TypeScript project and add the Prisma CLI as a development dependency to it: + +```terminal copy +npm init -y +npm install prisma typescript tsx @types/node --save-dev +``` + +This creates a `package.json` with an initial setup for your TypeScript app. + +Next, initialize TypeScript: + +```terminal copy +npx tsc --init +``` + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema) file with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/100-connect-your-database-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/100-connect-your-database-node-mongodb.mdx new file mode 100644 index 0000000000..f81c48a5eb --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/100-connect-your-database-node-mongodb.mdx @@ -0,0 +1,54 @@ +--- +title: 'Connect your database (MongoDB)' +metaTitle: 'Connect your database using JavaScript and MongoDB' +metaDescription: 'Connect your database to your project using JavaScript and MongoDB' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +toc: false +pagination_prev: getting-started/setup-prisma/start-from-scratch/mongodb-node-mongodb +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/creating-the-prisma-schema-node-mongodb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env` (the example uses a [MongoDB Atlas](https://www.mongodb.com/cloud/atlas) URL): + +```bash file=.env showLineNumbers +DATABASE_URL="mongodb+srv://test:test@cluster0.ns1yp.mongodb.net/myFirstDatabase" +``` + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. For MongoDB, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mongodb://USERNAME:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USERNAME`: The name of your database user +- `PASSWORD`: The password for your database user +- `HOST`: The host where a [`mongod`](https://www.mongodb.com/docs/manual/reference/program/mongod/#mongodb-binary-bin.mongod) (or [`mongos`](https://www.mongodb.com/docs/manual/reference/program/mongos/#mongodb-binary-bin.mongos)) instance is running +- `PORT`: The port where your database server is running (typically `27017` for MongoDB) +- `DATABASE`: The name of the database. Note that if you're using MongoDB Atlas, you need to manually append the database name to the connection URL because the environment link from MongoDB Atlas doesn't contain it. + +## Troubleshooting + +### `Error in connector: SCRAM failure: Authentication failed.` + +If you see the `Error in connector: SCRAM failure: Authentication failed.` error message, you can specify the source database for the authentication by [adding](https://github.com/prisma/prisma/discussions/9994#discussioncomment-1562283) `?authSource=admin` to the end of the connection string. + +### `Raw query failed. Error code 8000 (AtlasError): empty database name not allowed.` + +If you see the `Raw query failed. Code: unknown. Message: Kind: Command failed: Error code 8000 (AtlasError): empty database name not allowed.` error message, be sure to append the database name to the database URL. You can find more info in this [GitHub issue](https://github.com/prisma/docs/issues/5562). \ No newline at end of file diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/100-connect-your-database-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/100-connect-your-database-typescript-mongodb.mdx new file mode 100644 index 0000000000..1cce107ce9 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/100-connect-your-database-typescript-mongodb.mdx @@ -0,0 +1,52 @@ +--- +title: 'Connect your database (MongoDB)' +metaTitle: 'Connect your database using TypeScript and MongoDB' +metaDescription: 'Connect your database to your project using TypeScript and MongoDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/mongodb-typescript-mongodb +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/creating-the-prisma-schema-typescript-mongodb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env` (the example uses a [MongoDB Atlas](https://www.mongodb.com/cloud/atlas) URL): + +```bash file=.env showLineNumbers +DATABASE_URL="mongodb+srv://test:test@cluster0.ns1yp.mongodb.net/myFirstDatabase" +``` + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. For MongoDB, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mongodb://USERNAME:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USERNAME`: The name of your database user +- `PASSWORD`: The password for your database user +- `HOST`: The host where a [`mongod`](https://www.mongodb.com/docs/manual/reference/program/mongod/#mongodb-binary-bin.mongod) (or [`mongos`](https://www.mongodb.com/docs/manual/reference/program/mongos/#mongodb-binary-bin.mongos)) instance is running +- `PORT`: The port where your database server is running (typically `27017` for MongoDB) +- `DATABASE`: The name of the database. Note that if you're using MongoDB Atlas, you need to manually append the database name to the connection URL because the environment link from MongoDB Atlas doesn't contain it. + +## Troubleshooting + +### `Error in connector: SCRAM failure: Authentication failed.` + +If you see the `Error in connector: SCRAM failure: Authentication failed.` error message, you can specify the source database for the authentication by [adding](https://github.com/prisma/prisma/discussions/9994#discussioncomment-1562283) `?authSource=admin` to the end of the connection string. + +### `Raw query failed. Error code 8000 (AtlasError): empty database name not allowed.` + +If you see the `Raw query failed. Code: unknown. Message: Kind: Command failed: Error code 8000 (AtlasError): empty database name not allowed.` error message, be sure to append the database name to the database URL. You can find more info in this [GitHub issue](https://github.com/prisma/docs/issues/5562). \ No newline at end of file diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/125-creating-the-prisma-schema-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/125-creating-the-prisma-schema-node-mongodb.mdx new file mode 100644 index 0000000000..0926082f09 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/125-creating-the-prisma-schema-node-mongodb.mdx @@ -0,0 +1,67 @@ +--- +title: 'Creating the Prisma schema' +metaTitle: 'Creating the Prisma schema using JavaScript and MongoDB' +metaDescription: 'Update the Prisma schema for MongoDB with JavaScript' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/mongodb/connect-your-database-node-mongodb +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/install-prisma-client-node-mongodb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb/creating-the-prisma-schema- +--- + + +## Update the Prisma schema + +Open the `prisma/schema.prisma` file and replace the default contents with the following: + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + slug String @unique + title String + body String + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + comments Comment[] +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + address Address? + posts Post[] +} + +model Comment { + id String @id @default(auto()) @map("_id") @db.ObjectId + comment String + post Post @relation(fields: [postId], references: [id]) + postId String @db.ObjectId +} + +// Address is an embedded document +type Address { + street String + city String + state String + zip String +} +``` + +There are also a number of subtle differences in how the schema is setup when compared to relational databases like PostgreSQL. + +For example, the underlying `ID` field name is always `_id` and must be mapped with `@map("_id")`. + +For more information check out the [MongoDB schema reference](/orm/reference/prisma-schema-reference#mongodb-2). diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/125-creating-the-prisma-schema-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/125-creating-the-prisma-schema-typescript-mongodb.mdx new file mode 100644 index 0000000000..6e88674b3f --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/125-creating-the-prisma-schema-typescript-mongodb.mdx @@ -0,0 +1,66 @@ +--- +title: 'Creating the Prisma schema' +metaTitle: 'Creating the Prisma schema using TypeScript and MongoDB' +metaDescription: 'Update the Prisma schema for MongoDB with TypeScript' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/mongodb/connect-your-database-typescript-mongodb +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/install-prisma-client-typescript-mongodb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb/creating-the-prisma-schema- +--- + +## Update the Prisma schema + +Open the `prisma/schema.prisma` file and replace the default contents with the following: + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + slug String @unique + title String + body String + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + comments Comment[] +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + address Address? + posts Post[] +} + +model Comment { + id String @id @default(auto()) @map("_id") @db.ObjectId + comment String + post Post @relation(fields: [postId], references: [id]) + postId String @db.ObjectId +} + +// Address is an embedded document +type Address { + street String + city String + state String + zip String +} +``` + +There are also a number of subtle differences in how the schema is setup when compared to relational databases like PostgreSQL. + +For example, the underlying `ID` field name is always `_id` and must be mapped with `@map("_id")`. + +For more information check out the [MongoDB schema reference](/orm/reference/prisma-schema-reference#mongodb-2). + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/200-install-prisma-client-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/200-install-prisma-client-node-mongodb.mdx new file mode 100644 index 0000000000..2519715c1d --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/200-install-prisma-client-node-mongodb.mdx @@ -0,0 +1,26 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: JavaScript and MongoDB' +metaDescription: 'Install and generate Prisma Client in your project using JavaScript and MongoDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/mongodb/creating-the-prisma-schema-node-mongodb +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/querying-the-database-node-mongodb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb/install-prisma-client- +--- + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma Schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will need to run the `prisma db push` command to create new indexes and regenerate Prisma Client. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/200-install-prisma-client-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/200-install-prisma-client-typescript-mongodb.mdx new file mode 100644 index 0000000000..2771a55b6d --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/200-install-prisma-client-typescript-mongodb.mdx @@ -0,0 +1,25 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client: TypeScript and MongoDB' +metaDescription: 'Install and generate Prisma Client in your project using TypeScript and MongoDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/mongodb/creating-the-prisma-schema-typescript-mongodb +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/querying-the-database-typescript-mongodb +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb/install-prisma-client- +--- + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you update your Prisma schema, you will need to run the `prisma db push` command to create new indexes and regenerate Prisma Client. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/250-querying-the-database-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/250-querying-the-database-node-mongodb.mdx new file mode 100644 index 0000000000..a4498c10ca --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/250-querying-the-database-node-mongodb.mdx @@ -0,0 +1,216 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database with JavaScript and MongoDB' +metaDescription: 'Write data to and query the database using JavaScript and MongoDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/start-from-scratch/mongodb/install-prisma-client-node-mongodb +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js copy showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Connect to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```js file=index.js +async function main() { + //delete-next-line +- // ... you will write your Prisma Client queries here +//add-start ++ const allUsers = await prisma.user.findMany() ++ console.log(allUsers) +//add-end +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post`, `User` and `Comment` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Rich', + email: 'hello@prisma.com', + posts: { + create: { + title: 'My first post', + body: 'Lots of really interesting stuff', + slug: 'my-first-post', + }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with a new `Post` using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the other one via the `Post.author` ↔ `User.posts` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +The output should look similar to this: + +```json no-lines +[ + { + id: '60cc9b0e001e3bfd00a6eddf', + email: 'hello@prisma.com', + name: 'Rich', + address: null, + posts: [ + { + id: '60cc9bad005059d6007f45dd', + slug: 'my-first-post', + title: 'My first post', + body: 'Lots of really interesting stuff', + userId: '60cc9b0e001e3bfd00a6eddf', + }, + ], + }, +] +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :------------------------- | :------------------- | :------- | +| `60cc9b0e001e3bfd00a6eddf` | `"hello@prisma.com"` | `"Rich"` | + +**Post** + +| **id** | **createdAt** | **title** | **content** | **published** | **authorId** | +| :------------------------- | :------------------------- | :---------------- | :--------------------------------- | :------------ | :------------------------- | +| `60cc9bad005059d6007f45dd` | `2020-03-21T16:45:01.246Z` | `"My first post"` | `Lots of really interesting stuff` | `false` | `60cc9b0e001e3bfd00a6eddf` | + +> **Note**: The unique IDs in the `authorId` column on `Post` reference the `id` column of the `User` table, meaning the `id` value `60cc9b0e001e3bfd00a6eddf` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll add a couple of comments to the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js copy showLineNumbers +async function main() { + await prisma.post.update({ + where: { + slug: 'my-first-post', + }, + data: { + comments: { + createMany: { + data: [ + { comment: 'Great post!' }, + { comment: "Can't wait to read more!" }, + ], + }, + }, + }, + }) + const posts = await prisma.post.findMany({ + include: { + comments: true, + }, + }) + + console.dir(posts, { depth: Infinity }) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` + +You will see the following output: + +```json no-lines +[ + { + id: '60cc9bad005059d6007f45dd', + slug: 'my-first-post', + title: 'My first post', + body: 'Lots of really interesting stuff', + userId: '60cc9b0e001e3bfd00a6eddf', + comments: [ + { + id: '60cca420008a21d800578793', + postId: '60cca40300af8bf000f6ca99', + comment: 'Great post!', + }, + { + id: '60cca420008a21d800578794', + postId: '60cca40300af8bf000f6ca99', + comment: "Can't wait to try this!", + }, + ], + }, +] +``` + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/250-querying-the-database-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/250-querying-the-database-typescript-mongodb.mdx new file mode 100644 index 0000000000..218f0bb6ef --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/250-querying-the-database-typescript-mongodb.mdx @@ -0,0 +1,229 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database with TypeScript and MongoDB' +metaDescription: 'Write data to and query the database using TypeScript and MongoDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/start-from-scratch/mongodb/install-prisma-client-typescript-mongodb +pagination_next: getting-started/setup-prisma/start-from-scratch/mongodb/next-steps +slugSwitch: /getting-started/setup-prisma/start-from-scratch/mongodb/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +Create a new file named `index.ts` and add the following code to it: + +```js file=index.ts copy showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .catch(async (e) => { + console.error(e) + process.exit(1) + }) + .finally(async () => { + await prisma.$disconnect() + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Connect to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts showLineNumbers +async function main() { + // ... you will write your Prisma Client queries here +//add-start ++ const allUsers = await prisma.user.findMany() ++ console.log(allUsers) +//add-end +} +``` + +Now run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +This should print an empty array because there are no `User` records in the database yet: + +```json no-lines +[] +``` + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post`, `User` and `Comment` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts highlight=2-21;add copy showLineNumbers +async function main() { + //add-start + await prisma.user.create({ + data: { + name: 'Rich', + email: 'hello@prisma.com', + posts: { + create: { + title: 'My first post', + body: 'Lots of really interesting stuff', + slug: 'my-first-post', + }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + }, + }) + console.dir(allUsers, { depth: null }) + //add-end +} +``` + +This code creates a new `User` record together with a new `Post` using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the other one via the `Post.author` ↔ `User.posts` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +The output should look similar to this: + +```json no-lines +[ + { + id: '60cc9b0e001e3bfd00a6eddf', + email: 'hello@prisma.com', + name: 'Rich', + address: null, + posts: [ + { + id: '60cc9bad005059d6007f45dd', + slug: 'my-first-post', + title: 'My first post', + body: 'Lots of really interesting stuff', + userId: '60cc9b0e001e3bfd00a6eddf', + }, + ], + }, +] +``` + +Also note that `allUsers` is _statically typed_ thanks to [Prisma Client's generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types). You can observe the type by hovering over the `allUsers` variable in your editor. It should be typed as follows: + +```ts no-lines +const allUsers: (User & { + posts: Post[] +})[] + +export type Post = { + id: number + title: string + body: string | null + published: boolean + authorId: number | null +} +``` + +The query added new records to the `User` and the `Post` tables: + +**User** + +| **id** | **email** | **name** | +| :------------------------- | :------------------- | :------- | +| `60cc9b0e001e3bfd00a6eddf` | `"hello@prisma.com"` | `"Rich"` | + +**Post** + +| **id** | **createdAt** | **title** | **content** | **published** | **authorId** | +| :------------------------- | :------------------------- | :---------------- | :--------------------------------- | :------------ | :------------------------- | +| `60cc9bad005059d6007f45dd` | `2020-03-21T16:45:01.246Z` | `"My first post"` | `Lots of really interesting stuff` | `false` | `60cc9b0e001e3bfd00a6eddf` | + +> **Note**: The unique IDs in the `authorId` column on `Post` reference the `id` column of the `User` table, meaning the `id` value `60cc9b0e001e3bfd00a6eddf` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll add a couple of comments to the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts copy showLineNumbers +async function main() { + await prisma.post.update({ + where: { + slug: 'my-first-post', + }, + data: { + comments: { + createMany: { + data: [ + { comment: 'Great post!' }, + { comment: "Can't wait to read more!" }, + ], + }, + }, + }, + }) + const posts = await prisma.post.findMany({ + include: { + comments: true, + }, + }) + + console.dir(posts, { depth: Infinity }) +} +``` + +Now run the code using the same command as before: + +```terminal copy +npx tsx index.ts +``` + +You will see the following output: + +```json no-lines +[ + { + id: '60cc9bad005059d6007f45dd', + slug: 'my-first-post', + title: 'My first post', + body: 'Lots of really interesting stuff', + userId: '60cc9b0e001e3bfd00a6eddf', + comments: [ + { + id: '60cca420008a21d800578793', + postId: '60cca40300af8bf000f6ca99', + comment: 'Great post!', + }, + { + id: '60cca420008a21d800578794', + postId: '60cca40300af8bf000f6ca99', + comment: "Can't wait to try this!", + }, + ], + }, +] +``` + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/300-next-steps.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/300-next-steps.mdx new file mode 100644 index 0000000000..fcbdf46f6c --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/120-mongodb/300-next-steps.mdx @@ -0,0 +1,93 @@ +--- +title: 'Next steps' +metaTitle: 'Next steps after setting up Prisma ORM with MongoDB' +metaDescription: 'Next steps to take now that you have successfully added Prisma ORM to your new JavaScript or TypeScript project' +hide_table_of_contents: true +--- + +This section lists a number of potential next steps you can now take from here. Feel free to explore these or read the [Introduction](/orm/overview/introduction/what-is-prisma) page to get a high-level overview of Prisma ORM. + +### Continue exploring the Prisma Client API + +You can send a variety of queries with the Prisma Client API. Check out the [API reference](/orm/prisma-client) and use your existing database setup from this guide to try them out. + +:::tip + +You can use your editor's auto-completion feature to learn about the different API calls and the arguments it takes. Auto-completion is commonly invoked by hitting CTRL+SPACE on your keyboard. + +::: + +
+Expand for more Prisma Client API examples + +Here are a few suggestions for a number of more queries you can send with Prisma Client: + +**Filter all `Post` records that contain `"hello"`** + +```js +const filteredPosts = await prisma.post.findMany({ + where: { + OR: [{ title: { contains: 'hello' } }, { body: { contains: 'hello' } }], + }, +}) +``` + +**Create a new `Post` record and connect it to an existing `User` record** + +```js +const post = await prisma.post.create({ + data: { + title: 'Join us for Prisma Day 2020', + slug: 'prisma-day-2020', + body: 'A conference on modern application development and databases.', + user: { + connect: { email: 'hello@prisma.com' }, + }, + }, +}) +``` + +**Use the fluent relations API to retrieve the `Post` records of a `User` by traversing the relations** + +```js +const user = await prisma.comment + .findUnique({ + where: { id: '60ff4e9500acc65700ebf470' }, + }) + .post() + .user() +``` + +**Delete a `User` record** + +```js +const deletedUser = await prisma.user.delete({ + where: { email: 'sarah@prisma.io' }, +}) +``` + +
+ +### Build an app with Prisma ORM + +The Prisma blog features comprehensive tutorials about Prisma ORM, check out our latest ones: + +- [Build a fullstack app with Next.js](https://www.youtube.com/watch?v=QXxy8Uv1LnQ&ab_channel=ByteGrad) +- [Build a fullstack app with Remix](https://www.prisma.io/blog/fullstack-remix-prisma-mongodb-1-7D0BfTXBmB6r) (5 parts, including videos) +- [Build a REST API with NestJS](https://www.prisma.io/blog/nestjs-prisma-rest-api-7D056s1BmOL0) + +### Explore the data in Prisma Studio + +Prisma Studio is a visual editor for the data in your database. Run `npx prisma studio` in your terminal. + +### Try a Prisma ORM example + +The [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository contains a number of ready-to-run examples: + +| Demo | Stack | Description | +| :------------------------------------------------------------------------------------------------------------------ | :----------- | --------------------------------------------------------------------------------------------------- | +| [`nextjs-api-routes`](https://pris.ly/e/ts/rest-nextjs-api-routes) | Fullstack | Simple [Next.js](https://nextjs.org/) app (React) with a REST API | +| [`nextjs-graphql`](https://pris.ly/e/ts/graphql-nextjs) | Fullstack | Simple [Next.js](https://nextjs.org/) app (React) with a GraphQL API | +| [`graphql-nexus`](https://pris.ly/e/ts/graphql-nexus) | Backend only | GraphQL server based on [`@apollo/server`](https://www.apollographql.com/docs/apollo-server) | +| [`express`](https://pris.ly/e/ts/rest-express) | Backend only | Simple REST API with Express.JS | +| [`grpc`](https://pris.ly/e/ts/grpc) | Backend only | Simple gRPC API | diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/index.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/index.mdx new file mode 100644 index 0000000000..455593e360 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/100-start-from-scratch/index.mdx @@ -0,0 +1,16 @@ +--- +title: 'Start from scratch' +metaTitle: 'Start from scratch with Prisma ORM' +metaDescription: 'Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma ORM to your database of choice and generating a Prisma Client for database access.' +hide_table_of_contents: true +--- + + + +Start a fresh project from scratch with the following tutorials as they introduce you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## In this section + + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-cockroachdb.mdx new file mode 100644 index 0000000000..044496fef8 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-cockroachdb.mdx @@ -0,0 +1,76 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma ORM to an existing project using JavaScript and CockroachDB (15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing Node.js project by connecting it to your CockroachDB database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- an existing Node.js project with a `package.json` +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [CockroachDB](https://www.cockroachlabs.com) database server running and a database with at least one table + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-mysql.mdx new file mode 100644 index 0000000000..a97e93f194 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-mysql.mdx @@ -0,0 +1,77 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma ORM to an existing project using JavaScript and MySQL (15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing Node.js project by connecting it to your MySQL database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- an existing Node.js project with a `package.json` +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [MySQL](https://www.mysql.com/) database server running and a database with at least one table + + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-planetscale.mdx new file mode 100644 index 0000000000..e45d720cb5 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-planetscale.mdx @@ -0,0 +1,75 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma ORM to an existing project using JavaScript and PlanetScale (15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing Node.js project by connecting it to your PlanetScale database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-planetscale +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- an existing Node.js project with a `package.json` +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [PlanetScale](https://planetscale.com/) database server running and a database with at least one table + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-postgresql.mdx new file mode 100644 index 0000000000..5550111651 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-postgresql.mdx @@ -0,0 +1,77 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma ORM to an existing project that using JavaScript and PostgreSQL(15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing Node.js project by connecting it to your PostgreSQL database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- an existing Node.js project with a `package.json` +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [PostgreSQL](https://www.postgresql.org/) database server running and a database with at least one table + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-sqlserver.mdx new file mode 100644 index 0000000000..b3751c438e --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-node-sqlserver.mdx @@ -0,0 +1,76 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma to an existing project using JavaScript and SQL Server (15 min)' +metaDescription: 'Learn how to add Prisma to an existing Node.js project by connecting it to your SQL Server database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- A [Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/?view=sql-server-ver16) database + - [Microsoft SQL Server on Linux for Docker](/orm/overview/databases/sql-server/sql-server-docker) + - [Microsoft SQL Server on Windows (local)](/orm/overview/databases/sql-server/sql-server-local) + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..6616d7ecb0 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-cockroachdb.mdx @@ -0,0 +1,76 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma ORM to an existing project using TypeScript and CockroachDB (15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing TypeScript project by connecting it to your CockroachDB database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- an existing Node.js project with a `package.json` +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [CockroachDB](https://www.cockroachlabs.com) database server running and a database with at least one table + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-mysql.mdx new file mode 100644 index 0000000000..6f5277a5cd --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-mysql.mdx @@ -0,0 +1,75 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma to an existing project using TypeScript and MySQL (15 min)' +metaDescription: 'Learn how to add Prisma to an existing TypeScript project by connecting it to your MySQL database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- an existing Node.js project with a `package.json` +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [MySQL](https://www.mysql.com/) database server running and a database with at least one table + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-planetscale.mdx new file mode 100644 index 0000000000..49f10e1998 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-planetscale.mdx @@ -0,0 +1,75 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma ORM to an existing project using TypeScript and PlanetScale (15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing TypeScript project by connecting it to your PlanetScale database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-planetscale +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- an existing Node.js project with a `package.json` +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [PlanetScale](https://planetscale.com/) database server running and a database with at least one table + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-postgresql.mdx new file mode 100644 index 0000000000..c687836f8d --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-postgresql.mdx @@ -0,0 +1,75 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma ORM to an existing project using TypeScript and PostgreSQL (15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing TypeScript project by connecting it to your PostgreSQL database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- an existing Node.js project with a `package.json` +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- a [PostgreSQL](https://www.postgresql.org/) database server running and a database with at least one table + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-sqlserver.mdx new file mode 100644 index 0000000000..2db50dee76 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases-typescript-sqlserver.mdx @@ -0,0 +1,76 @@ +--- +title: 'Relational databases' +metaTitle: 'Add Prisma ORM to an existing project using TypeScript and SQL Server (15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing TypeScript project by connecting it to your SQL Server database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases- +--- + + + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +:::tip + +If you're migrating to Prisma ORM from another ORM, see our [Migrate from TypeORM](/orm/more/migrating-to-prisma/migrate-from-typeorm) or [Migrate from Sequelize](/orm/more/migrating-to-prisma/migrate-from-sequelize) migration guides. + +::: + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- A [Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/?view=sql-server-ver16) database + - [Microsoft SQL Server on Linux for Docker](/orm/overview/databases/sql-server/sql-server-docker) + - [Microsoft SQL Server on Windows (local)](/orm/overview/databases/sql-server/sql-server-local) + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +## Set up Prisma ORM + +As a first step, navigate into your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + + + +See [installation instructions](/orm/tools/prisma-cli#installation) to learn how to install Prisma ORM using a different package manager. + + + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-cockroachdb.mdx new file mode 100644 index 0000000000..465af58b33 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-cockroachdb.mdx @@ -0,0 +1,68 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using JavaScript and CockroachDB' +metaDescription: 'Connect your database to your existing project using JavaScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +toc: false +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-node-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL as the `provider`. For CockroachDB, you need to edit the `datasource` block to use the `cockroachdb` provider instead: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "cockroachdb" + url = env("DATABASE_URL") +} +``` + +The `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`. You now need to adjust the connection URL to point to your own database. + +

Connection URL

+ +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. CockroachDB uses the PostgreSQL connection URL format, which has the following structure (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?PARAMETERS +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running. The default for CockroachDB is `26257`. +- `DATABASE`: The name of the database +- `PARAMETERS`: Any additional connection parameters. See the CockroachDB documentation [here](https://www.cockroachlabs.com/docs/stable/connection-parameters.html#additional-connection-parameters). + +For a [CockroachDB Serverless](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart.html) or [Cockroach Dedicated](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart-trial-cluster) database hosted on [CockroachDB Cloud](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart/), the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="postgresql://:@..cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full&sslrootcert=$HOME/.postgresql/root.crt&options=--" +``` + +To find your connection string on CockroachDB Cloud, click the 'Connect' button on the overview page for your database cluster, and select the 'Connection string' tab. + +For a [CockroachDB database hosted locally](https://www.cockroachlabs.com/docs/stable/secure-a-cluster.html), the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="postgresql://root@localhost:26257?sslmode=disable" +``` + +Your connection string is displayed as part of the welcome text when starting CockroachDB from the command line. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-mysql.mdx new file mode 100644 index 0000000000..da2b830ba5 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-mysql.mdx @@ -0,0 +1,69 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using JavaScript and MySQL' +metaDescription: 'Connect your database to your existing project using JavaScript and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +toc: false +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-node-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-node-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL, so you first need to switch the `provider` to `mysql`: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="mysql://johndoe:randompassword@localhost:3306/mydb" +``` + +You now need to adjust the connection URL to point to your own database. + +

Connection URL

+ +The [format of the connection URL](/orm/reference/connection-urls) for your database typically depends on the database you use. For MySQL, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running (typically `3306` for MySQL) +- `DATABASE`: The name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) + +As an example, for a MySQL database hosted on AWS RDS, the [connection URL](/orm/reference/connection-urls) might look similar to this: + +```bash file=.env +DATABASE_URL="mysql://johndoe:XXX@mysql–instance1.123456789012.us-east-1.rds.amazonaws.com:3306/mydb" +``` + +When running MySQL locally, your connection URL typically looks similar to this: + +```bash file=.env +DATABASE_URL="mysql://root:randompassword@localhost:3306/mydb" +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-planetscale.mdx new file mode 100644 index 0000000000..85165a2c41 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-planetscale.mdx @@ -0,0 +1,98 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using JavaScript and PlanetScale' +metaDescription: 'Connect your database to your existing project using JavaScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-node-planetscale +pagination_next: getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-node-planetscale +slugSwitch: /getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database- +--- + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL as the `provider`. For PlanetScale, you need to edit the `datasource` block to use the `mysql` provider instead: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +You will also need to set the relation mode type to `prisma` in order to [emulate foreign key constraints](/orm/overview/databases/planetscale#option-1-emulate-relations-in-prisma-client) in the `datasource` block: + +```prisma file=schema.prisma highlight=4;add showLineNumbers +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + //add-next-line + relationMode = "prisma" +} +``` + +> **Note**: Since February 2024, you can alternatively [use foreign key constraints on a database-level in PlanetScale](/orm/overview/databases/planetscale#option-2-enable-foreign-key-constraints-in-the-planetscale-database-settings), which omits the need for setting `relationMode = "prisma"`. + +The `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="mysql://janedoe:mypassword@server.us-east-2.psdb.cloud/mydb?sslaccept=strict" +``` + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database typically depends on the database you use. PlanetScale uses the MySQL connection URL format, which has the following structure (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running (typically `3306` for MySQL) +- `DATABASE`: The name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) + +For a database hosted with PlanetScale, the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="mysql://myusername:mypassword@server.us-east-2.psdb.cloud/mydb?sslaccept=strict" +``` + +The connection URL for a given database branch can be found from your PlanetScale account by going to the overview page for the branch and selecting the 'Connect' dropdown. In the 'Passwords' section, generate a new password and select 'Prisma' to get the Prisma format for the connection URL. + +
+Alternative method: connecting using the PlanetScale CLI + +Alternatively, you can connect to your PlanetScale database server using the [PlanetScale CLI](https://planetscale.com/docs/concepts/planetscale-environment-setup), and use a local connection URL. In this case the connection URL will look like this: + +```bash file=.env +DATABASE_URL="mysql://root@localhost:PORT/mydb" +``` + + + +We recommend adding `.env` to your `.gitignore` file to prevent committing your environment variables. + + + +To connect to your branch, use the following command: + +```terminal +pscale connect prisma-test branchname --port PORT +``` + +The `--port` flag can be omitted if you are using the default port `3306`. + +
\ No newline at end of file diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-postgresql.mdx new file mode 100644 index 0000000000..1db9a8eb72 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-postgresql.mdx @@ -0,0 +1,56 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using JavaScript and PostgreSQL' +metaDescription: 'Connect your database to your existing project using JavaScript and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +toc: false +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-node-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-node-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public" +``` + +You now need to adjust the connection URL to point to your own database. + +

Connection URL

+ +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. For PostgreSQL, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA +``` + +> **Note**: In most cases, you can use the [`postgres://` and `postgresql:// URI scheme designators interchangeably`](https://www.postgresql.org/docs/10/libpq-connect.html#id-1.7.3.8.3.6) - however, depending on how your database is hosted, you might need to be specific. + +If you're unsure what to provide for the `schema` parameter for a PostgreSQL connection URL, you can probably omit it. In that case, the default schema name `public` will be used. + +As an example, for a PostgreSQL database hosted on Heroku, the connection URL might look similar to this: + +```bash file=.env +DATABASE_URL="postgresql://opnmyfngbknppm:XXX@ec2-46-137-91-216.eu-west-1.compute.amazonaws.com:5432/d50rgmkqi2ipus?schema=hello-prisma" +``` + +When running PostgreSQL locally on macOS, your user and password as well as the database name _typically_ correspond to the current _user_ of your OS, e.g. assuming the user is called `janedoe`: + +```bash file=.env +DATABASE_URL="postgresql://janedoe:janedoe@localhost:5432/janedoe?schema=hello-prisma" +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-sqlserver.mdx new file mode 100644 index 0000000000..e14a088b17 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-node-sqlserver.mdx @@ -0,0 +1,34 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using JavaScript and SQL Server' +metaDescription: 'Connect your existing database to your project using JavaScript and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +toc: false +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-node-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-node-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "sqlserver" + url = env("DATABASE_URL") +} +``` + +The `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema), the following example connection URL [uses SQL authentication](/orm/overview/databases/sql-server), but there are [other ways to format your connection URL](/orm/overview/databases/sql-server) + +```bash file=.env +DATABASE_URL="sqlserver://localhost:1433;database=mydb;user=sa;password=r@ndomP@$$w0rd;trustServerCertificate=true" +``` + +Adjust the connection URL to match your setup - see [Microsoft SQL Server connection URL](/orm/overview/databases/sql-server) for more information. + +> Make sure TCP/IP connections are enabled via [SQL Server Configuration Manager](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-configuration-manager?view=sql-server-ver16&viewFallbackFrom=sql-server-ver16) to avoid `No connection could be made because the target machine actively refused it. (os error 10061)` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..1753f2e0cd --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-cockroachdb.mdx @@ -0,0 +1,68 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using TypeScript and CockroachDB' +metaDescription: 'Connect your existing database to your project using TypeScript and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: 'hidden-sidebar tech-switch' +hide_table_of_contents: true +toc: false +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL as the `provider`. For CockroachDB, you need to edit the `datasource` block to use the `cockroachdb` provider instead: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "cockroachdb" + url = env("DATABASE_URL") +} +``` + +The `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`. You now need to adjust the connection URL to point to your own database. + +

Connection URL

+ +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. CockroachDB uses the PostgreSQL connection URL format, which has the following structure (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?PARAMETERS +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running. The default for CockroachDB is `26257`. +- `DATABASE`: The name of the database +- `PARAMETERS`: Any additional connection parameters. See the CockroachDB documentation [here](https://www.cockroachlabs.com/docs/stable/connection-parameters.html#additional-connection-parameters). + +For a [CockroachDB Serverless](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart.html) or [Cockroach Dedicated](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart-trial-cluster) database hosted on [CockroachDB Cloud](https://www.cockroachlabs.com/docs/cockroachcloud/quickstart/), the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="postgresql://:@..cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full&sslrootcert=$HOME/.postgresql/root.crt&options=--" +``` + +To find your connection string on CockroachDB Cloud, click the 'Connect' button on the overview page for your database cluster, and select the 'Connection string' tab. + +For a [CockroachDB database hosted locally](https://www.cockroachlabs.com/docs/stable/secure-a-cluster.html), the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="postgresql://root@localhost:26257?sslmode=disable" +``` + +Your connection string is displayed as part of the welcome text when starting CockroachDB from the command line. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-mysql.mdx new file mode 100644 index 0000000000..e629e06300 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-mysql.mdx @@ -0,0 +1,69 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using TypeScript and MySQL' +metaDescription: 'Connect your existing database to your project using TypeScript and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +toc: false +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL, so you first need to switch the `provider` to `mysql`: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="mysql://johndoe:randompassword@localhost:3306/mydb" +``` + +You now need to adjust the connection URL to point to your own database. + +

Connection URL

+ +The [format of the connection URL](/orm/reference/connection-urls) for your database typically depends on the database you use. For MySQL, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running (typically `3306` for MySQL) +- `DATABASE`: The name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) + +As an example, for a MySQL database hosted on AWS RDS, the [connection URL](/orm/reference/connection-urls) might look similar to this: + +```bash file=.env +DATABASE_URL="mysql://johndoe:XXX@mysql–instance1.123456789012.us-east-1.rds.amazonaws.com:3306/mydb" +``` + +When running MySQL locally, your connection URL typically looks similar to this: + +```bash file=.env +DATABASE_URL="mysql://root:randompassword@localhost:3306/mydb" +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-planetscale.mdx new file mode 100644 index 0000000000..685c1ee1d9 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-planetscale.mdx @@ -0,0 +1,95 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using TypeScript and PlanetScale' +metaDescription: 'Connect your existing database to your project using TypeScript and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +toc: false +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-planetscale +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-planetscale +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Note that the default schema created by `prisma init` uses PostgreSQL as the `provider`. For PlanetScale, you need to edit the `datasource` block to use the `mysql` provider instead: + +```prisma file=prisma/schema.prisma highlight=2;edit showLineNumbers +datasource db { + //edit-next-line + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +You will also need to [set the relation mode type to `prisma`](/orm/prisma-schema/data-model/relations/relation-mode#emulate-relations-in-prisma-orm-with-the-prisma-relation-mode) in the `datasource` block: + +```prisma file=schema.prisma highlight=4;add showLineNumbers +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + //add-next-line + relationMode = "prisma" +} +``` + +The `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="mysql://janedoe:mypassword@server.us-east-2.psdb.cloud/mydb?sslaccept=strict" +``` + +You now need to adjust the connection URL to point to your own database. + +

Connection URL

+ +The [format of the connection URL](/orm/reference/connection-urls) for your database typically depends on the database you use. PlanetScale uses the MySQL connection URL format, which has the following structure (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USER`: The name of your database user +- `PASSWORD`: The password for your database user +- `PORT`: The port where your database server is running (typically `3306` for MySQL) +- `DATABASE`: The name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) + +For a database hosted with PlanetScale, the [connection URL](/orm/reference/connection-urls) looks similar to this: + +```bash file=.env +DATABASE_URL="mysql://myusername:mypassword@server.us-east-2.psdb.cloud/mydb?sslaccept=strict" +``` + +The connection URL for a given database branch can be found from your PlanetScale account by going to the overview page for the branch and selecting the 'Connect' dropdown. In the 'Passwords' section, generate a new password and select 'Prisma' to get the Prisma format for the connection URL. + +
+Alternative method: connecting using the PlanetScale CLI + +Alternatively, you can connect to your PlanetScale database server using the [PlanetScale CLI](https://planetscale.com/docs/concepts/planetscale-environment-setup), and use a local connection URL. In this case the connection URL will look like this: + +```bash file=.env +DATABASE_URL="mysql://root@localhost:PORT/mydb" +``` + +To connect to your branch, use the following command: + +```terminal +pscale connect prisma-test branchname --port PORT +``` + +The `--port` flag can be omitted if you are using the default port `3306`. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-postgresql.mdx new file mode 100644 index 0000000000..fea5ca6bc0 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-postgresql.mdx @@ -0,0 +1,55 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using TypeScript and PostgresSQL' +metaDescription: 'Connect your existing database to your project using TypeScript and PostgresSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +toc: false +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`: + +```bash file=.env +DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public" +``` + +You now need to adjust the connection URL to point to your own database. + +

Connection URL

+ +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. For PostgreSQL, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA +``` + +> **Note**: In most cases, you can use the [`postgres://` and `postgresql:// URI scheme designators interchangeably`](https://www.postgresql.org/docs/10/libpq-connect.html#id-1.7.3.8.3.6) - however, depending on how your database is hosted, you might need to be specific. + +If you're unsure what to provide for the `schema` parameter for a PostgreSQL connection URL, you can probably omit it. In that case, the default schema name `public` will be used. + +As an example, for a PostgreSQL database hosted on Heroku, the connection URL might look similar to this: + +```bash file=.env +DATABASE_URL="postgresql://opnmyfngbknppm:XXX@ec2-46-137-91-216.eu-west-1.compute.amazonaws.com:5432/d50rgmkqi2ipus?schema=hello-prisma" +``` + +When running PostgreSQL locally on macOS, your user and password as well as the database name _typically_ correspond to the current _user_ of your OS, e.g. assuming the user is called `janedoe`: + +```bash file=.env +DATABASE_URL="postgresql://janedoe:janedoe@localhost:5432/janedoe?schema=hello-prisma" +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-sqlserver.mdx new file mode 100644 index 0000000000..0334c1167f --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/100-connect-your-database-typescript-sqlserver.mdx @@ -0,0 +1,34 @@ +--- +title: 'Connect your database' +metaTitle: 'Connect your existing database using TypeScript and SQL Server' +metaDescription: 'Connect your existing database to your project using TypeScript and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +toc: false +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "sqlserver" + url = env("DATABASE_URL") +} +``` + +The `url` is [set via an environment variable](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema), the following example connection URL [uses SQL authentication](/orm/overview/databases/sql-server), but there are [other ways to format your connection URL](/orm/overview/databases/sql-server) + +```bash file=.env +DATABASE_URL="sqlserver://localhost:1433;database=mydb;user=sa;password=r@ndomP@$$w0rd;trustServerCertificate=true" +``` + +Adjust the connection URL to match your setup - see [Microsoft SQL Server connection URL](/orm/overview/databases/sql-server) for more information. + +> Make sure TCP/IP connections are enabled via [SQL Server Configuration Manager](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-configuration-manager?view=sql-server-ver16&viewFallbackFrom=sql-server-ver16) to avoid `No connection could be made because the target machine actively refused it. (os error 10061)` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-cockroachdb.mdx new file mode 100644 index 0000000000..9cb7c77ab6 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-cockroachdb.mdx @@ -0,0 +1,216 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, JavaScript, and CockroachDB' +metaDescription: 'Introspect your existing project with Prisma ORM, JavaScript, and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE "User" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + name STRING(255), + email STRING(255) UNIQUE NOT NULL +); + +CREATE TABLE "Post" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + title STRING(255) UNIQUE NOT NULL, + "createdAt" TIMESTAMP NOT NULL DEFAULT now(), + content STRING, + published BOOLEAN NOT NULL DEFAULT false, + "authorId" INT8 NOT NULL, + FOREIGN KEY ("authorId") REFERENCES "User"(id) +); + +CREATE TABLE "Profile" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + bio STRING, + "userId" INT8 UNIQUE NOT NULL, + FOREIGN KEY ("userId") REFERENCES "User"(id) +); +``` + +> **Note**: Some fields are written in double quotes to ensure CockroachDB uses proper casing. If no double-quotes were used, CockroachDB would just read everything as _lowercase_ characters. + +
+Expand for a graphical overview of the tables + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------ | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT8` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `STRING(255)` | No | No | No | - | +| `email` | `STRING(255)` | No | No | **✔️** | - | + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------ | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT8` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `TIMESTAMP` | No | No | **✔️** | `now()` | +| `title` | `STRING(255)` | No | No | **✔️** | - | +| `content` | `STRING` | No | No | No | - | +| `published` | `BOOLEAN` | No | No | **✔️** | `false` | +| `authorId` | `INT8` | No | **✔️** | **✔️** | - | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT8` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `STRING` | No | No | No | - | +| `userId` | `INT8` | No | **✔️** | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the environment variable used to define the `url` in your `schema.prisma`, `DATABASE_URL`, that in our case is set in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a Prisma data model. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this: + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id BigInt @id @default(autoincrement()) + title String @unique @db.String(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId BigInt + User User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model Profile { + id BigInt @id @default(autoincrement()) + bio String? + userId BigInt @unique + User User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id BigInt @id @default(autoincrement()) + name String? @db.String(255) + email String @unique @db.String(255) + Post Post[] + Profile Profile? +} +``` + +Prisma ORM's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +Right now, there's a few minor "issues" with the data model: + +- The `User` relation field is uppercased and therefore doesn't adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) . To express more "semantics", it would also be nice if this field was called `author` to _describe_ the relationship between `User` and `Post` better. +- The `Post` and `Profile` relation fields on `User` as well as the `User` relation field on `Profile` are all uppercased. To adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) , both fields should be lowercased to `post`, `profile` and `user`. +- Even after lowercasing, the `post` field on `User` is still slightly misnamed. That's because it actually refers to a [list](/orm/prisma-schema/data-model/models#type-modifiers) of posts – a better name therefore would be the plural form: `posts`. + +These changes are relevant for the generated Prisma Client API where using lowercased relation fields `author`, `posts`, `profile` and `user` will feel more natural and idiomatic to JavaScript/TypeScript developers. You can therefore [configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Because [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database: + +```prisma file=prisma/schema.prisma highlight=8,15,22,23;edit showLineNumbers +model Post { + id BigInt @id @default(autoincrement()) + title String @unique @db.String(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId BigInt + //edit-next-line + author User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model Profile { + id BigInt @id @default(autoincrement()) + bio String? + userId BigInt @unique + //edit-next-line + user User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id BigInt @id @default(autoincrement()) + name String? @db.String(255) + email String @unique @db.String(255) + //edit-start + posts Post[] + profile Profile? + //edit-end +} +``` + +In this example, the database schema did follow the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models (only the virtual relation fields that were generated from introspection did not adhere to them and needed adjustment). This optimizes the ergonomics of the generated Prisma Client API. + +
+ Using custom model and field names + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(sequence()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(sequence()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-mysql.mdx new file mode 100644 index 0000000000..52cb856f1e --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-mysql.mdx @@ -0,0 +1,219 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, JavaScript, and MySQL' +metaDescription: 'Introspect your existing project with Prisma ORM, JavaScript, and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-node-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE User ( + id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, + name VARCHAR(255), + email VARCHAR(255) UNIQUE NOT NULL +); + +CREATE TABLE Post ( + id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, + title VARCHAR(255) NOT NULL, + createdAt TIMESTAMP NOT NULL DEFAULT now(), + content TEXT, + published BOOLEAN NOT NULL DEFAULT false, + authorId INTEGER NOT NULL, + FOREIGN KEY (authorId) REFERENCES User(id) +); + +CREATE TABLE Profile ( + id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, + bio TEXT, + userId INTEGER UNIQUE NOT NULL, + FOREIGN KEY (userId) REFERENCES User(id) +); +``` + +
+Expand for a graphical overview of the tables + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INTEGER` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `VARCHAR(255)` | No | No | No | - | +| `email` | `VARCHAR(255)` | No | No | **✔️** | - | + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INTEGER` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `DATETIME(3)` | No | No | **✔️** | `now()` | +| `title` | `VARCHAR(255)` | No | No | **✔️** | - | +| `content` | `TEXT` | No | No | No | - | +| `published` | `BOOLEAN` | No | No | **✔️** | `false` | +| `authorId` | `INTEGER` | No | **✔️** | **✔️** | `false` | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :-------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INTEGER` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `TEXT` | No | No | No | - | +| `userId` | `INTEGER` | No | **✔️** | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the `DATABASE_URL` environment variable that's defined in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a Prisma data model. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this (note that the fields on the models have been reordered for better readability): + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(0) + content String? @db.Text + published Boolean @default(false) + authorId Int + User User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "Post_ibfk_1") + + @@index([authorId], map: "authorId") +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? @db.Text + userId Int @unique(map: "userId") + User User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "Profile_ibfk_1") +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique(map: "email") @db.VarChar(255) + Post Post[] + Profile Profile? +} +``` + + + +Refer to the [Prisma schema reference](/orm/reference/prisma-schema-reference) for detailed information about the schema definition. + + + +Prisma ORM's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +Right now, there's a few minor "issues" with the data model: + +- The `User` relation field is uppercased and therefore doesn't adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) . To express more "semantics", it would also be nice if this field was called `author` to _describe_ the relationship between `User` and `Post` better. +- The `Post` and `Profile` relation fields on `User` as well as the `User` relation field on `Profile` are all uppercased. To adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) , both fields should be lowercased to `post`, `profile` and `user`. +- Even after lowercasing, the `post` field on `User` is still slightly misnamed. That's because it actually refers to a [list](/orm/prisma-schema/data-model/models#type-modifiers) of posts – a better name therefore would be the plural form: `posts`. + +These changes are relevant for the generated Prisma Client API where using lowercased relation fields `author`, `posts`, `profile` and `user` will feel more natural and idiomatic to JavaScript/TypeScript developers. You can therefore [configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Because [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database: + +```prisma file=prisma/schema.prisma highlight=8,17,24,25;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(0) + content String? @db.Text + published Boolean @default(false) + authorId Int + //edit-next-line + author User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "Post_ibfk_1") + + @@index([authorId], map: "authorId") +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? @db.Text + userId Int @unique(map: "userId") + //edit-next-line + user User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "Profile_ibfk_1") +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique(map: "email") @db.VarChar(255) + //edit-start + posts Post[] + profile Profile? + //edit-end +} +``` + +In this example, the database schema did follow the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models (only the virtual relation fields that were generated from introspection did not adhere to them and needed adjustment). This optimizes the ergonomics of the generated Prisma Client API. + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(autoincrement()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(autoincrement()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-planetscale.mdx new file mode 100644 index 0000000000..da9bfbabd6 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-planetscale.mdx @@ -0,0 +1,236 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, JavaScript, and PlanetScale' +metaDescription: 'Introspect your existing project with Prisma ORM, JavaScript, and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-node-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE `Post` ( + `id` int NOT NULL AUTO_INCREMENT, + `createdAt` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` datetime(3) NOT NULL, + `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `content` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `published` tinyint(1) NOT NULL DEFAULT '0', + `authorId` int NOT NULL, + PRIMARY KEY (`id`), + KEY `Post_authorId_idx` (`authorId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE `Profile` ( + `id` int NOT NULL AUTO_INCREMENT, + `bio` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `userId` int NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `Profile_userId_key` (`userId`), + KEY `Profile_userId_idx` (`userId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE `User` ( + `id` int NOT NULL AUTO_INCREMENT, + `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `User_email_key` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +``` + +
+Expand for a graphical overview of the tables + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `int` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `datetime(3)` | No | No | **✔️** | `now()` | +| `updatedAt` | `datetime(3)` | No | No | **✔️** | | +| `title` | `varchar(255)` | No | No | **✔️** | - | +| `content` | `varchar(191)` | No | No | No | - | +| `published` | `tinyint(1)` | No | No | **✔️** | `false` | +| `authorId` | `int` | No | No | **✔️** | - | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `int` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `varchar(191)` | No | No | No | - | +| `userId` | `int` | No | No | **✔️** | - | + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `int` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `varchar(191)` | No | No | No | - | +| `email` | `varchar(191)` | No | No | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the `DATABASE_URL` environment variable that's defined in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a Prisma data model. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this: + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime + title String @db.VarChar(255) + content String? + published Boolean @default(false) + authorId Int + + @@index([authorId]) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + + @@index([userId]) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? +} +``` + + + +Refer to the [Prisma schema reference](/orm/reference/prisma-schema-reference) for detailed information about the schema definition. + + + +Prisma's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +You will then need to add in any missing relations between your data using [relation fields](/orm/prisma-schema/data-model/relations#relation-fields): + +```prisma file=prisma/schema.prisma highlight=8,17,27,28;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime + title String @db.VarChar(255) + content String? + published Boolean @default(false) + //add-next-line + author User @relation(fields: [authorId], references: [id]) + authorId Int + + @@index([authorId]) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + //add-next-line + user User @relation(fields: [userId], references: [id]) + userId Int @unique + + @@index([userId]) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + //add-start + posts Post[] + profile Profile? + //add-end +} +``` + +After this, run introspection on your database for a second time: + +```terminal copy +npx prisma db pull +``` + +Prisma Migrate will now keep the manually added relation fields. + +Because relation fields are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database. + +In this example, the database schema follows the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models. This optimizes the ergonomics of the generated Prisma Client API. + +
+ Using custom model and field names + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(autoincrement()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(autoincrement()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-postgresql.mdx new file mode 100644 index 0000000000..3f07805358 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-postgresql.mdx @@ -0,0 +1,217 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, JavaScript, and PostgreSQL' +metaDescription: 'Introspect your existing project with Prisma ORM, JavaScript, and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-node-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE "public"."User" ( + id SERIAL PRIMARY KEY NOT NULL, + name VARCHAR(255), + email VARCHAR(255) UNIQUE NOT NULL +); + +CREATE TABLE "public"."Post" ( + id SERIAL PRIMARY KEY NOT NULL, + title VARCHAR(255) NOT NULL, + "createdAt" TIMESTAMP NOT NULL DEFAULT now(), + content TEXT, + published BOOLEAN NOT NULL DEFAULT false, + "authorId" INTEGER NOT NULL, + FOREIGN KEY ("authorId") REFERENCES "public"."User"(id) +); + +CREATE TABLE "public"."Profile" ( + id SERIAL PRIMARY KEY NOT NULL, + bio TEXT, + "userId" INTEGER UNIQUE NOT NULL, + FOREIGN KEY ("userId") REFERENCES "public"."User"(id) +); +``` + +> **Note**: Some fields are written in double-quotes to ensure PostgreSQL uses proper casing. If no double-quotes were used, PostgreSQL would just read everything as _lowercase_ characters. + +
+Expand for a graphical overview of the tables + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `SERIAL` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `VARCHAR(255)` | No | No | No | - | +| `email` | `VARCHAR(255)` | No | No | **✔️** | - | + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `SERIAL` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `TIMESTAMP` | No | No | **✔️** | `now()` | +| `title` | `VARCHAR(255)` | No | No | **✔️** | - | +| `content` | `TEXT` | No | No | No | - | +| `published` | `BOOLEAN` | No | No | **✔️** | `false` | +| `authorId` | `INTEGER` | No | **✔️** | **✔️** | - | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :-------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `SERIAL` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `TEXT` | No | No | No | - | +| `userId` | `INTEGER` | No | **✔️** | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the `DATABASE_URL` environment variable that's defined in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a data model in your Prisma schema. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database with Prisma ORM](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this (note that the fields on the models have been reordered for better readability): + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + User User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + User User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + Post Post[] + Profile Profile? +} +``` + +Prisma ORM's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +Right now, there's a few minor "issues" with the data model: + +- The `User` relation field is uppercased and therefore doesn't adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) . To express more "semantics", it would also be nice if this field was called `author` to _describe_ the relationship between `User` and `Post` better. +- The `Post` and `Profile` relation fields on `User` as well as the `User` relation field on `Profile` are all uppercased. To adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) , both fields should be lowercased to `post`, `profile` and `user`. +- Even after lowercasing, the `post` field on `User` is still slightly misnamed. That's because it actually refers to a [list](/orm/prisma-schema/data-model/models#type-modifiers) of posts – a better name therefore would be the plural form: `posts`. + +These changes are relevant for the generated Prisma Client API where using lowercased relation fields `author`, `posts`, `profile` and `user` will feel more natural and idiomatic to JavaScript/TypeScript developers. You can therefore [configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Because [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database: + +```prisma file=prisma/schema.prisma highlight=8,15,22,23;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + //edit-next-line + author User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + //edit-next-line + user User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + //edit-start + posts Post[] + profile Profile? + //edit-end +} +``` + +In this example, the database schema did follow the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models (only the virtual relation fields that were generated from introspection did not adhere to them and needed adjustment). This optimizes the ergonomics of the generated Prisma Client API. + +
+ Using custom model and field names + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(autoincrement()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(autoincrement()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-sqlserver.mdx new file mode 100644 index 0000000000..5baf9d0cf1 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-node-sqlserver.mdx @@ -0,0 +1,224 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, JavaScript, and SQL Server' +metaDescription: 'Introspect your database with Prisma ORM, JavaScript, and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-node-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-node-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE [dbo].[Post] ( + [id] INT NOT NULL IDENTITY(1,1), + [createdAt] DATETIME2 NOT NULL CONSTRAINT [Post_createdAt_df] DEFAULT CURRENT_TIMESTAMP, + [updatedAt] DATETIME2 NOT NULL, + [title] VARCHAR(255) NOT NULL, + [content] NVARCHAR(1000), + [published] BIT NOT NULL CONSTRAINT [Post_published_df] DEFAULT 0, + [authorId] INT NOT NULL, + CONSTRAINT [Post_pkey] PRIMARY KEY ([id]) +); + +CREATE TABLE [dbo].[Profile] ( + [id] INT NOT NULL IDENTITY(1,1), + [bio] NVARCHAR(1000), + [userId] INT NOT NULL, + CONSTRAINT [Profile_pkey] PRIMARY KEY ([id]), + CONSTRAINT [Profile_userId_key] UNIQUE ([userId]) +); + +CREATE TABLE [dbo].[User] ( + [id] INT NOT NULL IDENTITY(1,1), + [email] NVARCHAR(1000) NOT NULL, + [name] NVARCHAR(1000), + CONSTRAINT [User_pkey] PRIMARY KEY ([id]), + CONSTRAINT [User_email_key] UNIQUE ([email]) +); + +ALTER TABLE [dbo].[Post] ADD CONSTRAINT [Post_authorId_fkey] FOREIGN KEY ([authorId]) REFERENCES [dbo].[User]([id]) ON DELETE NO ACTION ON UPDATE CASCADE; + +ALTER TABLE [dbo].[Profile] ADD CONSTRAINT [Profile_userId_fkey] FOREIGN KEY ([userId]) REFERENCES [dbo].[User]([id]) ON DELETE NO ACTION ON UPDATE CASCADE; +``` + +
+Expand for a graphical overview of the tables + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :--------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `NVARCHAR(1000)` | No | No | No | - | +| `email` | `NVARCHAR(1000)` | No | No | **✔️** | - | + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :--------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `DATETIME2` | No | No | **✔️** | `now()` | +| `updatedAt` | `DATETIME2` | No | No | **✔️** | | +| `title` | `VARCHAR(255)` | No | No | **✔️** | - | +| `content` | `NVARCHAR(1000)` | No | No | No | - | +| `published` | `BIT` | No | No | **✔️** | `false` | +| `authorId` | `INT` | No | **✔️** | **✔️** | - | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :--------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `NVARCHAR(1000)` | No | No | No | - | +| `userId` | `INT` | No | **✔️** | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the `DATABASE_URL` environment variable that's defined in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a Prisma data model. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this (note that the fields on the models have been reordered for better readability): + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + User User @relation(fields: [authorId], references: [id]) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + User User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + Post Post[] + Profile Profile? +} +``` + +Prisma's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +Right now, there's a few minor "issues" with the data model: + +- The `User` relation field is uppercased and therefore doesn't adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) . To express more "semantics", it would also be nice if this field was called `author` to _describe_ the relationship between `User` and `Post` better. +- The `Post` and `Profile` relation fields on `User` as well as the `User` relation field on `Profile` are all uppercased. To adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) , both fields should be lowercased to `post`, `profile` and `user`. +- Even after lowercasing, the `post` field on `User` is still slightly misnamed. That's because it actually refers to a [list](/orm/prisma-schema/data-model/models#type-modifiers) of posts – a better name therefore would be the plural form: `posts`. + +These changes are relevant for the generated Prisma Client API where using lowercased relation fields `author`, `posts`, `profile` and `user` will feel more natural and idiomatic to JavaScript/TypeScript developers. You can therefore [configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Because [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database: + +```prisma file=prisma/schema.prisma highlight=7,14,22,23;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + //edit-next-line + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + //edit-next-line + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + email String @unique @db.VarChar(255) + name String? @db.VarChar(255) + //edit-start + posts Post[] + profile Profile? + //edit-end +} +``` + +In this example, the database schema did follow the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models (only the virtual relation fields that were generated from introspection did not adhere to them and needed adjustment). This optimizes the ergonomics of the generated Prisma Client API. + +
+ Using custom model and field names + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(autoincrement()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(autoincrement()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..19c1cac081 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-cockroachdb.mdx @@ -0,0 +1,217 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, TypeScript, and CockroachDB' +metaDescription: 'Introspect your database with Prisma ORM, TypeScript, and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE "User" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + name STRING(255), + email STRING(255) UNIQUE NOT NULL +); + +CREATE TABLE "Post" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + title STRING(255) UNIQUE NOT NULL, + "createdAt" TIMESTAMP NOT NULL DEFAULT now(), + content STRING, + published BOOLEAN NOT NULL DEFAULT false, + "authorId" INT8 NOT NULL, + FOREIGN KEY ("authorId") REFERENCES "User"(id) +); + +CREATE TABLE "Profile" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + bio STRING, + "userId" INT8 UNIQUE NOT NULL, + FOREIGN KEY ("userId") REFERENCES "User"(id) +); +``` + +> **Note**: Some fields are written in double quotes to ensure CockroachDB uses proper casing. If no double-quotes were used, CockroachDB would just read everything as _lowercase_ characters. + +
+Expand for a graphical overview of the tables + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------ | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT8` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `STRING(255)` | No | No | No | - | +| `email` | `STRING(255)` | No | No | **✔️** | - | + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------ | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT8` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `TIMESTAMP` | No | No | **✔️** | `now()` | +| `title` | `STRING(255)` | No | No | **✔️** | - | +| `content` | `STRING` | No | No | No | - | +| `published` | `BOOLEAN` | No | No | **✔️** | `false` | +| `authorId` | `INT8` | No | **✔️** | **✔️** | - | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT8` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `STRING` | No | No | No | - | +| `userId` | `INT8` | No | **✔️** | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the environment variable used to define the `url` in your `schema.prisma`, `DATABASE_URL`, that in our case is set in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a Prisma data model. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this: + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id BigInt @id @default(autoincrement()) + title String @unique @db.String(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId BigInt + User User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model Profile { + id BigInt @id @default(autoincrement()) + bio String? + userId BigInt @unique + User User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id BigInt @id @default(autoincrement()) + name String? @db.String(255) + email String @unique @db.String(255) + Post Post[] + Profile Profile? +} +``` + +Prisma ORM's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +Right now, there's a few minor "issues" with the data model: + +- The `User` relation field is uppercased and therefore doesn't adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) . To express more "semantics", it would also be nice if this field was called `author` to _describe_ the relationship between `User` and `Post` better. +- The `Post` and `Profile` relation fields on `User` as well as the `User` relation field on `Profile` are all uppercased. To adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) , both fields should be lowercased to `post`, `profile` and `user`. +- Even after lowercasing, the `post` field on `User` is still slightly misnamed. That's because it actually refers to a [list](/orm/prisma-schema/data-model/models#type-modifiers) of posts – a better name therefore would be the plural form: `posts`. + +These changes are relevant for the generated Prisma Client API where using lowercased relation fields `author`, `posts`, `profile` and `user` will feel more natural and idiomatic to JavaScript/TypeScript developers. You can therefore [configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Because [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database: + +```prisma file=prisma/schema.prisma highlight=8,15,22,23;edit showLineNumbers +model Post { + id BigInt @id @default(autoincrement()) + title String @unique @db.String(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId BigInt + //edit-next-line + author User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model Profile { + id BigInt @id @default(autoincrement()) + bio String? + userId BigInt @unique + //edit-next-line + user User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id BigInt @id @default(autoincrement()) + name String? @db.String(255) + email String @unique @db.String(255) + //edit-start + posts Post[] + profile Profile? + //edit-end +} +``` + +In this example, the database schema did follow the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models (only the virtual relation fields that were generated from introspection did not adhere to them and needed adjustment). This optimizes the ergonomics of the generated Prisma Client API. + +
+ Using custom model and field names + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(sequence()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(sequence()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-mysql.mdx new file mode 100644 index 0000000000..77a3c944d4 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-mysql.mdx @@ -0,0 +1,220 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, TypeScript, and MySQL' +metaDescription: 'Introspect your existing project with Prisma ORM, TypeScript, and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-typescript-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE User ( + id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, + name VARCHAR(255), + email VARCHAR(255) UNIQUE NOT NULL +); + +CREATE TABLE Post ( + id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, + title VARCHAR(255) NOT NULL, + createdAt TIMESTAMP NOT NULL DEFAULT now(), + content TEXT, + published BOOLEAN NOT NULL DEFAULT false, + authorId INTEGER NOT NULL, + FOREIGN KEY (authorId) REFERENCES User(id) +); + +CREATE TABLE Profile ( + id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, + bio TEXT, + userId INTEGER UNIQUE NOT NULL, + FOREIGN KEY (userId) REFERENCES User(id) +); +``` + +
+Expand for a graphical overview of the tables + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INTEGER` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `VARCHAR(255)` | No | No | No | - | +| `email` | `VARCHAR(255)` | No | No | **✔️** | - | + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INTEGER` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `DATETIME(3)` | No | No | **✔️** | `now()` | +| `title` | `VARCHAR(255)` | No | No | **✔️** | - | +| `content` | `TEXT` | No | No | No | - | +| `published` | `BOOLEAN` | No | No | **✔️** | `false` | +| `authorId` | `INTEGER` | No | **✔️** | **✔️** | `false` | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :-------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INTEGER` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `TEXT` | No | No | No | - | +| `userId` | `INTEGER` | No | **✔️** | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the `DATABASE_URL` environment variable that's defined in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a Prisma data model. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this (note that the fields on the models have been reordered for better readability): + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(0) + content String? @db.Text + published Boolean @default(false) + authorId Int + User User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "Post_ibfk_1") + + @@index([authorId], map: "authorId") +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? @db.Text + userId Int @unique(map: "userId") + User User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "Profile_ibfk_1") +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique(map: "email") @db.VarChar(255) + Post Post[] + Profile Profile? +} +``` + + + +Refer to the [Prisma schema reference](/orm/reference/prisma-schema-reference) for detailed information about the schema definition. + + + +Prisma ORM's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +Right now, there's a few minor "issues" with the data model: + +- The `User` relation field is uppercased and therefore doesn't adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) . To express more "semantics", it would also be nice if this field was called `author` to _describe_ the relationship between `User` and `Post` better. +- The `Post` and `Profile` relation fields on `User` as well as the `User` relation field on `Profile` are all uppercased. To adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) , both fields should be lowercased to `post`, `profile` and `user`. +- Even after lowercasing, the `post` field on `User` is still slightly misnamed. That's because it actually refers to a [list](/orm/prisma-schema/data-model/models#type-modifiers) of posts – a better name therefore would be the plural form: `posts`. + +These changes are relevant for the generated Prisma Client API where using lowercased relation fields `author`, `posts`, `profile` and `user` will feel more natural and idiomatic to JavaScript/TypeScript developers. You can therefore [configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Because [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database: + +```prisma file=prisma/schema.prisma highlight=8,17,24,25;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(0) + content String? @db.Text + published Boolean @default(false) + authorId Int + //edit-next-line + author User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "Post_ibfk_1") + + @@index([authorId], map: "authorId") +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? @db.Text + userId Int @unique(map: "userId") + //edit-next-line + user User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "Profile_ibfk_1") +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique(map: "email") @db.VarChar(255) + //edit-start + posts Post[] + profile Profile? + //edit-end +} +``` + +In this example, the database schema did follow the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models (only the virtual relation fields that were generated from introspection did not adhere to them and needed adjustment). This optimizes the ergonomics of the generated Prisma Client API. + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(autoincrement()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(autoincrement()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-planetscale.mdx new file mode 100644 index 0000000000..d140709f8f --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-planetscale.mdx @@ -0,0 +1,236 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, TypeScript, and PlanetScale' +metaDescription: 'Introspect your existing project with Prisma ORM, TypeScript, and PlanetScale' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-planetscale +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-planetscale +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE `Post` ( + `id` int NOT NULL AUTO_INCREMENT, + `createdAt` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` datetime(3) NOT NULL, + `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `content` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `published` tinyint(1) NOT NULL DEFAULT '0', + `authorId` int NOT NULL, + PRIMARY KEY (`id`), + KEY `Post_authorId_idx` (`authorId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE `Profile` ( + `id` int NOT NULL AUTO_INCREMENT, + `bio` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `userId` int NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `Profile_userId_key` (`userId`), + KEY `Profile_userId_idx` (`userId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE `User` ( + `id` int NOT NULL AUTO_INCREMENT, + `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `User_email_key` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +``` + +
+Expand for a graphical overview of the tables + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `int` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `datetime(3)` | No | No | **✔️** | `now()` | +| `updatedAt` | `datetime(3)` | No | No | **✔️** | | +| `title` | `varchar(255)` | No | No | **✔️** | - | +| `content` | `varchar(191)` | No | No | No | - | +| `published` | `tinyint(1)` | No | No | **✔️** | `false` | +| `authorId` | `int` | No | No | **✔️** | - | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `int` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `varchar(191)` | No | No | No | - | +| `userId` | `int` | No | No | **✔️** | - | + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `int` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `varchar(191)` | No | No | No | - | +| `email` | `varchar(191)` | No | No | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the `DATABASE_URL` environment variable that's defined in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a Prisma data model. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this: + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime + title String @db.VarChar(255) + content String? + published Boolean @default(false) + authorId Int + + @@index([authorId]) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + + @@index([userId]) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? +} +``` + + + +Refer to the [Prisma schema reference](/orm/reference/prisma-schema-reference) for detailed information about the schema definition. + + + +Prisma's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +You will then need to add in any missing relations between your data using [relation fields](/orm/prisma-schema/data-model/relations#relation-fields): + +```prisma file=prisma/schema.prisma highlight=8,17,27,28;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime + title String @db.VarChar(255) + content String? + published Boolean @default(false) + //add-next-line + author User @relation(fields: [authorId], references: [id]) + authorId Int + + @@index([authorId]) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + //add-next-line + user User @relation(fields: [userId], references: [id]) + userId Int @unique + + @@index([userId]) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + //add-start + posts Post[] + profile Profile? + //add-end +} +``` + +After this, run introspection on your database for a second time: + +```terminal copy +npx prisma db pull +``` + +Prisma Migrate will now keep the manually added relation fields. + +Because relation fields are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database. + +In this example, the database schema follows the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models. This optimizes the ergonomics of the generated Prisma Client API. + +
+ Using custom model and field names + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(autoincrement()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(autoincrement()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-postgresql.mdx new file mode 100644 index 0000000000..ea3d7ef364 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-postgresql.mdx @@ -0,0 +1,216 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, TypeScript, and PostgreSQL' +metaDescription: 'Introspect your existing project with Prisma ORM, TypeScript, and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE "public"."User" ( + id SERIAL PRIMARY KEY NOT NULL, + name VARCHAR(255), + email VARCHAR(255) UNIQUE NOT NULL +); + +CREATE TABLE "public"."Post" ( + id SERIAL PRIMARY KEY NOT NULL, + title VARCHAR(255) NOT NULL, + "createdAt" TIMESTAMP NOT NULL DEFAULT now(), + content TEXT, + published BOOLEAN NOT NULL DEFAULT false, + "authorId" INTEGER NOT NULL, + FOREIGN KEY ("authorId") REFERENCES "public"."User"(id) +); + +CREATE TABLE "public"."Profile" ( + id SERIAL PRIMARY KEY NOT NULL, + bio TEXT, + "userId" INTEGER UNIQUE NOT NULL, + FOREIGN KEY ("userId") REFERENCES "public"."User"(id) +); +``` + +> **Note**: Some fields are written in double-quotes to ensure PostgreSQL uses proper casing. If no double-quotes were used, PostgreSQL would just read everything as _lowercase_ characters. + +
+Expand for a graphical overview of the tables + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `SERIAL` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `VARCHAR(255)` | No | No | No | - | +| `email` | `VARCHAR(255)` | No | No | **✔️** | - | + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `SERIAL` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `TIMESTAMP` | No | No | **✔️** | `now()` | +| `title` | `VARCHAR(255)` | No | No | **✔️** | - | +| `content` | `TEXT` | No | No | No | - | +| `published` | `BOOLEAN` | No | No | **✔️** | `false` | +| `authorId` | `INTEGER` | No | **✔️** | **✔️** | - | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :-------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `SERIAL` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `TEXT` | No | No | No | - | +| `userId` | `INTEGER` | No | **✔️** | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the `DATABASE_URL` environment variable that's defined in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a data model in your Prisma schema. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database with Prisma ORM](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this (note that the fields on the models have been reordered for better readability): + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + User User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + User User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + Post Post[] + Profile Profile? +} +``` + +Prisma ORM's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +Right now, there's a few minor "issues" with the data model: + +- The `User` relation field is uppercased and therefore doesn't adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) . To express more "semantics", it would also be nice if this field was called `author` to _describe_ the relationship between `User` and `Post` better. +- The `Post` and `Profile` relation fields on `User` as well as the `User` relation field on `Profile` are all uppercased. To adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) , both fields should be lowercased to `post`, `profile` and `user`. +- Even after lowercasing, the `post` field on `User` is still slightly misnamed. That's because it actually refers to a [list](/orm/prisma-schema/data-model/models#type-modifiers) of posts – a better name therefore would be the plural form: `posts`. + +These changes are relevant for the generated Prisma Client API where using lowercased relation fields `author`, `posts`, `profile` and `user` will feel more natural and idiomatic to JavaScript/TypeScript developers. You can therefore [configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Because [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database: + +```prisma file=prisma/schema.prisma highlight=8,15,22,23;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + //edit-next-line + author User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + //edit-next-line + user User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + //edit-start + posts Post[] + profile Profile? + //edit-end +} +``` + +In this example, the database schema did follow the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models (only the virtual relation fields that were generated from introspection did not adhere to them and needed adjustment). This optimizes the ergonomics of the generated Prisma Client API. + +
+ Using custom model and field names + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(autoincrement()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(autoincrement()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-sqlserver.mdx new file mode 100644 index 0000000000..5e376effef --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/150-introspection-typescript-sqlserver.mdx @@ -0,0 +1,224 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection with Prisma ORM, TypeScript, and SQL Server' +metaDescription: 'Introspect your existing project with Prisma ORM, TypeScript, and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection- +--- + + +## Introspect your database with Prisma ORM + +For the purpose of this guide, we'll use a demo SQL schema with three tables: + +```sql no-lines +CREATE TABLE [dbo].[Post] ( + [id] INT NOT NULL IDENTITY(1,1), + [createdAt] DATETIME2 NOT NULL CONSTRAINT [Post_createdAt_df] DEFAULT CURRENT_TIMESTAMP, + [updatedAt] DATETIME2 NOT NULL, + [title] VARCHAR(255) NOT NULL, + [content] NVARCHAR(1000), + [published] BIT NOT NULL CONSTRAINT [Post_published_df] DEFAULT 0, + [authorId] INT NOT NULL, + CONSTRAINT [Post_pkey] PRIMARY KEY ([id]) +); + +CREATE TABLE [dbo].[Profile] ( + [id] INT NOT NULL IDENTITY(1,1), + [bio] NVARCHAR(1000), + [userId] INT NOT NULL, + CONSTRAINT [Profile_pkey] PRIMARY KEY ([id]), + CONSTRAINT [Profile_userId_key] UNIQUE ([userId]) +); + +CREATE TABLE [dbo].[User] ( + [id] INT NOT NULL IDENTITY(1,1), + [email] NVARCHAR(1000) NOT NULL, + [name] NVARCHAR(1000), + CONSTRAINT [User_pkey] PRIMARY KEY ([id]), + CONSTRAINT [User_email_key] UNIQUE ([email]) +); + +ALTER TABLE [dbo].[Post] ADD CONSTRAINT [Post_authorId_fkey] FOREIGN KEY ([authorId]) REFERENCES [dbo].[User]([id]) ON DELETE NO ACTION ON UPDATE CASCADE; + +ALTER TABLE [dbo].[Profile] ADD CONSTRAINT [Profile_userId_fkey] FOREIGN KEY ([userId]) REFERENCES [dbo].[User]([id]) ON DELETE NO ACTION ON UPDATE CASCADE; +``` + +
+Expand for a graphical overview of the tables + +**User** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :--------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT` | **✔️** | No | **✔️** | _autoincrementing_ | +| `name` | `NVARCHAR(1000)` | No | No | No | - | +| `email` | `NVARCHAR(1000)` | No | No | **✔️** | - | + +**Post** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :--------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT` | **✔️** | No | **✔️** | _autoincrementing_ | +| `createdAt` | `DATETIME2` | No | No | **✔️** | `now()` | +| `updatedAt` | `DATETIME2` | No | No | **✔️** | | +| `title` | `VARCHAR(255)` | No | No | **✔️** | - | +| `content` | `NVARCHAR(1000)` | No | No | No | - | +| `published` | `BIT` | No | No | **✔️** | `false` | +| `authorId` | `INT` | No | **✔️** | **✔️** | - | + +**Profile** + +| Column name | Type | Primary key | Foreign key | Required | Default | +| :---------- | :--------------- | :---------- | :---------- | :------- | :----------------- | +| `id` | `INT` | **✔️** | No | **✔️** | _autoincrementing_ | +| `bio` | `NVARCHAR(1000)` | No | No | No | - | +| `userId` | `INT` | No | **✔️** | **✔️** | - | + +
+ +As a next step, you will introspect your database. The result of the introspection will be a [data model](/orm/prisma-schema/data-model/models) inside your Prisma schema. + +Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command reads the `DATABASE_URL` environment variable that's defined in `.env` and connects to your database. Once the connection is established, it introspects the database (i.e. it _reads the database schema_). It then translates the database schema from SQL into a Prisma data model. + +After the introspection is complete, your Prisma schema is updated: + +![Introspect your database](/img/getting-started/prisma-db-pull-generate-schema.png) + +The data model now looks similar to this (note that the fields on the models have been reordered for better readability): + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + User User @relation(fields: [authorId], references: [id]) +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + User User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + Post Post[] + Profile Profile? +} +``` + +Prisma's data model is a declarative representation of your database schema and serves as the foundation for the generated Prisma Client library. Your Prisma Client instance will expose queries that are _tailored_ to these models. + +Right now, there's a few minor "issues" with the data model: + +- The `User` relation field is uppercased and therefore doesn't adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) . To express more "semantics", it would also be nice if this field was called `author` to _describe_ the relationship between `User` and `Post` better. +- The `Post` and `Profile` relation fields on `User` as well as the `User` relation field on `Profile` are all uppercased. To adhere to Prisma's [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions-1) , both fields should be lowercased to `post`, `profile` and `user`. +- Even after lowercasing, the `post` field on `User` is still slightly misnamed. That's because it actually refers to a [list](/orm/prisma-schema/data-model/models#type-modifiers) of posts – a better name therefore would be the plural form: `posts`. + +These changes are relevant for the generated Prisma Client API where using lowercased relation fields `author`, `posts`, `profile` and `user` will feel more natural and idiomatic to JavaScript/TypeScript developers. You can therefore [configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Because [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) are _virtual_ (i.e. they _do not directly manifest in the database_), you can manually rename them in your Prisma schema without touching the database: + +```prisma file=prisma/schema.prisma highlight=7,14,22,23;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + //edit-next-line + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + //edit-next-line + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + email String @unique @db.VarChar(255) + name String? @db.VarChar(255) + //edit-start + posts Post[] + profile Profile? + //edit-end +} +``` + +In this example, the database schema did follow the [naming conventions](/orm/reference/prisma-schema-reference#naming-conventions) for Prisma ORM models (only the virtual relation fields that were generated from introspection did not adhere to them and needed adjustment). This optimizes the ergonomics of the generated Prisma Client API. + +
+ Using custom model and field names + +Sometimes though, you may want to make additional changes to the names of the columns and tables that are exposed in the Prisma Client API. A common example is to translate _snake_case_ notation which is often used in database schemas into _PascalCase_ and _camelCase_ notations which feel more natural for JavaScript/TypeScript developers. + +Assume you obtained the following model from introspection that's based on _snake_case_ notation: + +```prisma no-lines +model my_user { + user_id Int @id @default(autoincrement()) + first_name String? + last_name String @unique +} +``` + +If you generated a Prisma Client API for this model, it would pick up the _snake_case_ notation in its API: + +```ts no-lines +const user = await prisma.my_user.create({ + data: { + first_name: 'Alice', + last_name: 'Smith', + }, +}) +``` + +If you don't want to use the table and column names from your database in your Prisma Client API, you can configure them with [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections): + +```prisma no-lines +model MyUser { + userId Int @id @default(autoincrement()) @map("user_id") + firstName String? @map("first_name") + lastName String @unique @map("last_name") + + @@map("my_user") +} +``` + +With this approach, you can name your model and its fields whatever you like and use the `@map` (for field names) and `@@map` (for models names) to point to the underlying tables and columns. Your Prisma Client API now looks as follows: + +```ts no-lines +const user = await prisma.myUser.create({ + data: { + firstName: 'Alice', + lastName: 'Smith', + }, +}) +``` + +Learn more about this on the [Configuring your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) page. + +
diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-cockroachdb.mdx new file mode 100644 index 0000000000..014ebf6831 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-cockroachdb.mdx @@ -0,0 +1,84 @@ +--- +title: 'Baseline your database' +metaTitle: 'Baseline with Prisma ORM, JavaScript, and CockroachDB' +metaDescription: 'Baseline your database with Prisma ORM, JavaScript, and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-node-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database- +--- + + +## Create an initial migration + +To use Prisma Migrate with the database you introspected in the last section, you will need to [baseline your database](/orm/prisma-migrate/getting-started). + +Baselining refers to initializing your migration history for a database that might already contain data and **cannot be reset**, such as your production database. Baselining tells Prisma Migrate to assume that one or more migrations have already been applied to your database. + +To baseline your database, use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to compare your schema and database, and save the output into a SQL file. + +First, create a `migrations` directory and add a directory inside with your preferred name for the migration. In this example, we will use `0_init` as the migration name: + +```terminal +mkdir -p prisma/migrations/0_init +``` + + + +`-p` will recursively create any missing folders in the path you provide. + + + +Next, generate the migration file with `prisma migrate diff`. Use the following arguments: + +- `--from-empty`: assumes the data model you're migrating from is empty +- `--to-schema-datamodel`: the current database state using the URL in the `datasource` block +- `--script`: output a SQL script + +```terminal wrap +npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql +``` + +## Review the migration + +The command will generate a migration that should resemble the following script: + +```sql file=prisma/migrations/0_init/migration.sql +CREATE TABLE "User" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + name STRING(255), + email STRING(255) UNIQUE NOT NULL +); + +CREATE TABLE "Post" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + title STRING(255) UNIQUE NOT NULL, + "createdAt" TIMESTAMP NOT NULL DEFAULT now(), + content STRING, + published BOOLEAN NOT NULL DEFAULT false, + "authorId" INT8 NOT NULL, + FOREIGN KEY ("authorId") REFERENCES "User"(id) +); + +CREATE TABLE "Profile" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + bio STRING, + "userId" INT8 UNIQUE NOT NULL, + FOREIGN KEY ("userId") REFERENCES "User"(id) +); +``` + +Review the SQL migration file to ensure everything is correct. + +Next, mark the migration as applied using `prisma migrate resolve` with the `--applied` argument. + +```terminal +npx prisma migrate resolve --applied 0_init +``` + +The command will mark `0_init` as applied by adding it to the `_prisma_migrations` table. + +You now have a baseline for your current database schema. To make further changes to your database schema, you can update your Prisma schema and use `prisma migrate dev` to apply the changes to your database. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-mysql.mdx new file mode 100644 index 0000000000..6afa8ff16d --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-mysql.mdx @@ -0,0 +1,100 @@ +--- +title: 'Baseline your database' +metaTitle: 'Baseline with Prisma ORM, JavaScript, and MySQL' +metaDescription: 'Baseline your database with Prisma ORM, JavaScript, and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-node-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-node-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database- +--- + + +## Create an initial migration + +To use Prisma Migrate with the database you introspected in the last section, you will need to [baseline your database](/orm/prisma-migrate/getting-started). + +Baselining refers to initializing your migration history for a database that might already contain data and **cannot be reset**, such as your production database. Baselining tells Prisma Migrate to assume that one or more migrations have already been applied to your database. + +To baseline your database, use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to compare your schema and database, and save the output into a SQL file. + +First, create a `migrations` directory and add a directory inside with your preferred name for the migration. In this example, we will use `0_init` as the migration name: + +```terminal +mkdir -p prisma/migrations/0_init +``` + + + +`-p` will recursively create any missing folders in the path you provide. + + + +Next, generate the migration file with `prisma migrate diff`. Use the following arguments: + +- `--from-empty`: assumes the data model you're migrating from is empty +- `--to-schema-datamodel`: the current database state using the URL in the `datasource` block +- `--script`: output a SQL script + +```terminal wrap +npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql +``` + +## Review the migration + +The command will generate a migration that should resemble the following script: + +```sql file=prisma/migrations/0_init/migration.sql +-- CreateTable +CREATE TABLE `Post` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `title` VARCHAR(255) NOT NULL, + `createdAt` TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0), + `content` TEXT NULL, + `published` BOOLEAN NOT NULL DEFAULT false, + `authorId` INTEGER NOT NULL, + + INDEX `authorId`(`authorId`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Profile` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `bio` TEXT NULL, + `userId` INTEGER NOT NULL, + + UNIQUE INDEX `userId`(`userId`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `User` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255) NULL, + `email` VARCHAR(255) NOT NULL, + + UNIQUE INDEX `email`(`email`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- AddForeignKey +ALTER TABLE `Post` ADD CONSTRAINT `Post_ibfk_1` FOREIGN KEY (`authorId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +-- AddForeignKey +ALTER TABLE `Profile` ADD CONSTRAINT `Profile_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +``` + +Review the SQL migration file to ensure everything is correct. + +Next, mark the migration as applied using `prisma migrate resolve` with the `--applied` argument. + +```terminal +npx prisma migrate resolve --applied 0_init +``` + +The command will mark `0_init` as applied by adding it to the `_prisma_migrations` table. + +You now have a baseline for your current database schema. To make further changes to your database schema, you can update your Prisma schema and use `prisma migrate dev` to apply the changes to your database. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-postgresql.mdx new file mode 100644 index 0000000000..a1876a202e --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-postgresql.mdx @@ -0,0 +1,103 @@ +--- +title: 'Baseline your database' +metaTitle: 'Baseline with Prisma ORM, JavaScript, and PostgreSQL' +metaDescription: 'Baseline your database with Prisma ORM, JavaScript, and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-node-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-node-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database- +--- + + +## Create an initial migration + +To use Prisma Migrate with the database you introspected in the last section, you will need to [baseline your database](/orm/prisma-migrate/getting-started). + +Baselining refers to initializing your migration history for a database that might already contain data and **cannot be reset**, such as your production database. Baselining tells Prisma Migrate to assume that one or more migrations have already been applied to your database. + +To baseline your database, use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to compare your schema and database, and save the output into a SQL file. + +First, create a `migrations` directory and add a directory inside with your preferred name for the migration. In this example, we will use `0_init` as the migration name: + +```terminal +mkdir -p prisma/migrations/0_init +``` + + + +`-p` will recursively create any missing folders in the path you provide. + + + +Next, generate the migration file with `prisma migrate diff`. Use the following arguments: + +- `--from-empty`: assumes the data model you're migrating from is empty +- `--to-schema-datamodel`: the current database state using the URL in the `datasource` block +- `--script`: output a SQL script + +```terminal wrap +npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql +``` + +## Review the migration + +The command will generate a migration that should resemble the following script: + +```sql file=prisma/migrations/0_init/migration.sql +-- CreateTable +CREATE TABLE "Post" ( + "id" SERIAL NOT NULL, + "title" VARCHAR(255) NOT NULL, + "createdAt" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "content" TEXT, + "published" BOOLEAN NOT NULL DEFAULT false, + "authorId" INTEGER NOT NULL, + + CONSTRAINT "Post_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Profile" ( + "id" SERIAL NOT NULL, + "bio" TEXT, + "userId" INTEGER NOT NULL, + + CONSTRAINT "Profile_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "name" VARCHAR(255), + "email" VARCHAR(255) NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Profile_userId_key" ON "Profile"("userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- AddForeignKey +ALTER TABLE "Post" ADD CONSTRAINT "Post_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Profile" ADD CONSTRAINT "Profile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; +``` + +Review the SQL migration file to ensure everything is correct. + +Next, mark the migration as applied using `prisma migrate resolve` with the `--applied` argument. + +```terminal +npx prisma migrate resolve --applied 0_init +``` + +The command will mark `0_init` as applied by adding it to the `_prisma_migrations` table. + +You now have a baseline for your current database schema. To make further changes to your database schema, you can update your Prisma schema and use `prisma migrate dev` to apply the changes to your database. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-sqlserver.mdx new file mode 100644 index 0000000000..9a16301461 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-node-sqlserver.mdx @@ -0,0 +1,92 @@ +--- +title: 'Baseline your database' +metaTitle: 'Baseline with Prisma ORM, JavaScript, and SQL Server' +metaDescription: 'Baseline your database with Prisma ORM, JavaScript, and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-node-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-node-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database- +--- + + +## Create an initial migration + +To use Prisma Migrate with the database you introspected in the last section, you will need to [baseline your database](/orm/prisma-migrate/getting-started). + +Baselining refers to initializing your migration history for a database that might already contain data and **cannot be reset**, such as your production database. Baselining tells Prisma Migrate to assume that one or more migrations have already been applied to your database. + +To baseline your database, use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to compare your schema and database, and save the output into a SQL file. + +First, create a `migrations` directory and add a directory inside with your preferred name for the migration. In this example, we will use `0_init` as the migration name: + +```terminal +mkdir -p prisma/migrations/0_init +``` + + + +`-p` will recursively create any missing folders in the path you provide. + + + +Next, generate the migration file with `prisma migrate diff`. Use the following arguments: + +- `--from-empty`: assumes the data model you're migrating from is empty +- `--to-schema-datamodel`: the current database state using the URL in the `datasource` block +- `--script`: output a SQL script + +```terminal wrap +npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql +``` + +## Review the migration + +The command will generate a migration that should resemble the following script: + +```sql file=prisma/migrations/0_init/migration.sql +CREATE TABLE [dbo].[Post] ( + [id] INT NOT NULL IDENTITY(1,1), + [createdAt] DATETIME2 NOT NULL CONSTRAINT [Post_createdAt_df] DEFAULT CURRENT_TIMESTAMP, + [updatedAt] DATETIME2 NOT NULL, + [title] VARCHAR(255) NOT NULL, + [content] NVARCHAR(1000), + [published] BIT NOT NULL CONSTRAINT [Post_published_df] DEFAULT 0, + [authorId] INT NOT NULL, + CONSTRAINT [Post_pkey] PRIMARY KEY ([id]) +); + +CREATE TABLE [dbo].[Profile] ( + [id] INT NOT NULL IDENTITY(1,1), + [bio] NVARCHAR(1000), + [userId] INT NOT NULL, + CONSTRAINT [Profile_pkey] PRIMARY KEY ([id]), + CONSTRAINT [Profile_userId_key] UNIQUE ([userId]) +); + +CREATE TABLE [dbo].[User] ( + [id] INT NOT NULL IDENTITY(1,1), + [email] NVARCHAR(1000) NOT NULL, + [name] NVARCHAR(1000), + CONSTRAINT [User_pkey] PRIMARY KEY ([id]), + CONSTRAINT [User_email_key] UNIQUE ([email]) +); + +ALTER TABLE [dbo].[Post] ADD CONSTRAINT [Post_authorId_fkey] FOREIGN KEY ([authorId]) REFERENCES [dbo].[User]([id]) ON DELETE NO ACTION ON UPDATE CASCADE; + +ALTER TABLE [dbo].[Profile] ADD CONSTRAINT [Profile_userId_fkey] FOREIGN KEY ([userId]) REFERENCES [dbo].[User]([id]) ON DELETE NO ACTION ON UPDATE CASCADE; +``` + +Review the SQL migration file to ensure everything is correct. + +Next, mark the migration as applied using `prisma migrate resolve` with the `--applied` argument. + +```terminal +npx prisma migrate resolve --applied 0_init +``` + +The command will mark `0_init` as applied by adding it to the `_prisma_migrations` table. + +You now have a baseline for your current database schema. To make further changes to your database schema, you can update your Prisma schema and use `prisma migrate dev` to apply the changes to your database. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..28b9d4e19b --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-cockroachdb.mdx @@ -0,0 +1,73 @@ +--- +title: 'Baseline your database' +metaTitle: 'Baseline with Prisma ORM, TypeScript, and CockroachDB' +metaDescription: 'Baseline your database with Prisma ORM, TypeScript, and CockroachDB' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database- +--- + + +## Create an initial migration + +To use Prisma Migrate with the database you introspected in the last section, you will need to [baseline your database](/orm/prisma-migrate/getting-started). + +Baselining refers to initializing your migration history for a database that might already contain data and **cannot be reset**, such as your production database. Baselining tells Prisma Migrate to assume that one or more migrations have already been applied to your database. + +To baseline your database, use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to compare your schema and database, and save the output into a SQL file. + +First, create a `migrations` directory and add a directory inside with your preferred name for the migration. In this example, we will use `0_init` as the migration name: + +```terminal +mkdir -p prisma/migrations/0_init +``` + + + +`-p` will recursively create any missing folders in the path you provide. + + + +Next, generate the migration file with `prisma migrate diff`. Use the following arguments: + +- `--from-empty`: assumes the data model you're migrating from is empty +- `--to-schema-datamodel`: the current database state using the URL in the `datasource` block +- `--script`: output a SQL script + +```terminal wrap +npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql +``` + +## Review the migration + +The command will generate a migration that should resemble the following script: + + +```sql file=prisma/migrations/0_init/migration.sql +CREATE TABLE "User" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + name STRING(255), + email STRING(255) UNIQUE NOT NULL +); + +CREATE TABLE "Post" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + title STRING(255) UNIQUE NOT NULL, + "createdAt" TIMESTAMP NOT NULL DEFAULT now(), + content STRING, + published BOOLEAN NOT NULL DEFAULT false, + "authorId" INT8 NOT NULL, + FOREIGN KEY ("authorId") REFERENCES "User"(id) +); + +CREATE TABLE "Profile" ( + id INT8 PRIMARY KEY DEFAULT unique_rowid(), + bio STRING, + "userId" INT8 UNIQUE NOT NULL, + FOREIGN KEY ("userId") REFERENCES "User"(id) +); +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-mysql.mdx new file mode 100644 index 0000000000..eb47aae9d0 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-mysql.mdx @@ -0,0 +1,101 @@ +--- +title: 'Baseline your database' +metaTitle: 'Baseline with Prisma ORM, TypeScript, and MySQL' +metaDescription: 'Baseline your database with Prisma ORM, TypeScript, and MySQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database- +--- + + +## Create an initial migration + +To use Prisma Migrate with the database you introspected in the last section, you will need to [baseline your database](/orm/prisma-migrate/getting-started). + +Baselining refers to initializing your migration history for a database that might already contain data and **cannot be reset**, such as your production database. Baselining tells Prisma Migrate to assume that one or more migrations have already been applied to your database. + +To baseline your database, use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to compare your schema and database, and save the output into a SQL file. + +First, create a `migrations` directory and add a directory inside with your preferred name for the migration. In this example, we will use `0_init` as the migration name: + +```terminal +mkdir -p prisma/migrations/0_init +``` + + + +`-p` will recursively create any missing folders in the path you provide. + + + +Next, generate the migration file with `prisma migrate diff`. Use the following arguments: + +- `--from-empty`: assumes the data model you're migrating from is empty +- `--to-schema-datamodel`: the current database state using the URL in the `datasource` block +- `--script`: output a SQL script + +```terminal wrap +npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql +``` + +## Review the migration + +The command will generate a migration that should resemble the following script: + +```sql file=prisma/migrations/0_init/migration.sql +-- CreateTable +CREATE TABLE `Post` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `title` VARCHAR(255) NOT NULL, + `createdAt` TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0), + `content` TEXT NULL, + `published` BOOLEAN NOT NULL DEFAULT false, + `authorId` INTEGER NOT NULL, + + INDEX `authorId`(`authorId`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Profile` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `bio` TEXT NULL, + `userId` INTEGER NOT NULL, + + UNIQUE INDEX `userId`(`userId`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `User` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255) NULL, + `email` VARCHAR(255) NOT NULL, + + UNIQUE INDEX `email`(`email`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- AddForeignKey +ALTER TABLE `Post` ADD CONSTRAINT `Post_ibfk_1` FOREIGN KEY (`authorId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +-- AddForeignKey +ALTER TABLE `Profile` ADD CONSTRAINT `Profile_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +``` + + +Review the SQL migration file to ensure everything is correct. + +Next, mark the migration as applied using `prisma migrate resolve` with the `--applied` argument. + +```terminal +npx prisma migrate resolve --applied 0_init +``` + +The command will mark `0_init` as applied by adding it to the `_prisma_migrations` table. + +You now have a baseline for your current database schema. To make further changes to your database schema, you can update your Prisma schema and use `prisma migrate dev` to apply the changes to your database. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-postgresql.mdx new file mode 100644 index 0000000000..e346def4b9 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-postgresql.mdx @@ -0,0 +1,102 @@ +--- +title: 'Baseline your database' +metaTitle: 'Baseline with Prisma ORM, TypeScript, and PostgreSQL' +metaDescription: 'Baseline your database with Prisma ORM, TypeScript, and PostgreSQL' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database- +--- + + +## Create an initial migration + +To use Prisma Migrate with the database you introspected in the last section, you will need to [baseline your database](/orm/prisma-migrate/getting-started). + +Baselining refers to initializing your migration history for a database that might already contain data and **cannot be reset**, such as your production database. Baselining tells Prisma Migrate to assume that one or more migrations have already been applied to your database. + +To baseline your database, use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to compare your schema and database, and save the output into a SQL file. + +First, create a `migrations` directory and add a directory inside with your preferred name for the migration. In this example, we will use `0_init` as the migration name: + +```terminal +mkdir -p prisma/migrations/0_init +``` + + + +`-p` will recursively create any missing folders in the path you provide. + + + +Next, generate the migration file with `prisma migrate diff`. Use the following arguments: + +- `--from-empty`: assumes the data model you're migrating from is empty +- `--to-schema-datamodel`: the current database state using the URL in the `datasource` block +- `--script`: output a SQL script + +```terminal wrap +npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql +``` + +## Review the migration + +The command will generate a migration that should resemble the following script: + +```sql file=prisma/migrations/0_init/migration.sql +-- CreateTable +CREATE TABLE "Post" ( + "id" SERIAL NOT NULL, + "title" VARCHAR(255) NOT NULL, + "createdAt" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "content" TEXT, + "published" BOOLEAN NOT NULL DEFAULT false, + "authorId" INTEGER NOT NULL, + + CONSTRAINT "Post_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Profile" ( + "id" SERIAL NOT NULL, + "bio" TEXT, + "userId" INTEGER NOT NULL, + + CONSTRAINT "Profile_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "name" VARCHAR(255), + "email" VARCHAR(255) NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Profile_userId_key" ON "Profile"("userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- AddForeignKey +ALTER TABLE "Post" ADD CONSTRAINT "Post_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Profile" ADD CONSTRAINT "Profile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; +``` + +Review the SQL migration file to ensure everything is correct. + +Next, mark the migration as applied using `prisma migrate resolve` with the `--applied` argument. + +```terminal +npx prisma migrate resolve --applied 0_init +``` + +The command will mark `0_init` as applied by adding it to the `_prisma_migrations` table. + +You now have a baseline for your current database schema. To make further changes to your database schema, you can update your Prisma schema and use `prisma migrate dev` to apply the changes to your database. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-sqlserver.mdx new file mode 100644 index 0000000000..eacd8a1f2e --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/170-baseline-your-database-typescript-sqlserver.mdx @@ -0,0 +1,92 @@ +--- +title: 'Baseline your database' +metaTitle: 'Baseline with Prisma ORM, TypeScript, and SQL Server' +metaDescription: 'Baseline your database with Prisma ORM, TypeScript, and SQL Server' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database- +--- + + +## Create an initial migration + +To use Prisma Migrate with the database you introspected in the last section, you will need to [baseline your database](/orm/prisma-migrate/getting-started). + +Baselining refers to initializing your migration history for a database that might already contain data and **cannot be reset**, such as your production database. Baselining tells Prisma Migrate to assume that one or more migrations have already been applied to your database. + +To baseline your database, use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to compare your schema and database, and save the output into a SQL file. + +First, create a `migrations` directory and add a directory inside with your preferred name for the migration. In this example, we will use `0_init` as the migration name: + +```terminal +mkdir -p prisma/migrations/0_init +``` + + + +`-p` will recursively create any missing folders in the path you provide. + + + +Next, generate the migration file with `prisma migrate diff`. Use the following arguments: + +- `--from-empty`: assumes the data model you're migrating from is empty +- `--to-schema-datamodel`: the current database state using the URL in the `datasource` block +- `--script`: output a SQL script + +```terminal wrap +npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql +``` + +## Review the migration + +The command will generate a migration that should resemble the following script: + +```sql file=prisma/migrations/0_init/migration.sql +CREATE TABLE [dbo].[Post] ( + [id] INT NOT NULL IDENTITY(1,1), + [createdAt] DATETIME2 NOT NULL CONSTRAINT [Post_createdAt_df] DEFAULT CURRENT_TIMESTAMP, + [updatedAt] DATETIME2 NOT NULL, + [title] VARCHAR(255) NOT NULL, + [content] NVARCHAR(1000), + [published] BIT NOT NULL CONSTRAINT [Post_published_df] DEFAULT 0, + [authorId] INT NOT NULL, + CONSTRAINT [Post_pkey] PRIMARY KEY ([id]) +); + +CREATE TABLE [dbo].[Profile] ( + [id] INT NOT NULL IDENTITY(1,1), + [bio] NVARCHAR(1000), + [userId] INT NOT NULL, + CONSTRAINT [Profile_pkey] PRIMARY KEY ([id]), + CONSTRAINT [Profile_userId_key] UNIQUE ([userId]) +); + +CREATE TABLE [dbo].[User] ( + [id] INT NOT NULL IDENTITY(1,1), + [email] NVARCHAR(1000) NOT NULL, + [name] NVARCHAR(1000), + CONSTRAINT [User_pkey] PRIMARY KEY ([id]), + CONSTRAINT [User_email_key] UNIQUE ([email]) +); + +ALTER TABLE [dbo].[Post] ADD CONSTRAINT [Post_authorId_fkey] FOREIGN KEY ([authorId]) REFERENCES [dbo].[User]([id]) ON DELETE NO ACTION ON UPDATE CASCADE; + +ALTER TABLE [dbo].[Profile] ADD CONSTRAINT [Profile_userId_fkey] FOREIGN KEY ([userId]) REFERENCES [dbo].[User]([id]) ON DELETE NO ACTION ON UPDATE CASCADE; +``` + +Review the SQL migration file to ensure everything is correct. + +Next, mark the migration as applied using `prisma migrate resolve` with the `--applied` argument. + +```terminal +npx prisma migrate resolve --applied 0_init +``` + +The command will mark `0_init` as applied by adding it to the `_prisma_migrations` table. + +You now have a baseline for your current database schema. To make further changes to your database schema, you can update your Prisma schema and use `prisma migrate dev` to apply the changes to your database. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-cockroachdb.mdx new file mode 100644 index 0000000000..4855014e5e --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-cockroachdb.mdx @@ -0,0 +1,36 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using JavaScript and CockroachDB' +metaDescription: 'Install and generate Prisma Client in your existing JavaScript and CockroachDB project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-node-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-mysql.mdx new file mode 100644 index 0000000000..00ff39a66e --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-mysql.mdx @@ -0,0 +1,36 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using JavaScript and MySQL' +metaDescription: 'Install and generate Prisma Client in your existing JavaScript and MySQL project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-node-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-node-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-planetscale.mdx new file mode 100644 index 0000000000..e7e8295927 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-planetscale.mdx @@ -0,0 +1,36 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using JavaScript and PlanetScale' +metaDescription: 'Install and generate Prisma Client in your existing JavaScript and PlanetScale project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-node-planetscale +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-node-planetscale +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-postgresql.mdx new file mode 100644 index 0000000000..f2082114fd --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-postgresql.mdx @@ -0,0 +1,36 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using JavaScript and PostgreSQL' +metaDescription: 'Install and generate Prisma Client in your existing JavaScript and PostgreSQL project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-node-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-node-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-sqlserver.mdx new file mode 100644 index 0000000000..f5c7c8cc92 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-node-sqlserver.mdx @@ -0,0 +1,36 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using JavaScript and SQL Server' +metaDescription: 'Install and generate Prisma Client in your existing JavaScript and SQL Server project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-node-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-node-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..e45fdbe404 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-cockroachdb.mdx @@ -0,0 +1,36 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using TypeScript and CockroachDB' +metaDescription: 'Install and generate Prisma Client in your existing TypeScript and CockroachDB project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-mysql.mdx new file mode 100644 index 0000000000..8df45441b6 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-mysql.mdx @@ -0,0 +1,36 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using TypeScript and MySQL' +metaDescription: 'Install and generate Prisma Client in your existing TypeScript and MySQL project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-typescript-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-typescript-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-planetscale.mdx new file mode 100644 index 0000000000..87387a0974 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-planetscale.mdx @@ -0,0 +1,36 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using TypeScript and PlanetScale' +metaDescription: 'Install and generate Prisma Client in your existing TypeScript and PlanetScale project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-planetscale +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-typescript-planetscale +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-postgresql.mdx new file mode 100644 index 0000000000..02dfd13c29 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-postgresql.mdx @@ -0,0 +1,35 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using TypeScript and PostgreSQL' +metaDescription: 'Install and generate Prisma Client in your existing TypeScript and PostgreSQL project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-typescript-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-sqlserver.mdx new file mode 100644 index 0000000000..cab5973b42 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/200-install-prisma-client-typescript-sqlserver.mdx @@ -0,0 +1,36 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project using TypeScript and SQL Server' +metaDescription: 'Install and generate Prisma Client in your existing TypeScript and SQL Server project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-typescript-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client- +--- + + + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +Notice that the [`@prisma/client` node module](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) references a folder named `.prisma/client`. The `.prisma/client` folder contains your generated Prisma Client, and is modified each time you change the schema and run the following command: + +```terminal copy +npx prisma generate +``` + +This command reads your Prisma schema and generates your Prisma Client library: + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +The `@prisma/client` node module references a folder named `.prisma/client`, which contains your unique, generated Prisma Client: + +![The .prisma and @prisma folders](/img/getting-started/prisma-client-node-module.png) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-cockroachdb.mdx new file mode 100644 index 0000000000..eeda620b41 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-cockroachdb.mdx @@ -0,0 +1,122 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing CockroachDB database with JavaScript and Prisma ORM' +metaDescription: 'Write data to and query the CockroachDB database with your JavaScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-node-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-node-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +```js file=index.js +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { title: 'Hello World' }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-mysql.mdx new file mode 100644 index 0000000000..832d645089 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-mysql.mdx @@ -0,0 +1,124 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing MySQL database with JavaScript and Prisma ORM' +metaDescription: 'Write data to and query the MySQL database with your JavaScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-node-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-node-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +```js file=index.js +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-planetscale.mdx new file mode 100644 index 0000000000..7899021256 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-planetscale.mdx @@ -0,0 +1,136 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing PlanetScale database with JavaScript and Prisma ORM' +metaDescription: 'Write data to and query the PlanetScale database with your JavaScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-node-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-node-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Depending on what your models look like, the Prisma Client API will look different as well. For example, if you have a `User` model, your `PrismaClient` instance exposes a property called `user` on which you can call [CRUD](/orm/prisma-client/queries/crud) methods like `findMany`, `create` or `update`. The property is named after the model, but the first letter is lowercased (so for the `Post` model it's called `post`, for `Profile` it's called `profile`). + +The following examples are all based on the models in the Prisma schema. + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```js file=index.js showLineNumbers +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-postgresql.mdx new file mode 100644 index 0000000000..3ce09caddf --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-postgresql.mdx @@ -0,0 +1,123 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing PostgreSQL database with JavaScript and Prisma ORM' +metaDescription: 'Write data to and query the PostgreSQL database with your JavaScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-node-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-node-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +```js file=index.js showLineNumbers +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-sqlserver.mdx new file mode 100644 index 0000000000..db7107326b --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-node-sqlserver.mdx @@ -0,0 +1,131 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing SQL Server database with JavaScript and Prisma ORM' +metaDescription: 'Write data to and query the SQL Server database with your JavaScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-node-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-node-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js showLineNumbers +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Depending on what your models look like, the Prisma Client API will look different as well. For example, if you have a `User` model, your `PrismaClient` instance exposes a property called `user` on which you can call [CRUD](/orm/prisma-client/queries/crud) methods like `findMany`, `create` or `update`. The property is named after the model, but the first letter is lowercased (so for the `Post` model it's called `post`, for `Profile` it's called `profile`). + +The following examples are all based on the models in the Prisma schema. + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```js file=index.js showLineNumbers +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..6afee79c35 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-cockroachdb.mdx @@ -0,0 +1,138 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing CockroachDB database with TypeScript and Prisma ORM' +metaDescription: 'Write data to and query the CockroachDB database with your TypeScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-typescript-cockroachdb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.ts` and add the following code to it: + +```ts file=index.ts showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Depending on what your models look like, the Prisma Client API will look different as well. For example, if you have a `User` model, your `PrismaClient` instance exposes a property called `user` on which you can call [CRUD](/orm/prisma-client/queries/crud) methods like `findMany`, `create` or `update`. The property is named after the model, but the first letter is lowercased (so for the `Post` model it's called `post`, for `Profile` it's called `profile`). + +The following examples are all based on the models in the Prisma schema. + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts showLineNumbers +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { title: 'Hello World' }, + data: { published: true }, + }) + console.log(post) +} +``` + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-mysql.mdx new file mode 100644 index 0000000000..4389c79a00 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-mysql.mdx @@ -0,0 +1,137 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing MySQL database with TypeScript and Prisma ORM' +metaDescription: 'Write data to and query the MySQL database with your TypeScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-typescript-mysql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.ts` and add the following code to it: + +```ts file=index.ts showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Depending on what your models look like, the Prisma Client API will look different as well. For example, if you have a `User` model, your `PrismaClient` instance exposes a property called `user` on which you can call [CRUD](/orm/prisma-client/queries/crud) methods like `findMany`, `create` or `update`. The property is named after the model, but the first letter is lowercased (so for the `Post` model it's called `post`, for `Profile` it's called `profile`). + +The following examples are all based on the models in the Prisma schema. + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts showLineNumbers +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-planetscale.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-planetscale.mdx new file mode 100644 index 0000000000..4fc48cafea --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-planetscale.mdx @@ -0,0 +1,138 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing PlanetScale database with TypeScript and Prisma ORM' +metaDescription: 'Write data to and query the PlanetScale database with your TypeScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-planetscale +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.ts` and add the following code to it: + +```ts file=index.ts showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Depending on what your models look like, the Prisma Client API will look different as well. For example, if you have a `User` model, your `PrismaClient` instance exposes a property called `user` on which you can call [CRUD](/orm/prisma-client/queries/crud) methods like `findMany`, `create` or `update`. The property is named after the model, but the first letter is lowercased (so for the `Post` model it's called `post`, for `Profile` it's called `profile`). + +The following examples are all based on the models in the Prisma schema. + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts showLineNumbers +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-postgresql.mdx new file mode 100644 index 0000000000..bfa2794cf6 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-postgresql.mdx @@ -0,0 +1,136 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing PostgreSQL database with TypeScript and Prisma ORM' +metaDescription: 'Write data to and query the PostgreSQL database with your TypeScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-typescript-postgresql +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.ts` and add the following code to it: + +```ts file=index.ts showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Depending on what your models look like, the Prisma Client API will look different as well. For example, if you have a `User` model, your `PrismaClient` instance exposes a property called `user` on which you can call [CRUD](/orm/prisma-client/queries/crud) methods like `findMany`, `create` or `update`. The property is named after the model, but the first letter is lowercased (so for the `Post` model it's called `post`, for `Profile` it's called `profile`). + +The following examples are all based on the models in the Prisma schema. + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts showLineNumbers +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-sqlserver.mdx new file mode 100644 index 0000000000..59d376d9d5 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/250-querying-the-database-typescript-sqlserver.mdx @@ -0,0 +1,137 @@ +--- +title: 'Querying the database' +metaTitle: 'Query your existing SQL Server database with TypeScript and Prisma ORM' +metaDescription: 'Write data to and query the SQL Server database with your TypeScript and Prisma ORM project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'planetscale', 'cockroachdb', 'prismaPostgres'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/install-prisma-client-typescript-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-typescript-sqlserver +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database- +--- + + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.ts` and add the following code to it: + +```ts file=index.ts showLineNumbers +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Depending on what your models look like, the Prisma Client API will look different as well. For example, if you have a `User` model, your `PrismaClient` instance exposes a property called `user` on which you can call [CRUD](/orm/prisma-client/queries/crud) methods like `findMany`, `create` or `update`. The property is named after the model, but the first letter is lowercased (so for the `Post` model it's called `post`, for `Profile` it's called `profile`). + +The following examples are all based on the models in the Prisma schema. + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts showLineNumbers +async function main() { + const allUsers = await prisma.user.findMany() + console.log(allUsers) +} +``` + +Now run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + +If you created a database using the schema from the database introspection step, the query should print an empty array because there are no `User` records in the database yet. + +```no-copy +[] +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database. In this section, you'll learn how to write a query to _write_ new records into the `Post` and `User` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Hello World' }, + }, + profile: { + create: { bio: 'I like turtles' }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + profile: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with new `Post` and `Profile` records using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the two other ones via the `Post.author` ↔ `User.posts` and `Profile.user` ↔ `User.profile` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` and `profile` relations on the returned `User` objects. + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` + +Before moving on to the next section, you'll "publish" the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts showLineNumbers +async function main() { + const post = await prisma.post.update({ + where: { id: 1 }, + data: { published: true }, + }) + console.log(post) +} +``` + +Run the code with your current TypeScript setup. If you're using `tsx`, you can run it like this: + +```terminal copy +npx tsx index.ts +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-cockroachdb.mdx new file mode 100644 index 0000000000..93b8cd9fb8 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-cockroachdb.mdx @@ -0,0 +1,105 @@ +--- +title: 'Evolve your schema' +metaTitle: 'Evolve your Prisma schema with Prisma Migrate : JavaScript-CockroachDB' +metaDescription: 'Evolve your Prisma schema with Prisma Migrate inside of your JavaScript and CockroachDB project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-node-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema- +--- + +## Add a `Tag` model to your schema + +In this section, you will evolve your Prisma schema and then generate and apply the migration to your database with [`prisma migrate dev`](/orm/reference/prisma-cli-reference#migrate-dev). + +For the purpose of this guide, we'll make the following changes to the Prisma schema: + +1. Create a new model called `Tag` with the following fields: + - `id`: an auto-incrementing integer that will be the primary key for the model + - `name`: a non-null `String` + - `posts`: an implicit many-to-many relation field that links to the `Post` model +2. Update the `Post` model with a `tags` field with an implicit many-to-many relation field that links to the `Tag` model + +Once you've made the changes to your schema, your schema should resemble the one below: + +```prisma file=prisma/schema.prisma highlight=9,27-31;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + user User @relation(fields: [authorId], references: [id]) + //edit-next-line + tags Tag[] +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + user User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + post Post[] + profile Profile? +} + +//edit-start +model Tag { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +//edit-end +``` + +To apply your Prisma schema changes to your database, use the `prisma migrate dev` CLI command: + +```terminal copy +npx prisma migrate dev --name tags-model +``` + +This command will: + +1. Create a new SQL migration file for the migration +1. Apply the generated SQL migration to the database +1. Regenerate Prisma Client + +The following migration will be generated and saved in your `prisma/migrations` folder: + +```sql file=prisma/migrations/TIMESTAMP_tags_model.sql showLineNumbers + -- CreateTable +CREATE TABLE "Tag" ( + "id" SERIAL NOT NULL, + "name" VARCHAR(255) NOT NULL, + + CONSTRAINT "Tag_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "_PostToTag" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "_PostToTag_AB_unique" ON "_PostToTag"("A", "B"); + +-- CreateIndex +CREATE INDEX "_PostToTag_B_index" ON "_PostToTag"("B"); + +-- AddForeignKey +ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Post"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE; +``` diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-mysql.mdx new file mode 100644 index 0000000000..92b934f313 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-mysql.mdx @@ -0,0 +1,107 @@ +--- +title: 'Evolve your schema' +metaTitle: 'Evolve your Prisma schema with Prisma Migrate : JavaScript-MySQL' +metaDescription: 'Evolve your Prisma schema with Prisma Migrate inside of your JavaScript and MySQL project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-node-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema- +--- + +## Add a `Tag` model to your schema + +In this section, you will evolve your Prisma schema and then generate and apply the migration to your database with [`prisma migrate dev`](/orm/reference/prisma-cli-reference#migrate-dev). + +For the purpose of this guide, we'll make the following changes to the Prisma schema: + +1. Create a new model called `Tag` with the following fields: + - `id`: an auto-incrementing integer that will be the primary key for the model + - `name`: a non-null `String` + - `posts`: an implicit many-to-many relation field that links to the `Post` model +2. Update the `Post` model with a `tags` field with an implicit many-to-many relation field that links to the `Tag` model + +Once you've made the changes to your schema, your schema should resemble the one below: + +```prisma file=prisma/schema.prisma highlight=9,27-31;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + user User @relation(fields: [authorId], references: [id]) + //edit-next-line + tags Tag[] +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + user User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + post Post[] + profile Profile? +} + +//edit-start +model Tag { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +//edit-end +``` + +To apply your Prisma schema changes to your database, use the `prisma migrate dev` CLI command: + +```terminal copy +npx prisma migrate dev --name tags-model +``` + +This command will: + +1. Create a new SQL migration file for the migration +1. Apply the generated SQL migration to the database +1. Regenerate Prisma Client + +The following migration will be generated and saved in your `prisma/migrations` folder: + +```sql file=prisma/migrations/TIMESTAMP_tags_model.sql showLineNumbers +-- CreateTable +CREATE TABLE Tag ( + id SERIAL NOT NULL, + name VARCHAR(255) NOT NULL, + + CONSTRAINT Tag_pkey PRIMARY KEY (id) +); + +-- CreateTable +CREATE TABLE _PostToTag ( + A INTEGER NOT NULL, + B INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX _PostToTag_AB_unique ON _PostToTag(A, B); + +-- CreateIndex +CREATE INDEX _PostToTag_B_index ON _PostToTag(B); + +-- AddForeignKey +ALTER TABLE _PostToTag ADD CONSTRAINT _PostToTag_A_fkey FOREIGN KEY (A) REFERENCES Post(id) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE _PostToTag ADD CONSTRAINT _PostToTag_B_fkey FOREIGN KEY (B) REFERENCES Tag(id) ON DELETE CASCADE ON UPDATE CASCADE; +``` + +Congratulations, you just evolved your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-postgresql.mdx new file mode 100644 index 0000000000..468bc21c62 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-postgresql.mdx @@ -0,0 +1,106 @@ +--- +title: 'Evolve your schema' +metaTitle: 'Evolve your Prisma schema with Prisma Migrate : JavaScript-PostgreSQL' +metaDescription: 'Evolve your Prisma schema with Prisma Migrate inside of your JavaScript and PostgreSQL project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-node-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema- +--- + +## Add a `Tag` model to your schema + +In this section, you will evolve your Prisma schema and then generate and apply the migration to your database with [`prisma migrate dev`](/orm/reference/prisma-cli-reference#migrate-dev). + +For the purpose of this guide, we'll make the following changes to the Prisma schema: + +1. Create a new model called `Tag` with the following fields: + - `id`: an auto-incrementing integer that will be the primary key for the model + - `name`: a non-null `String` + - `posts`: an implicit many-to-many relation field that links to the `Post` model +2. Update the `Post` model with a `tags` field with an implicit many-to-many relation field that links to the `Tag` model + +Once you've made the changes to your schema, your schema should resemble the one below: + +```prisma file=prisma/schema.prisma highlight=9,27-31;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + user User @relation(fields: [authorId], references: [id]) + //edit-next-line + tags Tag[] +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + user User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + post Post[] + profile Profile? +} +//edit-start +model Tag { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +//edit-end +``` + +To apply your Prisma schema changes to your database, use the `prisma migrate dev` CLI command: + +```terminal copy +npx prisma migrate dev --name tags-model +``` + +This command will: + +1. Create a new SQL migration file for the migration +1. Apply the generated SQL migration to the database +1. Regenerate Prisma Client + +The following migration will be generated and saved in your `prisma/migrations` folder: + +```sql file=prisma/migrations/TIMESTAMP_tags_model.sql showLineNumbers + -- CreateTable +CREATE TABLE "Tag" ( + "id" SERIAL NOT NULL, + "name" VARCHAR(255) NOT NULL, + + CONSTRAINT "Tag_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "_PostToTag" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "_PostToTag_AB_unique" ON "_PostToTag"("A", "B"); + +-- CreateIndex +CREATE INDEX "_PostToTag_B_index" ON "_PostToTag"("B"); + +-- AddForeignKey +ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Post"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE; +``` + +Congratulations, you just evolved your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-sqlserver.mdx new file mode 100644 index 0000000000..4784f29c1b --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-node-sqlserver.mdx @@ -0,0 +1,107 @@ +--- +title: 'Evolve your schema' +metaTitle: 'Evolve your Prisma schema with Prisma Migrate : JavaScript-sqlserver' +metaDescription: 'Evolve your Prisma schema with Prisma Migrate inside of your JavaScript and SQL Server project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-node-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema- +--- + +## Add a `Tag` model to your schema + +In this section, you will evolve your Prisma schema and then generate and apply the migration to your database with [`prisma migrate dev`](/orm/reference/prisma-cli-reference#migrate-dev). + +For the purpose of this guide, we'll make the following changes to the Prisma schema: + +1. Create a new model called `Tag` with the following fields: + - `id`: an auto-incrementing integer that will be the primary key for the model + - `name`: a non-null `String` + - `posts`: an implicit many-to-many relation field that links to the `Post` model +2. Update the `Post` model with a `tags` field with an implicit many-to-many relation field that links to the `Tag` model + +Once you've made the changes to your schema, your schema should resemble the one below: + +```prisma file=prisma/schema.prisma highlight=9,27-31;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + user User @relation(fields: [authorId], references: [id]) + //edit-next-line + tags Tag[] +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + user User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + post Post[] + profile Profile? +} + +//edit-start +model Tag { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +//edit-end +``` + +To apply your Prisma schema changes to your database, use the `prisma migrate dev` CLI command: + +```terminal copy +npx prisma migrate dev --name tags-model +``` + +This command will: + +1. Create a new SQL migration file for the migration +1. Apply the generated SQL migration to the database +1. Regenerate Prisma Client + +The following migration will be generated and saved in your `prisma/migrations` folder: + +```sql file=prisma/migrations/TIMESTAMP_tags_model.sql showLineNumbers + -- CreateTable +CREATE TABLE [dbo].[Tag] ( + [id] SERIAL NOT NULL, + [name] VARCHAR(255) NOT NULL, + + CONSTRAINT [Tag_pkey] PRIMARY KEY ([id]) +); + +-- CreateTable +CREATE TABLE [dbo].[_PostToTag] ( + [A] INTEGER NOT NULL, + [B] INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX [_PostToTag_AB_unique] ON _PostToTag([A], [B]); + +-- CreateIndex +CREATE INDEX [_PostToTag_B_index] ON [_PostToTag]([B]); + +-- AddForeignKey +ALTER TABLE [dbo].[_PostToTag] ADD CONSTRAINT [_PostToTag_A_fkey] FOREIGN KEY ([A]) REFERENCES [dbo].[Post]([id]) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE [dbo].[_PostToTag] ADD CONSTRAINT [_PostToTag_B_fkey] FOREIGN KEY ([B]) REFERENCES [dbo].[Tag]([id]) ON DELETE CASCADE ON UPDATE CASCADE; +``` + +Congratulations diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-cockroachdb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-cockroachdb.mdx new file mode 100644 index 0000000000..6dca5b55ba --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-cockroachdb.mdx @@ -0,0 +1,108 @@ +--- +title: 'Evolve your schema' +metaTitle: 'Evolve your Prisma schema with Prisma Migrate : TypeScript-cockroachdb' +metaDescription: 'Evolve your Prisma schema with Prisma Migrate inside of your TypeScript and CockroachDB project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-typescript-cockroachdb +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema- +--- + +## Add a `Tag` model to your schema + +In this section, you will evolve your Prisma schema and then generate and apply the migration to your database with [`prisma migrate dev`](/orm/reference/prisma-cli-reference#migrate-dev). + +For the purpose of this guide, we'll make the following changes to the Prisma schema: + +1. Create a new model called `Tag` with the following fields: + - `id`: an auto-incrementing integer that will be the primary key for the model + - `name`: a non-null `String` + - `posts`: an implicit many-to-many relation field that links to the `Post` model +2. Update the `Post` model with a `tags` field with an implicit many-to-many relation field that links to the `Tag` model + +Once you've made the changes to your schema, your schema should resemble the one below: + +```prisma file=prisma/schema.prisma highlight=9,27-31;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + user User @relation(fields: [authorId], references: [id]) + //edit-next-line + tags Tag[] +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + user User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + post Post[] + profile Profile? +} + +//edit-start +model Tag { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +//edit-end +``` + +To apply your Prisma schema changes to your database, use the `prisma migrate dev` CLI command: + +```terminal copy +npx prisma migrate dev --name tags-model +``` + +This command will: + +1. Create a new SQL migration file for the migration +1. Apply the generated SQL migration to the database +1. Regenerate Prisma Client + +The following migration will be generated and saved in your `prisma/migrations` folder: + +```sql file=prisma/migrations/TIMESTAMP_tags_model.sql showLineNumbers + -- CreateTable +CREATE TABLE "Tag" ( + "id" SERIAL NOT NULL, + "name" VARCHAR(255) NOT NULL, + + CONSTRAINT "Tag_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "_PostToTag" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "_PostToTag_AB_unique" ON "_PostToTag"("A", "B"); + +-- CreateIndex +CREATE INDEX "_PostToTag_B_index" ON "_PostToTag"("B"); + +-- AddForeignKey +ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Post"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE; +``` + +Congratulations, you just evolved your database with Prisma Migrate 🚀 + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-mysql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-mysql.mdx new file mode 100644 index 0000000000..9d60345ef5 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-mysql.mdx @@ -0,0 +1,107 @@ +--- +title: 'Evolve your schema' +metaTitle: 'Evolve your Prisma schema with Prisma Migrate : TypeScript-mysql' +metaDescription: 'Evolve your Prisma schema with Prisma Migrate inside of your TypeScript and MySQL project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-typescript-mysql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema- +--- + +## Add a `Tag` model to your schema + +In this section, you will evolve your Prisma schema and then generate and apply the migration to your database with [`prisma migrate dev`](/orm/reference/prisma-cli-reference#migrate-dev). + +For the purpose of this guide, we'll make the following changes to the Prisma schema: + +1. Create a new model called `Tag` with the following fields: + - `id`: an auto-incrementing integer that will be the primary key for the model + - `name`: a non-null `String` + - `posts`: an implicit many-to-many relation field that links to the `Post` model +2. Update the `Post` model with a `tags` field with an implicit many-to-many relation field that links to the `Tag` model + +Once you've made the changes to your schema, your schema should resemble the one below: + +```prisma file=prisma/schema.prisma highlight=9,27-31;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + user User @relation(fields: [authorId], references: [id]) + //edit-next-line + tags Tag[] +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + user User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + post Post[] + profile Profile? +} + +//edit-start +model Tag { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +//edit-end +``` + +To apply your Prisma schema changes to your database, use the `prisma migrate dev` CLI command: + +```terminal copy +npx prisma migrate dev --name tags-model +``` + +This command will: + +1. Create a new SQL migration file for the migration +1. Apply the generated SQL migration to the database +1. Regenerate Prisma Client + +The following migration will be generated and saved in your `prisma/migrations` folder: + +```sql file=prisma/migrations/TIMESTAMP_tags_model.sql showLineNumbers +-- CreateTable +CREATE TABLE Tag ( + id SERIAL NOT NULL, + name VARCHAR(255) NOT NULL, + + CONSTRAINT Tag_pkey PRIMARY KEY (id) +); + +-- CreateTable +CREATE TABLE _PostToTag ( + A INTEGER NOT NULL, + B INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX _PostToTag_AB_unique ON _PostToTag(A, B); + +-- CreateIndex +CREATE INDEX _PostToTag_B_index ON _PostToTag(B); + +-- AddForeignKey +ALTER TABLE _PostToTag ADD CONSTRAINT _PostToTag_A_fkey FOREIGN KEY (A) REFERENCES Post(id) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE _PostToTag ADD CONSTRAINT _PostToTag_B_fkey FOREIGN KEY (B) REFERENCES Tag(id) ON DELETE CASCADE ON UPDATE CASCADE; +``` + +Congratulations, you just evolved your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-postgresql.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-postgresql.mdx new file mode 100644 index 0000000000..59a24806ad --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-postgresql.mdx @@ -0,0 +1,108 @@ +--- +title: 'Evolve your schema' +metaTitle: 'Evolve your Prisma schema with Prisma Migrate : TypeScript-postgresql' +metaDescription: 'Evolve your Prisma schema with Prisma Migrate inside of your TypeScript and PostgreSQL project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-typescript-postgresql +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema- +--- + +## Add a `Tag` model to your schema + +In this section, you will evolve your Prisma schema and then generate and apply the migration to your database with [`prisma migrate dev`](/orm/reference/prisma-cli-reference#migrate-dev). + +For the purpose of this guide, we'll make the following changes to the Prisma schema: + +1. Create a new model called `Tag` with the following fields: + - `id`: an auto-incrementing integer that will be the primary key for the model + - `name`: a non-null `String` + - `posts`: an implicit many-to-many relation field that links to the `Post` model +2. Update the `Post` model with a `tags` field with an implicit many-to-many relation field that links to the `Tag` model + +Once you've made the changes to your schema, your schema should resemble the one below: + +```prisma file=prisma/schema.prisma highlight=9,27-31;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + user User @relation(fields: [authorId], references: [id]) + //edit-next-line + tags Tag[] +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + user User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + post Post[] + profile Profile? +} + +//edit-start +model Tag { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +//edit-end +``` + +To apply your Prisma schema changes to your database, use the `prisma migrate dev` CLI command: + +```terminal copy +npx prisma migrate dev --name tags-model +``` + +This command will: + +1. Create a new SQL migration file for the migration +1. Apply the generated SQL migration to the database +1. Regenerate Prisma Client + +The following migration will be generated and saved in your `prisma/migrations` folder: + +```sql file=prisma/migrations/TIMESTAMP_tags_model.sql showLineNumbers + -- CreateTable +CREATE TABLE "Tag" ( + "id" SERIAL NOT NULL, + "name" VARCHAR(255) NOT NULL, + + CONSTRAINT "Tag_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "_PostToTag" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "_PostToTag_AB_unique" ON "_PostToTag"("A", "B"); + +-- CreateIndex +CREATE INDEX "_PostToTag_B_index" ON "_PostToTag"("B"); + +-- AddForeignKey +ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Post"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE; +``` + + + +Congratulations, you just evolved your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-sqlserver.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-sqlserver.mdx new file mode 100644 index 0000000000..a629aed911 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/275-evolve-your-schema-typescript-sqlserver.mdx @@ -0,0 +1,107 @@ +--- +title: 'Evolve your schema' +metaTitle: 'Evolve your Prisma schema with Prisma Migrate : TypeScript-sql-server' +metaDescription: 'Evolve your Prisma schema with Prisma Migrate inside of your TypeScript and SQL Server project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['postgresql', 'mysql', 'sqlserver', 'cockroachdb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/relational-databases/querying-the-database-typescript-sqlserver +pagination_next: getting-started/setup-prisma/add-to-existing-project/relational-databases/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema- +--- + +## Add a `Tag` model to your schema + +In this section, you will evolve your Prisma schema and then generate and apply the migration to your database with [`prisma migrate dev`](/orm/reference/prisma-cli-reference#migrate-dev). + +For the purpose of this guide, we'll make the following changes to the Prisma schema: + +1. Create a new model called `Tag` with the following fields: + - `id`: an auto-incrementing integer that will be the primary key for the model + - `name`: a non-null `String` + - `posts`: an implicit many-to-many relation field that links to the `Post` model +2. Update the `Post` model with a `tags` field with an implicit many-to-many relation field that links to the `Tag` model + +Once you've made the changes to your schema, your schema should resemble the one below: + +```prisma file=prisma/schema.prisma highlight=9,27-31;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + createdAt DateTime @default(now()) @db.Timestamp(6) + content String? + published Boolean @default(false) + authorId Int + user User @relation(fields: [authorId], references: [id]) + //edit-next-line + tags Tag[] +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + userId Int @unique + user User @relation(fields: [userId], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + name String? @db.VarChar(255) + email String @unique @db.VarChar(255) + post Post[] + profile Profile? +} + +//edit-start +model Tag { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +//edit-end +``` + +To apply your Prisma schema changes to your database, use the `prisma migrate dev` CLI command: + +```terminal copy +npx prisma migrate dev --name tags-model +``` + +This command will: + +1. Create a new SQL migration file for the migration +1. Apply the generated SQL migration to the database +1. Regenerate Prisma Client + +The following migration will be generated and saved in your `prisma/migrations` folder: + +```sql file=prisma/migrations/TIMESTAMP_tags_model.sql showLineNumbers + -- CreateTable +CREATE TABLE [dbo].[Tag] ( + [id] SERIAL NOT NULL, + [name] VARCHAR(255) NOT NULL, + + CONSTRAINT [Tag_pkey] PRIMARY KEY ([id]) +); + +-- CreateTable +CREATE TABLE [dbo].[_PostToTag] ( + [A] INTEGER NOT NULL, + [B] INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX [_PostToTag_AB_unique] ON _PostToTag([A], [B]); + +-- CreateIndex +CREATE INDEX [_PostToTag_B_index] ON [_PostToTag]([B]); + +-- AddForeignKey +ALTER TABLE [dbo].[_PostToTag] ADD CONSTRAINT [_PostToTag_A_fkey] FOREIGN KEY ([A]) REFERENCES [dbo].[Post]([id]) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE [dbo].[_PostToTag] ADD CONSTRAINT [_PostToTag_B_fkey] FOREIGN KEY ([B]) REFERENCES [dbo].[Tag]([id]) ON DELETE CASCADE ON UPDATE CASCADE; +``` + +Congratulations, you just evolved your database with Prisma Migrate 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/300-next-steps.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/300-next-steps.mdx new file mode 100644 index 0000000000..5bdabdd144 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/110-relational-databases/300-next-steps.mdx @@ -0,0 +1,111 @@ +--- +title: 'Next steps' +metaTitle: 'Next steps after adding Prisma ORM to your existing project' +metaDescription: 'Next steps to take now that you have successfully added Prisma ORM to your relational database project' +hide_table_of_contents: true +--- + +This section lists a number of potential next steps you can now take from here. Feel free to explore these or read the [Introduction](/orm/overview/introduction/what-is-prisma) page to get a high-level overview of Prisma ORM. + +### Continue exploring the Prisma Client API + +You can send a variety of queries with the Prisma Client API. Check out the [API reference](/orm/prisma-client) and use your existing database setup from this guide to try them out. + +:::tip + +You can use your editor's auto-completion feature to learn about the different API calls and the arguments it takes. Auto-completion is commonly invoked by hitting CTRL+SPACE on your keyboard. + +::: + +
+Expand for more Prisma Client API examples + +Here are a few suggestions for a number of more queries you can send with Prisma Client: + +**Filter all `Post` records that contain `"hello"`** + +```js +const filteredPosts = await prisma.post.findMany({ + where: { + OR: [ + { title: { contains: "hello" }, + { content: { contains: "hello" }, + ], + }, +}) +``` + +**Create a new `Post` record and connect it to an existing `User` record** + +```js +const post = await prisma.post.create({ + data: { + title: 'Join us for Prisma Day 2020', + author: { + connect: { email: 'alice@prisma.io' }, + }, + }, +}) +``` + +**Use the fluent relations API to retrieve the `Post` records of a `User` by traversing the relations** + +```js +const posts = await prisma.profile + .findUnique({ + where: { id: 1 }, + }) + .user() + .posts() +``` + +**Delete a `User` record** + +```js +const deletedUser = await prisma.user.delete({ + where: { email: 'sarah@prisma.io' }, +}) +``` + +
+ +### Build an app with Prisma ORM + +The Prisma blog features comprehensive tutorials about Prisma ORM, check out our latest ones: + +- [Build a fullstack app with Next.js](https://www.youtube.com/watch?v=QXxy8Uv1LnQ&ab_channel=ByteGrad) +- [Build a fullstack app with Remix](https://www.prisma.io/blog/fullstack-remix-prisma-mongodb-1-7D0BfTXBmB6r) (5 parts, including videos) +- [Build a REST API with NestJS](https://www.prisma.io/blog/nestjs-prisma-rest-api-7D056s1BmOL0) + +### Explore the data in Prisma Studio + +Prisma Studio is a visual editor for the data in your database. Run `npx prisma studio` in your terminal. + +### Get query insights and analytics with Prisma Optimize + +[Prisma Optimize](/optimize) helps you generate insights and provides recommendations that can help you make your database queries faster. [Try it out now!](/optimize/getting-started) + +Optimize aims to help developers of all skill levels write efficient database queries, reducing database load and making applications more responsive. + +### Change the database schema (e.g. add more tables) + +To evolve the app, you need to follow the same flow of the tutorial: + +1. Manually adjust your database schema using SQL +1. Re-introspect your database +1. Optionally re-configure your Prisma Client API +1. Re-generate Prisma Client + +![Introspect workflow](/img/getting-started/prisma-evolve-app-workflow.png) + +### Try a Prisma ORM example + +The [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository contains a number of ready-to-run examples: + +| Demo | Stack | Description | +| :------------------------------------------------------------------------------------------------------------------ | :----------- | --------------------------------------------------------------------------------------------------- | +| [`nextjs-api-routes`](https://pris.ly/e/ts/rest-nextjs-api-routes) | Fullstack | Simple [Next.js](https://nextjs.org/) app (React) with a REST API | +| [`nextjs-graphql`](https://pris.ly/e/ts/graphql-nextjs) | Fullstack | Simple [Next.js](https://nextjs.org/) app (React) with a GraphQL API | +| [`graphql-nexus`](https://pris.ly/e/ts/graphql-nexus) | Backend only | GraphQL server based on [`@apollo/server`](https://www.apollographql.com/docs/apollo-server) | +| [`express`](https://pris.ly/e/ts/rest-express) | Backend only | Simple REST API with Express.JS | +| [`grpc`](https://pris.ly/e/ts/grpc) | Backend only | Simple gRPC API | diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb-node-mongodb.mdx new file mode 100644 index 0000000000..74b7d74ec5 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb-node-mongodb.mdx @@ -0,0 +1,70 @@ +--- +title: 'MongoDB' +metaTitle: 'Add Prisma ORM to an existing MongoDB project using JavaScript (15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing Node.js project by connecting it to your MongoDB database and generating a Prisma Client for database access.' +toc: false +langSwitcher: ['typescript', 'node'] +hide_table_of_contents: true +dbSwitcher: ['mongodb'] +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/connect-your-database-node-mongodb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb- +--- + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +If you're migrating to Prisma ORM from Mongoose, see our [Migrate from Mongoose guide](/orm/more/migrating-to-prisma/migrate-from-mongoose). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- Access to a MongoDB 4.2+ server with a replica set deployment. We recommend using [MongoDB Atlas](https://www.mongodb.com/cloud/atlas). + + + + The MongoDB database connector uses transactions to support nested writes. Transactions **requires** a [replica set](https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/) deployment. The easiest way to deploy a replica set is with [Atlas](https://www.mongodb.com/docs/atlas/getting-started/). It's free to get started. + + + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +## Set up Prisma ORM + +As a first step, navigate into it your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb-typescript-mongodb.mdx new file mode 100644 index 0000000000..c5a37914c0 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb-typescript-mongodb.mdx @@ -0,0 +1,71 @@ +--- +title: 'MongoDB' +metaTitle: 'Add Prisma ORM to an existing MongoDB project using TypeScript (15 min)' +metaDescription: 'Learn how to add Prisma ORM to an existing TypeScript project by connecting it to your MongoDB database and generating a Prisma Client for database access.' +hide_table_of_contents: true +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +sidebar_custom_props: { badge: '15 min' } +sidebar_class_name: hidden-sidebar +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/connect-your-database-typescript-mongodb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb- +--- + +Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database and generating a Prisma Client for database access. The following tutorial introduces you to [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Introspection](/orm/prisma-schema/introspection). + + + +If you're migrating to Prisma ORM from Mongoose, see our [Migrate from Mongoose guide](/orm/more/migrating-to-prisma/migrate-from-mongoose). + + + +## Prerequisites + +In order to successfully complete this guide, you need: + +- [Node.js](https://nodejs.org/en/) installed on your machine (see [system requirements](/orm/reference/system-requirements) for officially supported versions) +- Access to a MongoDB 4.2+ server with a replica set deployment. We recommend using [MongoDB Atlas](https://www.mongodb.com/cloud/atlas). + + + + The MongoDB database connector uses transactions to support nested writes. Transactions **requires** a [replica set](https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/) deployment. The easiest way to deploy a replica set is with [Atlas](https://www.mongodb.com/docs/atlas/getting-started/). It's free to get started. + + + +Make sure you have your database [connection URL](/orm/reference/connection-urls) (that includes your authentication credentials) at hand! If you don't have a database server running and just want to explore Prisma ORM, check out the [Quickstart](/getting-started/quickstart-sqlite). + +> See [System requirements](/orm/reference/system-requirements) for exact version requirements. + +## Set up Prisma ORM + +As a first step, navigate into it your project directory that contains the `package.json` file. + +Next, add the Prisma CLI as a development dependency to your project: + +```terminal copy +npm install prisma --save-dev +``` + +:::note + +If your project contains multiple directories with `package.json` files (e.g., `frontend`, `backend`, etc.), note that Prisma ORM is specifically designed for use in the API/backend layer. To set up Prisma, navigate to the appropriate backend directory containing the relevant `package.json` file and configure Prisma there. + +::: + +You can now invoke the Prisma CLI by prefixing it with `npx`: + +```terminal +npx prisma +``` + +Next, set up your Prisma ORM project by creating your [Prisma schema](/orm/prisma-schema) file template with the following command: + +```terminal copy +npx prisma init +``` + +This command does two things: + +- creates a new directory called `prisma` that contains a file called `schema.prisma`, which contains the Prisma schema with your database connection variable and schema models +- creates the [`.env` file](/orm/more/development-environment/environment-variables/env-files) in the root directory of the project, which is used for defining environment variables (such as your database connection) + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/100-connect-your-database-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/100-connect-your-database-node-mongodb.mdx new file mode 100644 index 0000000000..229e78f202 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/100-connect-your-database-node-mongodb.mdx @@ -0,0 +1,56 @@ +--- +title: 'Connect your database (MongoDB)' +metaTitle: 'Connect your MongoDB database' +metaDescription: 'Connect your MongoDB database to your existing Node.js project' +langSwitcher: ['typescript', 'node'] +sidebar_class_name: hidden-sidebar +hide_table_of_contents: true +dbSwitcher: ['mongodb'] +toc: false +pagination_prev: getting-started/setup-prisma/add-to-existing-project/mongodb-node-mongodb +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/introspection-node-mongodb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`: + +```bash file=.env showLineNumbers +DATABASE_URL="mongodb+srv://test:test@cluster0.ns1yp.mongodb.net/myFirstDatabase" +``` + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. For MongoDB, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mongodb://USERNAME:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USERNAME`: The name of your database user +- `PASSWORD`: The password for your database user +- `HOST`: The host where a [`mongod`](https://www.mongodb.com/docs/manual/reference/program/mongod/#mongodb-binary-bin.mongod) (or [`mongos`](https://www.mongodb.com/docs/manual/reference/program/mongos/#mongodb-binary-bin.mongos)) instance is running +- `PORT`: The port where your database server is running (typically `27017` for MongoDB) +- `DATABASE`: The name of the database. Note that if you're using MongoDB Atlas, you need to manually append the database name to the connection URL because the environment link from MongoDB Atlas doesn't contain it. + +## Troubleshooting + +### `Error in connector: SCRAM failure: Authentication failed.` + +If you see the `Error in connector: SCRAM failure: Authentication failed.` error message, you can specify the source database for the authentication by [adding](https://github.com/prisma/prisma/discussions/9994#discussioncomment-1562283) `?authSource=admin` to the end of the connection string. + +### `Raw query failed. Error code 8000 (AtlasError): empty database name not allowed.` + +If you see the `Raw query failed. Code: unknown. Message: Kind: Command failed: Error code 8000 (AtlasError): empty database name not allowed.` error message, be sure to append the database name to the database URL. You can find more info in this [GitHub issue](https://github.com/prisma/docs/issues/5562). \ No newline at end of file diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/100-connect-your-database-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/100-connect-your-database-typescript-mongodb.mdx new file mode 100644 index 0000000000..91876d2b00 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/100-connect-your-database-typescript-mongodb.mdx @@ -0,0 +1,54 @@ +--- +title: 'Connect your database (MongoDB)' +metaTitle: 'Connect your MongoDB database using TypeScript' +metaDescription: 'Connect your MongoDB database to your existing TypeScript project' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/mongodb-typescript-mongodb +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/introspection-typescript-mongodb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb/connect-your-database- +--- + +## Connecting your database + +To connect your database, you need to set the `url` field of the `datasource` block in your Prisma schema to your database [connection URL](/orm/reference/connection-urls): + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} +``` + +In this case, the `url` is [set via an environment variable](/orm/more/development-environment/environment-variables) which is defined in `.env`: + +```bash file=.env showLineNumbers +DATABASE_URL="mongodb+srv://test:test@cluster0.ns1yp.mongodb.net/myFirstDatabase" +``` + +You now need to adjust the connection URL to point to your own database. + +The [format of the connection URL](/orm/reference/connection-urls) for your database depends on the database you use. For MongoDB, it looks as follows (the parts spelled all-uppercased are _placeholders_ for your specific connection details): + +```no-lines +mongodb://USERNAME:PASSWORD@HOST:PORT/DATABASE +``` + +Here's a short explanation of each component: + +- `USERNAME`: The name of your database user +- `PASSWORD`: The password for your database user +- `HOST`: The host where a [`mongod`](https://www.mongodb.com/docs/manual/reference/program/mongod/#mongodb-binary-bin.mongod) (or [`mongos`](https://www.mongodb.com/docs/manual/reference/program/mongos/#mongodb-binary-bin.mongos)) instance is running +- `PORT`: The port where your database server is running (typically `27017` for MongoDB) +- `DATABASE`: The name of the database. Note that if you're using MongoDB Atlas, you need to manually append the database name to the connection URL because the environment link from MongoDB Atlas doesn't contain it. + +## Troubleshooting + +### `Error in connector: SCRAM failure: Authentication failed.` + +If you see the `Error in connector: SCRAM failure: Authentication failed.` error message, you can specify the source database for the authentication by [adding](https://github.com/prisma/prisma/discussions/9994#discussioncomment-1562283) `?authSource=admin` to the end of the connection string. + +### `Raw query failed. Error code 8000 (AtlasError): empty database name not allowed.` + +If you see the `Raw query failed. Code: unknown. Message: Kind: Command failed: Error code 8000 (AtlasError): empty database name not allowed.` error message, be sure to append the database name to the database URL. You can find more info in this [GitHub issue](https://github.com/prisma/docs/issues/5562). \ No newline at end of file diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/125-introspection-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/125-introspection-node-mongodb.mdx new file mode 100644 index 0000000000..918b6f2aa1 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/125-introspection-node-mongodb.mdx @@ -0,0 +1,130 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection: MongoDB and JavaScript' +metaDescription: 'Introspect your MongoDB database with Prisma ORM' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/mongodb/connect-your-database-node-mongodb +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/install-prisma-client-node-mongodb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb/introspection- +--- + +# Introspection + +Prisma ORM introspects a MongoDB schema by sampling the data stored in the given database and inferring the schema of that data. + +For the purposes of illustrating introspection, this guide will help you setup a MongoDB from scratch. But if you have a MongoDB database already, feel free to jump to [Initializing Prisma ORM](#initializing-prisma-orm) in your project. + +## Setting up your Database + +To see this in action, first create a `blog` database with 2 collections: `User` and `Post`. We recommend [MongoDB Compass](https://www.mongodb.com/products/tools/compass) for setting this up: + +![Create a blog database using Compass](/img/getting-started/1-create-database.jpg) + +First, add a user to our `User` collection: + +![Create a user within the User collection](/img/getting-started/2-create-user.jpg) + +Next, add some posts to our `Post` collection. It's important that the ObjectID in `userId` matches the user you created above. + +![Create some posts within the Post collection](/img/getting-started/3-create-posts.jpg) + +## Initializing Prisma ORM + +Now that you have a MongoDB database, the next step is to create a new project and initialize Prisma ORM: + +```terminal copy +mkdir blog +cd blog +npm init -y +npm install -D prisma +npx prisma init +``` + +Initializing Prisma ORM will create a `prisma/schema.prisma` file. Edit this file to use MongoDB: + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} +``` + +Next you'll need to adjust your `.env` file to point the `DATABASE_URL` to your MongoDB database + +## Introspecting MongoDB with Prisma ORM + +You're now ready to introspect. Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command introspects our database and writes the inferred schema into your `prisma/schema.prisma` file: + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + userId String @db.ObjectId +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String +} +``` + +## Tweaking the Schema + +To be able to join data using Prisma Client, you can add the [`@relation`](/orm/reference/prisma-schema-reference#relation) attributes to our models: + +```prisma file=prisma/schema.prisma highlight=14;add|20;add showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + userId String @db.ObjectId + //add-next-line + user User @relation(fields: [userId], references: [id]) +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + //add-next-line + posts Post[] +} +``` + +:::tip + +We're actively working on MongoDB introspection. Provide feedback for this feature in [this issue](https://github.com/prisma/prisma/issues/8241). + +::: + +And with that, you're ready to generate Prisma Client. + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/125-introspection-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/125-introspection-typescript-mongodb.mdx new file mode 100644 index 0000000000..3a8fac00f1 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/125-introspection-typescript-mongodb.mdx @@ -0,0 +1,128 @@ +--- +title: 'Introspection' +metaTitle: 'Introspection: MongoDB and TypeScript' +metaDescription: 'Introspection your MongoDB database with Prisma ORM' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/mongodb/connect-your-database-typescript-mongodb +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/install-prisma-client-typescript-mongodb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb/introspection- +--- + +# Introspection + +Prisma ORM introspects a MongoDB schema by sampling the data stored in the given database and inferring the schema of that data. + +For the purposes of illustrating introspection, this guide will help you setup a MongoDB from scratch. But if you have a MongoDB database already, feel free to jump to [Initializing Prisma ORM](#initializing-prisma-orm) in your project. + +## Setting up your Database + +To see this in action, first create a `blog` database with 2 collections: `User` and `Post`. We recommend [MongoDB Compass](https://www.mongodb.com/products/tools/compass) for setting this up: + +![Create a blog database using Compass](/img/getting-started/1-create-database.jpg) + +First, add a user to our `User` collection: + +![Create a user within the User collection](/img/getting-started/2-create-user.jpg) + +Next, add some posts to our `Post` collection. It's important that the ObjectID in `userId` matches the user you created above. + +![Create some posts within the Post collection](/img/getting-started/3-create-posts.jpg) + +## Initializing Prisma ORM + +Now that you have a MongoDB database, the next step is to create a new project and initialize Prisma ORM: + +```terminal copy +mkdir blog +cd blog +npm init -y +npm install -D prisma +npx prisma init +``` + +Initializing Prisma ORM will create a `prisma/schema.prisma` file. Edit this file to use MongoDB: + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} +``` + +Next you'll need to adjust your `.env` file to point the `DATABASE_URL` to your MongoDB database + +## Introspecting MongoDB with Prisma ORM + +You're now ready to introspect. Run the following command to introspect your database: + +```terminal copy +npx prisma db pull +``` + +This command introspects our database and writes the inferred schema into your `prisma/schema.prisma` file: + +```prisma file=prisma/schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + userId String @db.ObjectId +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String +} +``` + +## Tweaking the Schema + +To be able to join data using Prisma Client, you can add the [`@relation`](/orm/reference/prisma-schema-reference#relation) attributes to our models: + +```prisma file=prisma/schema.prisma highlight=14;add|20;add showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + userId String @db.ObjectId + //add-next-line + user User @relation(fields: [userId], references: [id]) +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + //add-next-line + posts Post[] +} +``` + +:::tip + +We're actively working on MongoDB introspection. Provide feedback for this feature in [this issue](https://github.com/prisma/prisma/issues/8241). + +::: + +And with that, you're ready to generate Prisma Client. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/200-install-prisma-client-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/200-install-prisma-client-node-mongodb.mdx new file mode 100644 index 0000000000..ff7c9ca549 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/200-install-prisma-client-node-mongodb.mdx @@ -0,0 +1,27 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project: JavaScript and MongoDB' +metaDescription: 'Install and generate Prisma Client in your existing project using a MongoDB database and Javascript.' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/mongodb/introspection-node-mongodb +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/querying-the-database-node-mongodb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb/install-prisma-client- +--- + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you make changes to your Prisma schema in the future, you manually need to invoke `prisma generate` in order to accommodate the changes in your Prisma Client API. + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/200-install-prisma-client-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/200-install-prisma-client-typescript-mongodb.mdx new file mode 100644 index 0000000000..fcaf636b67 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/200-install-prisma-client-typescript-mongodb.mdx @@ -0,0 +1,25 @@ +--- +title: 'Install Prisma Client' +metaTitle: 'Install Prisma Client in your existing project: TypeScript and MongoDB' +metaDescription: 'Install and generate Prisma Client in your existing project using a MongoDB database and TypeScript.' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/mongodb/introspection-typescript-mongodb +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/querying-the-database-typescript-mongodb +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb/install-prisma-client- +--- + +## Install and generate Prisma Client + +To get started with Prisma Client, you need to install the `@prisma/client` package: + +```terminal copy +npm install @prisma/client +``` + +The install command invokes `prisma generate` for you which reads your Prisma schema and generates a version of Prisma Client that is _tailored_ to your models. + +![Install and generate Prisma Client](/img/getting-started/prisma-client-install-and-generate.png) + +Whenever you make changes to your Prisma schema in the future, you manually need to invoke `prisma generate` in order to accommodate the changes in your Prisma Client API. diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/250-querying-the-database-node-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/250-querying-the-database-node-mongodb.mdx new file mode 100644 index 0000000000..3a6f590aa4 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/250-querying-the-database-node-mongodb.mdx @@ -0,0 +1,219 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database in your existing project: MongoDB and JavaScript' +metaDescription: 'Write data to and query your MongoDB database in your existing project.' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +sidebar_class_name: hidden-sidebar +pagination_prev: getting-started/setup-prisma/add-to-existing-project/mongodb/install-prisma-client-node-mongodb +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.js` and add the following code to it: + +```js file=index.js copy +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Connect to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```js file=index.js showLineNumbers +async function main() { +- // ... you will write your Prisma Client queries here +//add-start ++ const allUsers = await prisma.user.findMany() ++ console.log(allUsers) +//add-end +} +``` + +Now run the code with this command: + +```terminal copy +node index.js +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post`, `User` and `Comment` tables. + +Adjust the `main` function to send a `create` query to the database: + +```js file=index.js copy showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Rich', + email: 'hello@prisma.com', + posts: { + create: { + title: 'My first post', + body: 'Lots of really interesting stuff', + slug: 'my-first-post', + }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with a new `Post` using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the other one via the `Post.author` ↔ `User.posts` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +node index.js +``` + +The output should look similar to this: + +```json no-lines +[ + { + id: '60cc9b0e001e3bfd00a6eddf', + email: 'hello@prisma.com', + name: 'Rich', + posts: [ + { + id: '60cc9bad005059d6007f45dd', + slug: 'my-first-post', + title: 'My first post', + body: 'Lots of really interesting stuff', + userId: '60cc9b0e001e3bfd00a6eddf', + }, + ], + }, +] +``` + +The query added new records to the `User` and the `Post` collections: + + + +The `id` field in the Prisma schema maps to `_id` in the underlying MongoDB database. + + + +**User** collection + +| **\_id** | **email** | **name** | +| :------------------------- | :------------------- | :------- | +| `60cc9b0e001e3bfd00a6eddf` | `"hello@prisma.com"` | `"Rich"` | + +**Post** collection + +| **\_id** | **createdAt** | **title** | **content** | **published** | **authorId** | +| :------------------------- | :------------------------- | :---------------- | :--------------------------------- | :------------ | :------------------------- | +| `60cc9bad005059d6007f45dd` | `2020-03-21T16:45:01.246Z` | `"My first post"` | `Lots of really interesting stuff` | `false` | `60cc9b0e001e3bfd00a6eddf` | + +> **Note**: The unique identifier in the `authorId` document field on `Post` reference the `_id` document field in the `User` collection, meaning the `_id` value `60cc9b0e001e3bfd00a6eddf` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll add a couple of comments to the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```js file=index.js copy +async function main() { + await prisma.post.update({ + where: { + slug: 'my-first-post', + }, + data: { + comments: { + createMany: { + data: [ + { comment: 'Great post!' }, + { comment: "Can't wait to read more!" }, + ], + }, + }, + }, + }) + const posts = await prisma.post.findMany({ + include: { + comments: true, + }, + }) + + console.dir(posts, { depth: Infinity }) +} +``` + +Now run the code using the same command as before: + +```terminal copy +node index.js +``` + +You will see the following output: + +```json no-lines +[ + { + id: '60cc9bad005059d6007f45dd', + slug: 'my-first-post', + title: 'My first post', + body: 'Lots of really interesting stuff', + userId: '60cc9b0e001e3bfd00a6eddf', + comments: [ + { + id: '60cca420008a21d800578793', + postId: '60cca40300af8bf000f6ca99', + comment: 'Great post!', + }, + { + id: '60cca420008a21d800578794', + postId: '60cca40300af8bf000f6ca99', + comment: "Can't wait to try this!", + }, + ], + }, +] +``` + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/250-querying-the-database-typescript-mongodb.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/250-querying-the-database-typescript-mongodb.mdx new file mode 100644 index 0000000000..d94bd9a0a0 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/250-querying-the-database-typescript-mongodb.mdx @@ -0,0 +1,233 @@ +--- +title: 'Querying the database' +metaTitle: 'Querying the database in your existing project: MongoDB and TypeScript' +metaDescription: 'Write data to and query your MongoDB database' +langSwitcher: ['typescript', 'node'] +dbSwitcher: ['mongodb'] +hide_table_of_contents: true +pagination_prev: getting-started/setup-prisma/add-to-existing-project/mongodb/install-prisma-client-typescript-mongodb +pagination_next: getting-started/setup-prisma/add-to-existing-project/mongodb/next-steps +slugSwitch: /getting-started/setup-prisma/add-to-existing-project/mongodb/querying-the-database- +--- + +## Write your first query with Prisma Client + +Now that you have generated Prisma Client, you can start writing queries to read and write data in your database. For the purpose of this guide, you'll use a plain Node.js script to explore some basic features of Prisma Client. + +If you're building a REST API, you can use Prisma Client in your route handlers to read and write data in the database based on incoming HTTP requests. If you're building a GraphQL API, you can use Prisma Client in your resolvers to read and write data in the database based on incoming queries and mutations. + +For the purpose of this guide however, you'll just create a plain Node.js script to learn how to send queries to your database using Prisma Client. Once you have an understanding of how the API works, you can start integrating it into your actual application code (e.g. REST route handlers or GraphQL resolvers). + +Create a new file named `index.ts` and add the following code to it: + +```js file=index.ts copy +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + // ... you will write your Prisma Client queries here +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +Here's a quick overview of the different parts of the code snippet: + +1. Import the `PrismaClient` constructor from the `@prisma/client` node module +1. Instantiate `PrismaClient` +1. Define an `async` function named `main` to send queries to the database +1. Connect to the database +1. Call the `main` function +1. Close the database connections when the script terminates + +Inside the `main` function, add the following query to read all `User` records from the database and print the result: + +```ts file=index.ts showLineNumbers +async function main() { + // ... you will write your Prisma Client queries here +//add-start ++ const allUsers = await prisma.user.findMany() ++ console.log(allUsers) +//add-end +} +``` + +Now run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +If you introspected an existing database with records, the query should return an array of JavaScript objects. + +## Write data into the database + +The `findMany` query you used in the previous section only _reads_ data from the database (although it was still empty). In this section, you'll learn how to write a query to _write_ new records into the `Post`, `User` and `Comment` tables. + +Adjust the `main` function to send a `create` query to the database: + +```ts file=index.ts copy showLineNumbers +async function main() { + await prisma.user.create({ + data: { + name: 'Rich', + email: 'hello@prisma.com', + posts: { + create: { + title: 'My first post', + body: 'Lots of really interesting stuff', + slug: 'my-first-post', + }, + }, + }, + }) + + const allUsers = await prisma.user.findMany({ + include: { + posts: true, + }, + }) + console.dir(allUsers, { depth: null }) +} +``` + +This code creates a new `User` record together with a new `Post` using a [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) query. The `User` record is connected to the other one via the `Post.author` ↔ `User.posts` [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) respectively. + +Notice that you're passing the [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields) option to `findMany` which tells Prisma Client to include the `posts` relations on the returned `User` objects. + +Run the code with this command: + +```terminal copy +npx tsx index.ts +``` + +The output should look similar to this: + +```json no-lines +[ + { + id: '60cc9b0e001e3bfd00a6eddf', + email: 'hello@prisma.com', + name: 'Rich', + posts: [ + { + id: '60cc9bad005059d6007f45dd', + slug: 'my-first-post', + title: 'My first post', + body: 'Lots of really interesting stuff', + userId: '60cc9b0e001e3bfd00a6eddf', + }, + ], + }, +] +``` + +Also note that `allUsers` is _statically typed_ thanks to [Prisma Client's generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types). You can observe the type by hovering over the `allUsers` variable in your editor. It should be typed as follows: + +```ts no-lines showLineNumbers +const allUsers: (User & { + posts: Post[] +})[] + +export type Post = { + id: number + title: string + body: string | null + published: boolean + authorId: number | null +} +``` + +The query added new records to the `User` and the `Post` collections: + + + +The `id` field in the Prisma schema maps to `_id` in the underlying MongoDB database. + + + +**User** collection + +| **\_id** | **email** | **name** | +| :------------------------- | :------------------- | :------- | +| `60cc9b0e001e3bfd00a6eddf` | `"hello@prisma.com"` | `"Rich"` | + +**Post** collection + +| **\_id** | **createdAt** | **title** | **content** | **published** | **authorId** | +| :------------------------- | :------------------------- | :---------------- | :--------------------------------- | :------------ | :------------------------- | +| `60cc9bad005059d6007f45dd` | `2020-03-21T16:45:01.246Z` | `"My first post"` | `Lots of really interesting stuff` | `false` | `60cc9b0e001e3bfd00a6eddf` | + +> **Note**: The unique identifier in the `authorId` document field on `Post` reference the `_id` document field in the `User` collection, meaning the `_id` value `60cc9b0e001e3bfd00a6eddf` column therefore refers to the first (and only) `User` record in the database. + +Before moving on to the next section, you'll add a couple of comments to the `Post` record you just created using an `update` query. Adjust the `main` function as follows: + +```ts file=index.ts copy showLineNumbers +async function main() { + await prisma.post.update({ + where: { + slug: 'my-first-post', + }, + data: { + comments: { + createMany: { + data: [ + { comment: 'Great post!' }, + { comment: "Can't wait to read more!" }, + ], + }, + }, + }, + }) + const posts = await prisma.post.findMany({ + include: { + comments: true, + }, + }) + + console.dir(posts, { depth: Infinity }) +} +``` + +Now run the code using the same command as before: + +```terminal copy +npx tsx index.ts +``` + +You will see the following output: + +```json no-lines +[ + { + id: '60cc9bad005059d6007f45dd', + slug: 'my-first-post', + title: 'My first post', + body: 'Lots of really interesting stuff', + userId: '60cc9b0e001e3bfd00a6eddf', + comments: [ + { + id: '60cca420008a21d800578793', + postId: '60cca40300af8bf000f6ca99', + comment: 'Great post!', + }, + { + id: '60cca420008a21d800578794', + postId: '60cca40300af8bf000f6ca99', + comment: "Can't wait to try this!", + }, + ], + }, +] +``` + +Fantastic, you just wrote new data into your database for the first time using Prisma Client 🚀 diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/300-next-steps.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/300-next-steps.mdx new file mode 100644 index 0000000000..d9e1ba8ffa --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/120-mongodb/300-next-steps.mdx @@ -0,0 +1,93 @@ +--- +title: 'Next steps' +metaTitle: 'Next steps after adding Prisma ORM to an existing project using MongoDB' +metaDescription: 'Next steps to take now that you have successfully added Prisma ORM to your existing Node.js or TypeScript project.' +hide_table_of_contents: true +--- + +This section lists a number of potential next steps you can now take from here. Feel free to explore these or read the [Introduction](/orm/overview/introduction/what-is-prisma) page to get a high-level overview of Prisma ORM. + +### Continue exploring the Prisma Client API + +You can send a variety of queries with the Prisma Client API. Check out the [API reference](/orm/prisma-client) and use your existing database setup from this guide to try them out. + +:::tip + +You can use your editor's auto-completion feature to learn about the different API calls and the arguments it takes. Auto-completion is commonly invoked by hitting CTRL+SPACE on your keyboard. + +::: + +
+Expand for more Prisma Client API examples + +Here are a few suggestions for a number of more queries you can send with Prisma Client: + +**Filter all `Post` records that contain `"hello"`** + +```js +const filteredPosts = await prisma.post.findMany({ + where: { + OR: [{ title: { contains: 'hello' } }, { body: { contains: 'hello' } }], + }, +}) +``` + +**Create a new `Post` record and connect it to an existing `User` record** + +```js +const post = await prisma.post.create({ + data: { + title: 'Join us for Prisma Day 2020', + slug: 'prisma-day-2020', + body: 'A conference on modern application development and databases.', + user: { + connect: { email: 'hello@prisma.com' }, + }, + }, +}) +``` + +**Use the fluent relations API to retrieve the `Post` records of a `User` by traversing the relations** + +```js +const user = await prisma.comment + .findUnique({ + where: { id: '60ff4e9500acc65700ebf470' }, + }) + .post() + .user() +``` + +**Delete a `User` record** + +```js +const deletedUser = await prisma.user.delete({ + where: { email: 'sarah@prisma.io' }, +}) +``` + +
+ +### Build an app with Prisma ORM + +The Prisma blog features comprehensive tutorials about Prisma ORM, check out our latest ones: + +- [Build a fullstack app with Next.js](https://www.youtube.com/watch?v=QXxy8Uv1LnQ&ab_channel=ByteGrad) +- [Build a fullstack app with Remix](https://www.prisma.io/blog/fullstack-remix-prisma-mongodb-1-7D0BfTXBmB6r) (5 parts, including videos) +- [Build a REST API with NestJS](https://www.prisma.io/blog/nestjs-prisma-rest-api-7D056s1BmOL0) + +### Explore the data in Prisma Studio + +Prisma Studio is a visual editor for the data in your database. Run `npx prisma studio` in your terminal. + +### Try a Prisma ORM example + +The [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository contains a number of ready-to-run examples: + +| Demo | Stack | Description | +| :------------------------------------------------------------------------------------------------------------------ | :----------- | --------------------------------------------------------------------------------------------------- | +| [`nextjs-api-routes`](https://pris.ly/e/ts/rest-nextjs-api-routes) | Fullstack | Simple [Next.js](https://nextjs.org/) app (React) with a REST API | +| [`nextjs-graphql`](https://pris.ly/e/ts/graphql-nextjs) | Fullstack | Simple [Next.js](https://nextjs.org/) app (React) with a GraphQL API | +| [`graphql-nexus`](https://pris.ly/e/ts/graphql-nexus) | Backend only | GraphQL server based on [`@apollo/server`](https://www.apollographql.com/docs/apollo-server) | +| [`express`](https://pris.ly/e/ts/rest-express) | Backend only | Simple REST API with Express.JS | +| [`grpc`](https://pris.ly/e/ts/grpc) | Backend only | Simple gRPC API | diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/index.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/index.mdx new file mode 100644 index 0000000000..142fedb80d --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/200-add-to-existing-project/index.mdx @@ -0,0 +1,16 @@ +--- +title: 'Add to existing project' +metaTitle: 'Add Prisma ORM to an existing project' +metaDescription: 'Learn how to add Prisma ORM to an existing Node.js or TypeScript project by connecting it to your database of choice and generating a Prisma Client for database access.' +hide_table_of_contents: true +--- + + + +Include Prisma ORM in an existing project with the following documentation, which explains some core concepts as it guides you through integrating Prisma ORM into your workflow. + + + +## In this section + + diff --git a/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/index.mdx b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/index.mdx new file mode 100644 index 0000000000..1c52f07959 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/02-setup-prisma/index.mdx @@ -0,0 +1,17 @@ +--- +title: 'Set up Prisma ORM' +metaTitle: 'Set up Prisma ORM' +metaDescription: 'Get started with Prisma ORM and your favorite database. Learn about data modeling, migrations and querying.' +hide_table_of_contents: true +staticLink: true +--- + + + +Start from scratch or add Prisma ORM to an existing project. The following tutorials introduce you to the [Prisma CLI](/orm/tools/prisma-cli), [Prisma Client](/orm/prisma-client), and [Prisma Migrate](/orm/prisma-migrate). + + + +## In this section + + diff --git a/versioned_docs/version-legacy/100-getting-started/index.mdx b/versioned_docs/version-legacy/100-getting-started/index.mdx new file mode 100644 index 0000000000..5a22c8b691 --- /dev/null +++ b/versioned_docs/version-legacy/100-getting-started/index.mdx @@ -0,0 +1,237 @@ +--- +title: 'Get Started' +metaTitle: 'Get started with Prisma' +metaDescription: 'Build data-driven applications with ease using Prisma ORM, add connection pooling or global caching with Prisma Accelerate or subscribe to database changes in real-time with Prisma Pulse.' +hide_title: true +tocDepth: 1 +sidebar_position: 0 +sidebar_class_name: firstTitle +pagination_next: 'getting-started/quickstart-sqlite' +--- + +import { + Bolt, + BorderBox, + BoxTitle, + Inspect, + Database, + Grid, + LinkCard, + List, + SignalStream, + PrismaPostgres, + SquareLogo, +} from '@site/src/components/GettingStarted'; + + + + + +Get started + +Welcome 👋 + +Explore our products that make it easy to build and scale data-driven applications: + +[**Prisma ORM**](/orm/overview/introduction/what-is-prisma) is a next-generation Node.js and TypeScript ORM that unlocks a new level of developer experience when working with databases thanks to its intuitive data model, automated migrations, type-safety & auto-completion. + +[**Prisma Optimize**](/optimize/) helps you analyze queries, generate insights, and provides recommendations to make your database queries faster. + +[**Prisma Accelerate**](/accelerate) is a global database cache with scalable connection pooling to make your queries fast. + +[**Prisma Pulse**](/pulse) allows you to react to database changes with type-safe model streams in real-time. + +[**Prisma Postgres**](/orm/overview/databases/prisma-postgres) is a managed PostgreSQL service that gives you an _always-on_ database with _pay-as-you-go_ pricing. Prisma Postgres is currently in [Early Access](/platform/maturity-levels#early-access). + + + + + +## Prisma ORM + +Add Prisma ORM to your application in a few minutes to start modeling your data, run schema migrations and query your database. + +### The easiest way to get started with Prisma + +_Explore all Prisma products at once._ + + + +### Explore quickly with a SQLite database + +_These options don't require you to have your own database running._ + + + + + + +### Choose an option to get started with your own database + +_Select one of these options if you want to connect Prisma ORM to your own database._ + + + +

+ Set up Prisma ORM from scratch with your favorite database and + learn basic workflows like data modeling, querying, and migrations. +

+ + + + + + + + + +
+ +

+ Get started with Prisma ORM and your existing database by + introspecting your database schema and learn how to query your database. +

+ + + + + + + + +
+
+ +## Prisma Accelerate + +Make your database queries faster by scaling your database connections and caching database results at the edge with Prisma Accelerate. + + + + + +
+ + +## Prisma Pulse + +Build real-time applications by subscribing to data changes in your database using Prisma Pulse. + + + + + + +## Prisma Optimize + +Make your database queries faster by using the insights and recommendations generated by Prisma Optimize. + + + + + diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/100-what-is-prisma.mdx b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/100-what-is-prisma.mdx new file mode 100644 index 0000000000..98fdb45de3 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/100-what-is-prisma.mdx @@ -0,0 +1,269 @@ +--- +title: 'What is Prisma ORM?' +metaTitle: 'What is Prisma ORM? (Overview)' +metaDescription: "This page gives a high-level overview of what Prisma ORM is and how it works. It's a great starting point for Prisma newcomers!" +--- + +Prisma ORM is an [open-source](https://github.com/prisma/prisma) next-generation ORM. It consists of the following parts: + +- **Prisma Client**: Auto-generated and type-safe query builder for Node.js & TypeScript +- **Prisma Migrate**: Migration system +- **Prisma Studio**: GUI to view and edit data in your database. + + + + **Prisma Studio** is the only part of Prisma ORM that is not open source. You can only run Prisma Studio locally. + + + +Prisma Client can be used in _any_ Node.js (supported versions) or TypeScript backend application (including serverless applications and microservices). This can be a [REST API](/orm/overview/prisma-in-your-stack/rest), a [GraphQL API](/orm/overview/prisma-in-your-stack/graphql), a gRPC API, or anything else that needs a database. + +
+ +
+ +## How does Prisma ORM work? + +### The Prisma schema + +Every project that uses a tool from the Prisma ORM toolkit starts with a [Prisma schema](/orm/prisma-schema). The Prisma schema allows developers to define their _application models_ in an intuitive data modeling language. It also contains the connection to a database and defines a _generator_: + + + +```prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + + + +```prisma +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + content String? + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + posts Post[] +} +``` + + + + +> **Note**: The Prisma schema has powerful data modeling features. For example, it allows you to define "Prisma-level" [relation fields](/orm/prisma-schema/data-model/relations) which will make it easier to work with [relations in the Prisma Client API](/orm/prisma-client/queries/relation-queries). In the case above, the `posts` field on `User` is defined only on "Prisma-level", meaning it does not manifest as a foreign key in the underlying database. + +In this schema, you configure three things: + +- **Data source**: Specifies your database connection (via an environment variable) +- **Generator**: Indicates that you want to generate Prisma Client +- **Data model**: Defines your application models + +### The Prisma schema data model + +On this page, the focus is on the data model. You can learn more about [Data sources](/orm/prisma-schema/overview/data-sources) and [Generators](/orm/prisma-schema/overview/generators) on the respective docs pages. + +#### Functions of Prisma schema data models + +The data model is a collection of [models](/orm/prisma-schema/data-model/models#defining-models). A model has two major functions: + +- Represent a table in relational databases or a collection in MongoDB +- Provide the foundation for the queries in the Prisma Client API + +#### Getting a data model + +There are two major workflows for "getting" a data model into your Prisma schema: + +- Manually writing the data model and mapping it to the database with [Prisma Migrate](/orm/prisma-migrate) +- Generating the data model by [introspecting](/orm/prisma-schema/introspection) a database + +Once the data model is defined, you can [generate Prisma Client](/orm/prisma-client/setup-and-configuration/generating-prisma-client) which will expose CRUD and more queries for the defined models. If you're using TypeScript, you'll get full type-safety for all queries (even when only retrieving the subsets of a model's fields). + +### Accessing your database with Prisma Client + +#### Generating Prisma Client + +The first step when using Prisma Client is installing the `@prisma/client` npm package: + +```terminal +npm install @prisma/client +``` + +Installing the `@prisma/client` package invokes the `prisma generate` command, which reads your Prisma schema and _generates_ Prisma Client code. The code is [generated into the `node_modules/.prisma/client` folder by default](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package). + +After you change your data model, you'll need to manually re-generate Prisma Client to ensure the code inside `node_modules/.prisma/client` gets updated: + +```terminal +prisma generate +``` + +#### Using Prisma Client to send queries to your database + +Once Prisma Client has been generated, you can import it in your code and send queries to your database. This is what the setup code looks like. + +##### Import and instantiate Prisma Client + + + + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() +``` + + + + +```js +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() +``` + + + + +Now you can start sending queries via the generated Prisma Client API, here are a few sample queries. Note that all Prisma Client queries return _plain old JavaScript objects_. + +Learn more about the available operations in the [Prisma Client API reference](/orm/prisma-client). + +##### Retrieve all `User` records from the database + +```ts +// Run inside `async` function +const allUsers = await prisma.user.findMany() +``` + +##### Include the `posts` relation on each returned `User` object + +```ts +// Run inside `async` function +const allUsers = await prisma.user.findMany({ + include: { posts: true }, +}) +``` + +##### Filter all `Post` records that contain `"prisma"` + +```ts +// Run inside `async` function +const filteredPosts = await prisma.post.findMany({ + where: { + OR: [ + { title: { contains: 'prisma' } }, + { content: { contains: 'prisma' } }, + ], + }, +}) +``` + +##### Create a new `User` and a new `Post` record in the same query + +```ts +// Run inside `async` function +const user = await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Join us for Prisma Day 2020' }, + }, + }, +}) +``` + +##### Update an existing `Post` record + +```ts +// Run inside `async` function +const post = await prisma.post.update({ + where: { id: 42 }, + data: { published: true }, +}) +``` + +#### Usage with TypeScript + +Note that when using TypeScript, the result of this query will be _statically typed_ so that you can't accidentally access a property that doesn't exist (and any typos are caught at compile-time). Learn more about leveraging Prisma Client's generated types on the [Advanced usage of generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types) page in the docs. + +## Typical Prisma ORM workflows + +As mentioned above, there are two ways for "getting" your data model into the Prisma schema. Depending on which approach you choose, your main Prisma ORM workflow might look different. + +### Prisma Migrate + +With **Prisma Migrate**, Prisma ORM's integrated database migration tool, the workflow looks as follows: + +1. Manually adjust your [Prisma schema data model](/orm/prisma-schema/data-model/models) +1. Migrate your development database using the `prisma migrate dev` CLI command +1. Use Prisma Client in your application code to access your database + +![Typical workflow with Prisma Migrate](/img/orm/prisma-migrate-development-workflow.png) + +To learn more about the Prisma Migrate workflow, see: + +- [Deploying database changes with Prisma Migrate](/orm/prisma-client/deployment/deploy-database-changes-with-prisma-migrate) + +* [Developing with Prisma Migrate](/orm/prisma-migrate) + +### SQL migrations and introspection + +If for some reason, you can not or do not want to use Prisma Migrate, you can still use introspection to update your Prisma schema from your database schema. +The typical workflow when using **SQL migrations and introspection** is slightly different: + +1. Manually adjust your database schema using SQL or a third-party migration tool +1. (Re-)introspect your database +1. Optionally [(re-)configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names)) +1. (Re-)generate Prisma Client +1. Use Prisma Client in your application code to access your database + +![Introspect workflow](/img/orm/prisma-evolve-app-workflow.png) + +To learn more about the introspection workflow, please refer the [introspection section](/orm/prisma-schema/introspection). diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/200-why-prisma.mdx b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/200-why-prisma.mdx new file mode 100644 index 0000000000..7c48398cce --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/200-why-prisma.mdx @@ -0,0 +1,95 @@ +--- +title: 'Why Prisma ORM?' +metaTitle: 'Why Prisma ORM? Comparison with SQL query builders & ORMs' +metaDescription: 'Learn about the motivation for Prisma ORM and how it compares to other Node.js and TypeScript database tools like ORMs and SQL query builders.' +--- + + + +On this page, you'll learn about the motivation for Prisma ORM and how it compares to other database tools like traditional ORMs and SQL query builders. + +Working with relational databases is a major bottleneck in application development. Debugging SQL queries or complex ORM objects often consume hours of development time. + +Prisma ORM makes it easy for developers to reason about their database queries by providing a clean and type-safe API for submitting database queries which returns _plain old JavaScript objects_. + + + +## TLDR + +Prisma ORM's main goal is to make application developers more productive when working with databases. Here are a few examples of how Prisma ORM achieves this: + +- **Thinking in objects** instead of mapping relational data +- **Queries not classes** to avoid complex model objects +- **Single source of truth** for database and application models +- **Healthy constraints** that prevent common pitfalls and anti-patterns +- **An abstraction that makes the right thing easy** ("pit of success") +- **Type-safe database queries** that can be validated at compile time +- **Less boilerplate** so developers can focus on the important parts of their app +- **Auto-completion in code editors** instead of needing to look up documentation + +The remaining parts of this page discuss how Prisma ORM compares to existing database tools. + +## Problems with SQL, traditional ORMs and other database tools + +The main problem with the database tools that currently exist in the Node.js and TypeScript ecosystem is that they require a major tradeoff between _productivity_ and _control_. + +![Productivity vs Control in ORMs, SQL query builders, and SQL](./node-js-db-tools-tradeoffs.png) + +### Raw SQL: Full control, low productivity + +With raw SQL (e.g. using the native [`pg`](https://node-postgres.com/) or [`mysql`](https://github.com/mysqljs/mysql) Node.js database drivers) you have full control over your database operations. However, productivity suffers as sending plain SQL strings to the database is cumbersome and comes with a lot of overhead (manual connection handling, repetitive boilerplate, ...). + +Another major issue with this approach is that you don't get any type safety for your query results. Of course, you can type the results manually but this is a huge amount of work and requires major refactorings each time you change your database schema or queries to keep the typings in sync. + +Furthermore, submitting SQL queries as plain strings means you don't get any autocompletion in your editors. + +### SQL query builders: High control, medium productivity + +A common solution that retains a high level of control and provides better productivity is to use a SQL query builder (e.g. [knex.js](https://knexjs.org/)). These sort of tools provide a programmatic abstraction to construct SQL queries. + +The biggest drawback with SQL query builders is that application developers still need to think about their data in terms of SQL. This incurs a cognitive and practical cost of translating relational data into objects. Another issue is that it's too easy to shoot yourself in the foot if you don't know exactly what you're doing in your SQL queries. + +### Traditional ORMs: Less control, better productivity + +Traditional ORMs abstract away from SQL by letting you _define your application models as classes_, these classes are mapped to tables in the database. + +> "Object relational mappers" (ORMs) exist to bridge the gap between the programmers' friend (the object), and the database's primitive (the relation). The reasons for these differing models are as much cultural as functional: programmers like objects because they encapsulate the state of a single thing in a running program. Databases like relations because they better suit whole-dataset constraints and efficient access patterns for the entire dataset. +> +> [The Troublesome Active Record Pattern, Cal Paterson (2020)](https://calpaterson.com/activerecord.html) + +You can then read and write data by calling methods on the instances of your model classes. + +This is way more convenient and comes closer to the mental model developers have when thinking about their data. So, what's the catch? + +> ORM represents a quagmire which starts well, gets more complicated as time passes, and before long entraps its users in a commitment that has no clear demarcation point, no clear win conditions, and no clear exit strategy. +> +> [The Vietnam of Computer Science, Ted Neward (2006)](https://blog.codinghorror.com/object-relational-mapping-is-the-vietnam-of-computer-science/) + +As an application developer, the mental model you have for your data is that of an _object_. The mental model for data in SQL on the other hand are _tables_. + +The divide between these two different representations of data is often referred to as the [object-relational impedance mismatch](https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch). The object-relational impedance mismatch also is a major reason why many developers don't like working with traditional ORMs. + +As an example, consider how data is organized and relationships are handled with each approach: + +- **Relational databases**: Data is typically normalized (flat) and uses foreign keys to link across entities. The entities then need to be JOINed to manifest the actual relationships. +- **Object-oriented**: Objects can be deeply nested structures where you can traverse relationships simply by using dot notation. + +This alludes to one of the major pitfalls with traditional ORMs: While they make it _seem_ that you can simply traverse relationships using familiar dot notation, under the hood the ORM generates SQL JOINs which are expensive and have the potential to drastically slow down your application (one symptom of this is the [n+1 problem](https://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem-in-orm-object-relational-mapping)). + +To conclude: The appeal of traditional ORMs is the premise of abstracting away the relational model and thinking about your data purely in terms of objects. While the premise is great, it's based on the wrong assumption that relational data can easily be mapped to objects which leads to lots of complications and pitfalls. + +## Application developers should care about data – not SQL + +Despite being developed in the 1970s(!), SQL has stood the test of time in an impressive manner. However, with the advancement and modernization of developers tools, it's worth asking if SQL really is the best abstraction for application developers to work with? + +After all, **developers should only care about the _data_ they need to implement a feature** and not spend time figuring out complicated SQL queries or massaging query results to fit their needs. + +There's another argument to be made against SQL in application development. The power of SQL can be a blessing if you know exactly what you're doing, but its complexity can be a curse. There are a lot of [anti-patterns](https://www.slideshare.net/billkarwin/sql-antipatterns-strike-back) and pitfalls that even experienced SQL users struggle to anticipate, often at the cost of performance and hours of debugging time. + +Developers should be able to ask for the data they need instead of having to worry about "doing the right thing" in their SQL queries. They should be using an abstraction that makes the right decisions for them. This can mean that the abstraction imposes certain "healthy" constraints that prevent developers from making mistakes. + +## Prisma ORM makes developers productive + +Prisma ORM's main goal is to make application developers more productive when working with databases. Considering the tradeoff between productivity and control again, this is how Prisma ORM fits in: + +![Prisma ORM makes developers productive](./prisma-makes-devs-productive.png) diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/250-should-you-use-prisma.mdx b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/250-should-you-use-prisma.mdx new file mode 100644 index 0000000000..3ca98d09f9 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/250-should-you-use-prisma.mdx @@ -0,0 +1,106 @@ +--- +title: 'Should you use Prisma ORM?' +metaTitle: 'Should you use Prisma ORM as a Node.js/TypeScript ORM?' +metaDescription: 'Prisma ORM is a new kind of ORM. This page explains when Prisma ORM would be a good fit, and provides alternatives for other scenarios.' +tocDepth: 3 +toc: true +--- + + + +Prisma ORM is a new kind of ORM that - like any other tool - comes with its own tradeoffs. This page explains when Prisma ORM would be a good fit, and provides alternatives for other scenarios. + + + +## Prisma ORM likely _is_ a good fit for you if ... + +### ... you are building a server-side application that talks to a database + +This is the main use case for Prisma ORM. Server-side applications typically are API servers that expose data operations via technologies like REST, GraphQL or gRPC. They are commonly built as microservices or monolithic apps and deployed via long-running servers or serverless functions. Prisma ORM is a great fit for all of these application and deployment models. + +Refer to the full list of databases (relational, NoSQL, and NewSQL) that Prisma ORM [supports](/orm/reference/supported-databases). + +### ... you care about productivity and developer experience + +Productivity and developer experience are core to how we're building our tools. We're looking to build developer-friendly abstractions for tasks that are complex, error-prone and time-consuming when performed manually. + +No matter if you're a SQL newcomer or veteran, Prisma ORM will give you a significant productivity boost for the most common database workflows. + +Here are a couple of the guiding principles and general practices we apply when designing and building our tools: + +- [make the right thing easy](https://jason.energy/right-thing-easy-thing/) +- [pit of success](https://blog.codinghorror.com/falling-into-the-pit-of-success/) +- offer intelligent autocompletion where possible +- build powerful editor extensions (e.g. for [VS Code](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma)) +- go the extra mile to achieve full type-safety + +### ... you are working in a team + +Prisma ORM shines especially when used in collaborative environments. + +The declarative [Prisma schema](/orm/prisma-schema) provides an overview of the current state of the database that's easy to understand for everyone. This is a major improvement to traditional workflows where developers have to dig through migration files to understand the current table structure. + +[Prisma Client](/orm/prisma-client)'s minimal API surface enables developers to pick it up quickly without much learning overhead, so onboarding new developers to a team becomes a lot smoother. + +The [Prisma Migrate](/orm/prisma-migrate) workflows are designed in a way to cover database schema changes in collaborative environments. From the initial schema creation up to the point of deploying schema changes to production and resolving conflicts that were introduced by parallel modifications, Prisma Migrate has you covered. + +### ... you want a tool that holistically covers your database workflows + +Prisma ORM is a lot more than "just another ORM". We are building a database toolkit that covers the daily workflows of application developers that interact with databases. A few examples are: + +- querying (with [Prisma Client](/orm/prisma-client)) +- data modeling (in the [Prisma schema](/orm/prisma-schema)) +- migrations (with [Prisma Migrate](/orm/prisma-migrate)) +- prototyping (via [`prisma db push`](/orm/reference/prisma-cli-reference#db-push)) +- seeding (via [`prisma db seed`](/orm/reference/prisma-cli-reference#db-seed)) +- visual viewing and editing (with [Prisma Studio](https://www.prisma.io/studio)) + +### ... you value type-safety + +Prisma ORM is the only _fully_ type-safe ORM in the TypeScript ecosystem. The generated Prisma Client ensures typed query results even for partial queries and relations. You can learn more about this in the [type-safety comparison with TypeORM](/orm/more/comparisons/prisma-and-typeorm#type-safety). + +### ... you want to write raw, type-safe SQL + +In addition to the intuitive, higher-level query API, Prisma ORM also offers a way for you to [write raw SQL with full type safety](https://www.prisma.io/blog/announcing-typedsql-make-your-raw-sql-queries-type-safe-with-prisma-orm). + +### ... you want an ORM with a transparent development process, proper maintenance & support + +Development of Prisma ORM's open source tools is happening in the open. Most of it happens directly on GitHub in the main [`prisma/prisma`](https://github.com/prisma/prisma) repo: + +- issues and PRs in our repos are triaged and prioritized (usually within 1-2 days) +- new [releases](https://github.com/prisma/prisma/releases) with new features and improvements are issued every three weeks +- we have a dedicated support team that responds to questions in [GitHub Discussions](https://github.com/prisma/prisma/discussions) + +### ... you want to be part of an awesome community + +Prisma has a lively [community](https://www.prisma.io/community) that you can find on [Discord](https://pris.ly/discord). We also regularly host Meetups, conferences and other developer-focused events. Join us! + +## Prisma ORM likely is _not_ a good fit for you if ... + +### ... you need _full_ control over all database queries + +Prisma ORM is an abstraction. As such, an inherent tradeoff of Prisma ORM is a reduced amount of control in exchange for higher productivity. This means, the [Prisma Client API](/orm/prisma-client) might have less capabilities in some scenarios than you get with plain SQL. + +If your application has requirements for database queries that Prisma ORM does not provide and the workarounds are too costly, you might be better off with a tool that allows you to exercise full control over your database operations using plain SQL. + +> **Note**: If you can work around a certain limitation but still would like to see an improvement in the way how Prisma ORM handles the situation, we encourage you to create a [feature request](https://github.com/prisma/prisma/issues/new?assignees=&labels=&template=feature_request.md&title=) on GitHub so that our Product and Engineering teams can look into it. + +_Alternatives_: SQL drivers (e.g. [`node-postgres`](https://node-postgres.com/), [`mysql`](https://github.com/mysqljs/mysql), [`sqlite3`](https://github.com/TryGhost/node-sqlite3), ...) + +### ... you do not want to write any code for your backend + +If you don't want to write any code for your backend and just be able to generate your API server and the database out-of-the-box, you might rather choose a Backend-as-a-Service (BaaS) for your project. + +With a BaaS, you can typically configure your data model via a high-level API (e.g. [GraphQL SDL](https://www.prisma.io/blog/graphql-sdl-schema-definition-language-6755bcb9ce51)) or a visual editor. Based on this data model, the BaaS generates a CRUD API and provisions a database for you. With this setup, you typically don't have control over the infrastructure the API server and database are running on. + +With Prisma ORM, you are building the backend yourself using Node.js or TypeScript. This means you'll have to do a lot more coding work compared to using a BaaS. The benefit of this approach is that you have full flexibility for building, deploying, scaling and maintaining your backend and are not dependent on 3rd party software for a crucial part of your stack. + +_Alternatives_: [AWS AppSync](https://aws.amazon.com/appsync/), [8base](https://www.8base.com/), [Nhost](https://nhost.io/), [Supabase](https://supabase.com/), [Firebase](https://firebase.google.com/), [Amplication](https://amplication.com/) + +### ... you want a CRUD GraphQL API without writing any code + +While tools like the [`nexus-plugin-prisma`](https://nexusjs.org/docs/plugins/prisma/overview) and [`typegraphql-prisma`](https://github.com/MichalLytek/typegraphql-prisma#readme) allow you to quickly generate CRUD operations for your Prisma ORM models in a GraphQL API, these approaches still require you to set up your GraphQL server manually and do some work to expose GraphQL queries and mutations for the models defined in your Prisma schema. + +If you want to get a GraphQL endpoint for your database out-of-the box, other tools might be better suited for your use case. + +_Alternatives_: [Hasura](https://hasura.io/), [Postgraphile](https://www.graphile.org/postgraphile/) diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/300-data-modeling.mdx b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/300-data-modeling.mdx new file mode 100644 index 0000000000..75c50a5378 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/300-data-modeling.mdx @@ -0,0 +1,246 @@ +--- +title: 'Data modeling' +metaTitle: 'Data modeling with Prisma' +metaDescription: 'Learn how data modeling with Prisma differs from data modeling with SQL or ORMs. Prisma uses a declarative data modeling language to describe a database schema.' +--- + +## What is data modeling? + +The term _data modeling_ refers to the **process of defining the shape and structure of the objects in an application**, these objects are often called "application models". In relational databases (like PostgreSQL), they are stored in _tables_ . When using document databases (like MongoDB), they are stored in _collections_. + +Depending on the domain of your application, the models will be different. For example, if you're writing a blogging application, you might have models such as _blog_, _author_, _article_. When writing a car-sharing app, you probably have models like _driver_, _car_, _route_. Application models enable you to represent these different entities in your code by creating respective _data structures_. + +When modeling data, you typically ask questions like: + +- What are the main entities/concepts in my application? +- How do they relate to each other? +- What are their main characteristics/properties? +- How can they be represented with my technology stack? + +## Data modeling without Prisma ORM + +Data modeling typically needs to happen on (at least) two levels: + +- On the **database** level +- On the **application** level (i.e., in your programming language) + +The way that the application models are represented on both levels might differ due to a few reasons: + +- Databases and programming languages use different data types +- Relations are represented differently in a database than in a programming language +- Databases typically have more powerful data modeling capabilities, like indexes, cascading deletes, or a variety of additional constraints (e.g. unique, not null, ...) +- Databases and programming languages have different technical constraints + +### Data modeling on the database level + +#### Relational databases + +In relational databases, models are represented by _tables_. For example, you might define a `users` table to store information about the users of your application. Using PostgreSQL, you'd define it as follows: + +```sql +CREATE TABLE users ( + user_id SERIAL PRIMARY KEY NOT NULL, + name VARCHAR(255), + email VARCHAR(255) UNIQUE NOT NULL, + isAdmin BOOLEAN NOT NULL DEFAULT false +); +``` + +A visual representation of the `users` table with some random data might look as follows: + +| `user_id` | `name` | `email` | `isAdmin` | +| :-------- | :------ | :---------------- | :-------- | +| `1` | `Alice` | `alice@prisma.io` | `false` | +| `2` | `Bob` | `bob@prisma.io` | `false` | +| `3` | `Sarah` | `sarah@prisma.io` | `true` | + +It has the following columns: + +- `user_id`: An integer that increments with every new record in the `users` table. It also represents the [primary key](https://en.wikipedia.org/wiki/Primary_key) for each record. +- `name`: A string with at most 255 characters. +- `email`: A string with at most 255 characters. Additionally, the added constraints express that no two records can have duplicate values for the `email` column, and that _every_ record needs to have a value for it. +- `isAdmin`: A boolean that indicates whether the user has admin rights (default value: `false`) + +#### MongoDB + +In MongoDB databases, models are represented by _collections_ and contain _documents_ that can have any structure: + +```js +{ + _id: '607ee94800bbe41f001fd568', + slug: 'prisma-loves-mongodb', + title: 'Prisma <3 MongoDB', + body: "This is my first post. Isn't MongoDB + Prisma awesome?!" +} +``` + +Prisma Client currently expects a consistent model and [normalized model design](https://www.mongodb.com/docs/manual/data-modeling/concepts/embedding-vs-references/#references). This means that: + +- If a model or field is not present in the Prisma schema, it is ignored +- If a field is mandatory but not present in the MongoDB dataset, you will get an error + +### Data modeling on the application level + +In addition to creating the tables that represent the entities from your application domain, you also need to create application models in your programming language. In object-oriented languages, this is often done by creating _classes_ to represent your models. Depending on the programming language, this might also be done with _interfaces_ or _structs_. + +There often is a strong correlation between the tables in your database and the models you define in your code. For example, to represent records from the aforementioned `users` table in your application, you might define a JavaScript (ES6) class looking similar to this: + +```js +class User { + constructor(user_id, name, email, isAdmin) { + this.user_id = user_id + this.name = name + this.email = email + this.isAdmin = isAdmin + } +} +``` + +When using TypeScript, you might define an interface instead: + +```js +interface User { + user_id: number + name: string + email: string + isAdmin: boolean +} +``` + +Notice how the `User` model in both cases has the same properties as the `users` table in the previous example. While it's often the case that there's a 1:1 mapping between database tables and application models, it can also happen that models are represented completely differently in the database and your application. + +With this setup, you can retrieve records from the `users` table and store them as instances of your `User` type. The following example code snippet uses [`pg`](https://node-postgres.com/) as the driver for PostgreSQL and creates a `User` instance based on the above defined JavaScript class: + +```js +const resultRows = await client.query('SELECT * FROM users WHERE user_id = 1') +const userData = resultRows[0] +const user = new User( + userData.user_id, + userData.name, + userData.email, + userData.isAdmin +) +// user = { +// user_id: 1, +// name: "Alice", +// email: "alice@prisma.io", +// isAdmin: false +// } +``` + +Notice that in these examples, the application models are "dumb", meaning they don't implement any logic but their sole purpose is to carry data as _plain old JavaScript objects_. + +### Data modeling with ORMs + +ORMs are commonly used in object-oriented languages to make it easier for developers to work with a database. The key characteristic of an ORM is that it lets you model your application data in terms of _classes_ which are mapped to _tables_ in the underlying database. + +The main difference compared to the approaches explained above is these classes not only carry data but also implement a substantial amount of logic. Mostly for storage, retrieval, serialization, and deserialization, but sometimes they also implement business logic that's specific to your application. + +This means, you don't write SQL statements to read and write data in the database, but instead the instances of your model classes provide an API to store and retrieve data. + +[Sequelize](https://sequelize.org/) is a popular ORM in the Node.js ecosystem, this is how you'd define the same `User` model from the sections before using Sequelize's modeling approach: + +```js +class User extends Model {} +User.init( + { + user_id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + name: Sequelize.STRING(255), + email: { + type: Sequelize.STRING(255), + unique: true, + }, + isAdmin: Sequelize.BOOLEAN, + }, + { sequelize, modelName: 'user' } +) +``` + +To get an example with this `User` class to work, you still need to create the corresponding table in the database. With Sequelize, you have two ways of doing this: + +- Run `User.sync()` (typically not recommended for production) +- Use [Sequelize migrations](https://sequelize.org/v5/manual/migrations.html) to change your database schema + +Note that you'll never instantiate the `User` class manually (using `new User(...)`) as was shown in the previous section, but rather call _static_ methods on the `User` class which then return the `User` model instances: + +```js +const user = await User.findByPk(42) +``` + +The call to `findByPk` creates a SQL statement to retrieve the `User` record that's identified by the ID value `42`. + +The resulting `user` object is an instance of Sequelize's `Model` class (because `User` inherits from `Model`). It's not a POJO, but an object that implements additional behavior from Sequelize. + +## Data modeling with Prisma ORM + +Depending on which parts of Prisma ORM you want to use in your application, the data modeling flow looks slightly different. The following two sections explain the workflows for using [**only Prisma Client**](#using-only-prisma-client) and using [**Prisma Client and Prisma Migrate**](#using-prisma-client-and-prisma-migrate). + +No matter which approach though, with Prisma ORM you never create application models in your programming language by manually defining classes, interfaces, or structs. Instead, the application models are defined in your [Prisma schema](/orm/prisma-schema): + +- **Only Prisma Client**: Application models in the Prisma schema are _generated based on the introspection of your database schema_. Data modeling happens primarily on the database-level. +- **Prisma Client and Prisma Migrate**: Data modeling happens in the Prisma schema by _manually adding application models_ to it. Prisma Migrate maps these application models to tables in the underlying database (currently only supported for relational databases). + +As an example, the `User` model from the previous example would be represented as follows in the Prisma schema: + +```prisma +model User { + user_id Int @id @default(autoincrement()) + name String? + email String @unique + isAdmin Boolean @default(false) +} +``` + +Once the application models are in your Prisma schema (whether they were added through introspection or manually by you), the next step typically is to generate Prisma Client which provides a programmatic and type-safe API to read and write data in the shape of your application models. + +Prisma Client uses TypeScript [type aliases](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-aliases) to represent your application models in your code. For example, the `User` model would be represented as follows in the generated Prisma Client library: + +```ts +export declare type User = { + id: number + name: string | null + email: string + isAdmin: boolean +} +``` + +In addition to the generated types, Prisma Client also provides a data access API that you can use once you've installed the `@prisma/client` package: + +```js +import { PrismaClient } from '@prisma/client' +// or +// const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +// use inside an `async` function to `await` the result +await prisma.user.findUnique(...) +await prisma.user.findMany(...) +await prisma.user.create(...) +await prisma.user.update(...) +await prisma.user.delete(...) +await prisma.user.upsert(...) +``` + +### Using only Prisma Client + +When using only Prisma Client and _not_ using Prisma Migrate in your application, data modeling needs to happen on the database level via SQL. Once your SQL schema is ready, you use Prisma's introspection feature to add the application models to your Prisma schema. Finally, you generate Prisma Client which creates the types as well as the programmatic API for you to read and write data in your database. + +Here is an overview of the main workflow: + +1. Change your database schema using SQL (e.g. `CREATE TABLE`, `ALTER TABLE`, ...) +1. Run `prisma db pull` to introspect the database and add application models to the Prisma schema +1. Run `prisma generate` to update your Prisma Client API + +### Using Prisma Client and Prisma Migrate + +When using [Prisma Migrate](/orm/prisma-migrate), you define your application in the Prisma schema and with relational databases use the `prisma migrate` subcommand to generate plain SQL migration files, which you can edit before applying. With MongoDB, you use `prisma db push` instead which applies the changes to your database directly. + +Here is an overview of the main workflow: + +1. Manually change your application models in the Prisma schema (e.g. add a new model, remove an existing one, ...) +1. Run `prisma migrate dev` to create and apply a migration or run `prisma db push` to apply the changes directly (in both cases Prisma Client is automatically generated) diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/index.mdx b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/index.mdx new file mode 100644 index 0000000000..5bbee8ff90 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/index.mdx @@ -0,0 +1,20 @@ +--- +title: 'Introduction' +metaTitle: 'Introduction (Overview)' +metaDescription: "This section gives a high-level overview of what Prisma is and how it works. It's a great starting point for Prisma newcomers!" +hide_table_of_contents: true +--- + + + +This page gives a high-level overview of what Prisma ORM is and how it works. + +If you want to get started with a _practical introduction_ and learn about the Prisma Client API, head over to the [**Getting Started**](/getting-started) documentation. + +To learn more about the _motivation_ for Prisma ORM, check out the [**Why Prisma ORM?**](/orm/overview/introduction/why-prisma) page. + + + +## In this section + + diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/node-js-db-tools-tradeoffs.png b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/node-js-db-tools-tradeoffs.png new file mode 100644 index 0000000000000000000000000000000000000000..8037da2e08042ba687aced65082f688f5696171c GIT binary patch literal 17765 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 AE&u=k literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/prisma-makes-devs-productive.png b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/prisma-makes-devs-productive.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd68959c68265cd5daf0aa292ccae01b13f2c79 GIT binary patch literal 23811 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 g)1*+d0#Y<3q*yFV^bjbD60^ zw!dA?CTOlF>3nYr)Ob}Qj(l_{6hXw9iwk=*s#7iapSKk@&kjAsxSdT^9oVv^r9q|B zx!pid>*ACd9N*O_OHZiRX$KQ{{L?pv&QoA->e^{yNh%~w*)0}KrnOHp_a9HPZV zAV2bbhc^mEY>iH6-@4X+&qKqWN`_4TpZ>KL$m-D2Jpx|@RVG(l0XNwYyeUW!7|Zw* Dln%%( literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/prisma-rest-apis.png b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/prisma-rest-apis.png new file mode 100644 index 0000000000000000000000000000000000000000..9e374a2fa0287c15719129db87392134841cbb6f GIT binary patch literal 12866 zcmb7qWmr^Exb85_z|cboNNyVG6p$KVXz6Yw1w}%ng`p&c5d@?}S`?%~I+aqoySoLX zx#KzK-sk){&wcLQzrOXY^}gTxeS597XZBuE+M3El_%!$+5Qs=s1*r=H;UGXDEC>u6 z<56yeJpqBhaoUgd6){a!gQqG6Pxqr9s^~vmbOKgi^Q-DV-HR68i4Yl=jUASb7?p_` zla1Yt5Iu+x--r;Jdj=r2pN}A7FhJv{6VuMXPQ=5#C{Z;7$DK%#`DXyesb=tW<~e`? zj>^WU=|A0llD8N65M%7v<(fK9?njH-1#FBfCydFy-M1^igx-x5!O+?VZU0B;hZx(` ze&U}n{ijB5qkFdbqq4F4wuQS9V)lVM2hk5lrDH~AqHX;*2N0+|+X7X+rx*b$dX5f( z+vBotuWANv&n_{vBT_Mn2KJ`U<}vzboq?IB0EQW(Z8!3vsl%k2f&Jat-(8IONU^=B zhbE3wss@guGO@GIfO#jt*lxnqVQSC500Y5@9G8v8RKx!D_AX|yZGk;%d;dv3M!%Zj zQ@enzUE6&7*IO8!h7RKk&cL(-aC>@rRnw1&dk`(^@On$t@F~V~b8=x~KXG^R_p6CI44l*qoH6!pl;~CU z@2lDYOc^nL3}nU$xH`Qv!8BiQU!L6kJ-NF(Il)N1ySuwQy>kfM!k{q5o?QV(3?@xX ziEbyBF-7=SWXH*l>D%qJwrRuEgYtpXuGzKFDva#Q`R&E$g_CNDH`|8`&kHXXw#({H z_wswjCN4X=|IR)6blf<$;`41|{d!~lCMM%xJFVUK?QZ6m_=dm3E3R*L z|BkF|#Mi&iJ&H*`2ua%adAqw2*D$|uU089F`SsZ6?Ot8m*{{Ki`nI#>bzpR5Of78GKk1p!}Z8PGmx zY01j6cC&^bv}B>Oz%#WJI`oS;4Bh=ml{4#^Hlh02GG!=8!dm(0FP@7bmbIU6d4Ii; z(~IN^6`HOZtuN9Ll+%xfdjCWRdTd+z+w051j?LA>KZm)DpUY7Xew_A=JCE;f7?Ac= z5Qa83M)x@fw)jXS&zVDi8WUZtOw=MviMaE|Y_Rlt4$}5bDobr{7ifF_wscj>r--(@ z$ppcAq|UVZv8?gkuQIqOYXyVm@^8F`EFzf>ymqss-h?r{H*Q7Ryml%%Q)HN5RCf=W zk~$SSOmFh{bzzQf2L%G~?VsOcJW~NK!_K!kFpEfdt^AlhX&!zupSeoRV7MZj>IH=y zv@TKAFtKWNNM!i@^V1(xiu%_t8($`9l8IIe*9pILJr5*MC{9d0>AvvW&wM(FwaWG2 zbg=1O3q@N_)b$7QPdQ*_W_7~Uja)TxJ*O6ms0goFiG*jx^;ialQZxj+oZNj# z?^k$SumMwQyA@je0ahA^?B za_oA)#zjjMTm0Bv8TGz~VI5-@=bXygwEIcOcGj@

GPL5MnIt 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/user-post-relation-1-n.png b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/user-post-relation-1-n.png new file mode 100644 index 0000000000000000000000000000000000000000..bab7611d32da3d19e2fe36eee0490fba14a061d7 GIT binary patch literal 59297 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 A@&Et; literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/user-table.png b/versioned_docs/version-legacy/200-orm/050-overview/100-introduction/user-table.png new file mode 100644 index 0000000000000000000000000000000000000000..a44df94e251d2806d4bd8dbcc7417026ac1f5e3b GIT binary patch literal 4330 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: stringlast_name: stringemail: stringemail_confirmed: boolbirthDate: date \ No newline at end of file diff --git a/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/01-rest.mdx b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/01-rest.mdx new file mode 100644 index 0000000000..a210fb2972 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/01-rest.mdx @@ -0,0 +1,153 @@ +--- +title: 'REST' +metaTitle: 'Building REST APIs with Prisma ORM' +metaDescription: 'This page gives an overview of the most important things when building REST APIs with Prisma. It shows practical examples and the supported libraries.' +--- + + + +When building REST APIs, Prisma Client can be used inside your _route controllers_ to send databases queries. + +![REST APIs with Prisma Client](../100-introduction/prisma-rest-apis.png) + + + +## Supported libraries + +As Prisma Client is "only" responsible for sending queries to your database, it can be combined with any HTTP server library or web framework of your choice. + +Here's a non-exhaustive list of libraries and frameworks you can use with Prisma ORM: + +- [Express](https://expressjs.com/) +- [koa](https://koajs.com/) +- [hapi](https://hapi.dev/) +- [Fastify](https://fastify.dev/) +- [Sails](https://sailsjs.com/) +- [AdonisJs](https://adonisjs.com/) +- [NestJS](https://nestjs.com/) +- [Next.js](https://nextjs.org/) +- [Foal TS](https://foalts.org/) +- [Polka](https://github.com/lukeed/polka) +- [Micro](https://github.com/zeit/micro) +- [Feathers](https://feathersjs.com/) +- [Remix](https://remix.run/) + +## REST API server example + +Assume you have a Prisma schema that looks similar to this: + +```prisma +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +You can now implement route controller (e.g. using Express) that use the generated [Prisma Client API](/orm/prisma-client) to perform a database operation when an incoming HTTP request arrives. This page only shows few sample code snippets; if you want to run these code snippets, you can use a [REST API example](https://pris.ly/e/ts/rest-express). + +#### `GET` + +```ts +app.get('/feed', async (req, res) => { + const posts = await prisma.post.findMany({ + where: { published: true }, + include: { author: true }, + }) + res.json(posts) +}) +``` + +Note that the `feed` endpoint in this case returns a nested JSON response of `Post` objects that _include_ an `author` object. Here's a sample response: + +```json +[ + { + "id": "21", + "title": "Hello World", + "content": "null", + "published": "true", + "authorId": 42, + "author": { + "id": "42", + "name": "Alice", + "email": "alice@prisma.io" + } + } +] +``` + +#### `POST` + +```ts +app.post(`/post`, async (req, res) => { + const { title, content, authorEmail } = req.body + const result = await prisma.post.create({ + data: { + title, + content, + published: false, + author: { connect: { email: authorEmail } }, + }, + }) + res.json(result) +}) +``` + +#### `PUT` + +```ts +app.put('/publish/:id', async (req, res) => { + const { id } = req.params + const post = await prisma.post.update({ + where: { id: Number(id) }, + data: { published: true }, + }) + res.json(post) +}) +``` + +#### `DELETE` + +```ts +app.delete(`/post/:id`, async (req, res) => { + const { id } = req.params + const post = await prisma.post.delete({ + where: { + id: Number(id), + }, + }) + res.json(post) +}) +``` + +## Ready-to-run example projects + +You can find several ready-to-run examples that show how to implement a REST API with Prisma Client, as well as build full applications, in the [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository. + +| **Example** | **Stack** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------- | +| [`express`](https://pris.ly/e/ts/rest-express) | Backend only | REST API with Express for TypeScript | +| [`fastify`](https://pris.ly/e/ts/rest-fastify) | Backend only | REST API using Fastify and Prisma Client. | +| [`hapi`](https://pris.ly/e/ts/rest-hapi) | Backend only | REST API using hapi and Prisma Client | +| [`nestjs`](https://pris.ly/e/ts/rest-nestjs) | Backend only | Nest.js app (Express) with a REST API | +| [`nextjs-api-routes`](https://pris.ly/e/ts/rest-nextjs-api-routes) | Fullstack | Next.js app (React) with a REST API | \ No newline at end of file diff --git a/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/02-graphql.mdx b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/02-graphql.mdx new file mode 100644 index 0000000000..3baa9cfb35 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/02-graphql.mdx @@ -0,0 +1,75 @@ +--- +title: 'GraphQL' +metaTitle: 'Building GraphQL servers with Prisma ORM' +metaDescription: 'This page gives explains how to build GraphQL servers with Prisma ORM. It shows how Prisma ORM fits into the GraphQL ecosystem and provides practical examples.' +--- + + + +[GraphQL](https://graphql.org/) is a query language for APIs. It is often used as an alternative to RESTful APIs, but can also be used as an additional "gateway" layer on top of existing RESTful services. + +With Prisma ORM, you can build GraphQL servers that connect to a database. Prisma ORM is completely agnostic to the GraphQL tools you use. When building a GraphQL server, you can combine Prisma ORM with tools like Apollo Server, GraphQL Yoga, TypeGraphQL, GraphQL.js, or pretty much any tool or library that you're using in your GraphQL server setup. + + + +## GraphQL servers under the hood + +A GraphQL server consists of two major components: + +- GraphQL schema (type definitions + resolvers) +- HTTP server + +Note that a GraphQL schema can be written code-first or SDL-first. Check out this [article](https://www.prisma.io/blog/the-problems-of-schema-first-graphql-development-x1mn4cb0tyl3) to learn more about these two approaches. If you like the SDL-first approach but still want to make your code type-safe, check out [GraphQL Code Generator](https://the-guild.dev/graphql/codegen) to generate various type definitions based on SDL. + +The GraphQL schema and HTTP server are typically handled by separate libraries. Here is an overview of current GraphQL server tools and their purpose: + +| Library (npm package) | Purpose | Compatible with Prisma ORM | Prisma integration | +| :-------------------- | :-------------------------- | :------------------------- | :----------------------------------------------------------------------------- | +| `graphql` | GraphQL schema (code-first) | Yes | No | +| `graphql-tools` | GraphQL schema (SDL-first) | Yes | No | +| `type-graphql` | GraphQL schema (code-first) | Yes | [`typegraphql-prisma`](https://www.npmjs.com/package/typegraphql-prisma) | +| `nexus` | GraphQL schema (code-first) | Yes | [`nexus-prisma`](https://graphql-nexus.github.io/nexus-prisma/) _Early Preview_ | +| `apollo-server` | HTTP server | Yes | n/a | +| `express-graphql` | HTTP server | Yes | n/a | +| `fastify-gql` | HTTP server | Yes | n/a | +| `graphql-yoga` | HTTP server | Yes | n/a | + +In addition to these standalone and single-purpose libraries, there are several projects building integrated _application frameworks_: + +| Framework | Stack | Built by | Prisma ORM | Description | +| :---------------------------------- | :-------- | :------------------------------------------------ | :------------------------- | :------------------------------------- | +| [Redwood.js](https://redwoodjs.com) | Fullstack | [Tom Preston-Werner](https://github.com/mojombo/) | Built on top of Prisma ORM | _Bringing full-stack to the JAMstack._ | + +> **Note**: If you notice any GraphQL libraries/frameworks missing from the list, please let us know. + +## Prisma ORM & GraphQL examples + +In the following section will find several ready-to-run examples that showcase how to use Prisma ORM with different combinations of the tools mentioned in the table above. + +| Example | HTTP Server | GraphQL schema | Description | +| :------------------------------------------------------------------------------------------------------------------------------- | :---------------------- | :-------------- | :--------------------------------------------------------------------------------------------- | +| [GraphQL API (Pothos)](https://pris.ly/e/ts/graphql) | `graphql-yoga` | `pothos` | GraphQL server based on [`graphql-yoga`](https://the-guild.dev/graphql/yoga-server) | +| [GraphQL API (SDL-first)](https://pris.ly/e/ts/graphql-sdl-first) | `graphql-yoga` | n/a | GraphQL server based on the SDL-first approach | +| [GraphQL API -- NestJs](https://pris.ly/e/ts/graphql-nestjs) | `@nestjs/apollo` | n/a | GraphQL server based on [NestJS](https://nestjs.com/) | +| [GraphQL API -- NestJs (SDL-first)](https://pris.ly/e/ts/graphql-nestjs-sdl-first) | `@nestjs/apollo` | n/a | GraphQL server based on [NestJS](https://nestjs.com/) | +| [GraphQL API (Nexus)](https://pris.ly/e/ts/graphql-nexus) | `@apollo/server` | `nexus` | GraphQL server based on [`@apollo/server`](https://www.apollographql.com/docs/apollo-server) | +| [GraphQL API (TypeGraphQL)](https://pris.ly/e/ts/graphql-typegraphql) | `apollo-server` | `type-graphql` | GraphQL server based on the code-first approach of [TypeGraphQL](https://typegraphql.com/) | +| [GraphQL API (Auth)](https://pris.ly/e/ts/graphql-auth) | `apollo-server` | `nexus` | GraphQL server with email-password authentication & permissions | +| [Fullstack app](https://pris.ly/e/ts/graphql-nextjs) | `graphql-yoga` | `pothos` | Fullstack app with Next.js (React), Apollo Client, GraphQL Yoga and Pothos | +| [GraphQL subscriptions](https://pris.ly/e/ts/graphql-subscriptions) | `apollo-server` | `nexus` | GraphQL server implementing realtime GraphQL subscriptions | +| [GraphQL API -- Hapi](https://pris.ly/e/ts/graphql-hapi) | `apollo-server-hapi` | `nexus` | GraphQL server based on [Hapi](https://hapi.dev/) | +| [GraphQL API -- Hapi (SDL-first)](https://pris.ly/e/ts/graphql-hapi-sdl-first) | `apollo-server-hapi` | `graphql-tools` | GraphQL server based on [Hapi](https://hapi.dev/) | +| [GraphQL API -- Fastify](https://pris.ly/e/ts/graphql-fastify) | `fastify` & `mercurius` | n/a | GraphQL server based on [Fastify](https://fastify.dev/) and [Mercurius](https://mercurius.dev/) | +| [GraphQL API -- Fastify (SDL-first)](https://pris.ly/e/ts/graphql-fastify-sdl-first) | `fastify` | `Nexus` | GraphQL server based on [Fastify](https://fastify.dev/) and [Mercurius](https://mercurius.dev/) | + +## FAQ + +### What is Prisma ORM's role in a GraphQL server? + +No matter which of the above GraphQL tools/libraries you use, Prisma ORM is used inside your GraphQL resolvers to connect to your database. It has the same role that any other ORM or SQL query builder would have inside your resolvers. + +In the resolver of a GraphQL query, Prisma ORM typically reads data from the database to return it in the GraphQL response. In the resolver of a GraphQL mutation, Prisma ORM typically also writes data to the database (e.g. creating new or updating existing records). + +## Other GraphQL Resources + +Prisma curates [GraphQL Weekly](https://www.graphqlweekly.com/), a newsletter highlighting resources and updates from the GraphQL community. Subscribe to keep up-to-date with GraphQL articles, videos, tutorials, libraries, and more. diff --git a/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/03-fullstack.mdx b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/03-fullstack.mdx new file mode 100644 index 0000000000..db5a52efad --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/03-fullstack.mdx @@ -0,0 +1,116 @@ +--- +title: 'Fullstack' +metaTitle: 'Building fullstack applications with Prisma ORM' +metaDescription: 'This page gives explains how to build fullstack applications with Prisma. It shows how Prisma fits in with fullstack frameworks and provides practical examples' +--- + + + +Fullstack frameworks, such as Next.js, Remix or SvelteKit, blur the lines between the server and the client. These frameworks also provide different patterns for fetching and mutating data on the server. + +You can query your database using Prisma Client, using your framework of choice, from the server-side part of your application. + + + +## Supported frameworks + +Here's a non-exhaustive list of frameworks and libraries you can use with Prisma ORM: + +- [Next.js](https://nextjs.org/) +- [Remix](https://remix.run) +- [SvelteKit](https://svelte.dev/) +- [Nuxt](https://nuxt.com/) +- [Redwood](https://redwoodjs.com/) +- [t3 stack — using tRPC](https://create.t3.gg/) +- [Wasp](https://wasp-lang.dev/) + +## Fullstack app example (e.g. Next.js) + +:::tip + +If you want to learn how to build an app with Next.js and Prisma ORM, check out this comprehensive [video tutorial](https://www.youtube.com/watch?v=QXxy8Uv1LnQ&ab_channel=ByteGrad). + +::: + +Assume you have a Prisma schema that looks similar to this: + +```prisma +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +You can now implement the logic for querying your database using [Prisma Client API](/orm/prisma-client) inside `getServerSideProps`, `getStaticProps`, API routes, or using API libraries such as [tRPC](https://trpc.io/) and [GraphQL](https://graphql.org/). + +### `getServerSideProps` + +```ts +// (in /pages/index.tsx) + +// Alternatively, you can use `getStaticProps` +// in place of `getServerSideProps`. +export const getServerSideProps = async () => { + const feed = await prisma.post.findMany({ + where: { + published: true, + }, + }) + return { props: { feed } } +} +``` + +Next.js will pass the props to your React component where you can display the data from your database. + +### API Routes + +```ts +// Fetch all posts (in /pages/api/posts.ts) +const prisma = new PrismaClient() + +export default async function handle(req, res) { + const posts = await prisma.post.findMany({ + where: { + published: true, + }, + }) + res.json(posts) +} +``` + +Note that you can use Prisma ORM inside of Next.js API routes to send queries to your database – with REST, GraphQL, and tRPC. + +You can then fetch data and display it in your frontend. + +## Ready-to-run fullstack example projects + +You can find several ready-to-run examples that show how to fullstack apps with Prisma Client in the [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository. + +| **Example** | **Description** | +| :----------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------- | +| [Next.js (API Routes)](https://pris.ly/e/ts/rest-nextjs-api-routes) | Fullstack Next.js app using `getServerSideProps` & API Routes | +| [Next.js (GraphQL)](https://pris.ly/e/ts/graphql-nextjs) | Fullstack Next.js app using GraphQL Yoga, Pothos, & Apollo Client | +| [Next.js (tRPC)](https://pris.ly/e/ts/trpc-nextjs) | Fullstack Next.js app using tRPC | +| [Remix](https://pris.ly/e/ts/remix) | Fullstack Remix app using actions and loaders | +| [SvelteKit](https://pris.ly/e/ts/sveltekit) | Fullstack Sveltekit app using actions and loaders | +| [Nuxt](https://pris.ly/e/ts/rest-nuxtjs) | Fullstack Nuxt app using API routes | diff --git a/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/04-is-prisma-an-orm.mdx b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/04-is-prisma-an-orm.mdx new file mode 100644 index 0000000000..a1229d44bd --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/04-is-prisma-an-orm.mdx @@ -0,0 +1,447 @@ +--- +title: 'Is Prisma ORM an ORM?' +metaTitle: 'Is Prisma ORM an ORM? | What is an ORM?' +metaDescription: 'Learn about how Prisma ORM implements the Data Mapper ORM pattern and how it achieves the same goal as traditional ORMs without requiring you to map classes to tables as traditional ORMs do.' +--- + + + +To answer the question briefly: _Yes, Prisma ORM is a new kind of ORM that fundamentally differs from traditional ORMs and doesn't suffer from many of the problems commonly associated with these_. + +Traditional ORMs provide an object-oriented way for working with relational databases by mapping tables to _model classes_ in your programming language. This approach leads to many problems that are caused by the [object-relational impedance mismatch](https://en.wikipedia.org/wiki/Object%E2%80%93relational_impedance_mismatch). + +Prisma ORM works fundamentally different compared to that. With Prisma ORM, you define your models in the declarative [Prisma schema](/orm/prisma-schema) which serves as the single source of truth for your database schema and the models in your programming language. In your application code, you can then use Prisma Client to read and write data in your database in a type-safe manner without the overhead of managing complex model instances. This makes the process of querying data a lot more natural as well as more predictable since Prisma Client always returns plain JavaScript objects. + +In this article, you will learn in more detail about ORM patterns and workflows, how Prisma ORM implements the Data Mapper pattern, and the benefits of Prisma ORM's approach. + + + +## What are ORMs? + +If you're already familiar with ORMs, feel free to jump to the [next section](#prisma-orm) on Prisma ORM. + +### ORM Patterns - Active Record and Data Mapper + +ORMs provide a high-level database abstraction. They expose a programmatic interface through objects to create, read, delete, and manipulate data while hiding some of the complexity of the database. + +The idea with ORMs is that you define your models as **classes** that map to tables in a database. The classes and their instances provide you with a programmatic API to read and write data in the database. + +There are two common ORM patterns: [_Active Record_](https://en.wikipedia.org/wiki/Active_record_pattern) and [_Data Mapper_](https://en.wikipedia.org/wiki/Data_mapper_pattern) which differ in how they transfer data between objects and the database. While both patterns require you to define classes as the main building block, the most notable difference between the two is that the Data Mapper pattern decouples in-memory objects in the application code from the database and uses the data mapper layer to transfer data between the two. In practice, this means that with Data Mapper the in-memory objects (representing data in the database) don't even know that there’s a database present. + +#### Active Record + +_Active Record_ ORMs map model classes to database tables where the structure of the two representations is closely related, e.g. each field in the model class will have a matching column in the database table. Instances of the model classes wrap database rows and carry both the data and the access logic to handle persisting changes in the database. Additionally, model classes can carry business logic specific to the data in the model. + +The model class typically has methods that do the following: + +- Construct an instance of the model from an SQL query. +- Construct a new instance for later insertion into the table. +- Wrap commonly used SQL queries and return Active Record objects. +- Update the database and insert into it the data in the Active Record. +- Get and set the fields. +- Implement business logic. + +#### Data Mapper + +_Data Mapper_ ORMs, in contrast to Active Record, decouple the application's in-memory representation of data from the database's representation. The decoupling is achieved by requiring you to separate the mapping responsibility into two types of classes: + +- **Entity classes**: The application's in-memory representation of entities which have no knowledge of the database +- **Mapper classes**: These have two responsibilities: + - Transforming the data between the two representations. + - Generating the SQL necessary to fetch data from the database and persist changes in the database. + +Data Mapper ORMs allow for greater flexibility between the problem domain as implemented in code and the database. This is because the data mapper pattern allows you to hide the ways in which your database is implemented which isn’t an ideal way to think about your domain behind the whole data-mapping layer. + +One of the reasons that traditional data mapper ORMs do this is due to the structure of organizations where the two responsibilities would be handled by separate teams, e.g., [DBAs](https://en.wikipedia.org/wiki/Database_administrator) and backend developers. + +In reality, not all Data Mapper ORMs adhere to this pattern strictly. For example, [TypeORM](https://github.com/typeorm/typeorm/blob/master/docs/active-record-data-mapper.md#what-is-the-data-mapper-pattern), a popular ORM in the TypeScript ecosystem which supports both Active Record and Data Mapper, takes the following approach to Data Mapper: + +- Entity classes use decorators (`@Column`) to map class properties to table columns and are aware of the database. +- Instead of mapper classes, _repository_ classes are used for querying the database and may contain custom queries. Repositories use the decorators to determine the mapping between entity properties and database columns. + +Given the following `User` table in the database: + +![user-table](../100-introduction/user-table.png) + +This is what the corresponding entity class would look like: + +```ts +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm' + +@Entity() +export class User { + @PrimaryGeneratedColumn() + id: number + + @Column({ name: 'first_name' }) + firstName: string + + @Column({ name: 'last_name' }) + lastName: string + + @Column({ unique: true }) + email: string +} +``` + +### Schema migration workflows + +A central part of developing applications that make use of a database is changing the database schema to accommodate new features and to better fit the problem you're solving. In this section, we'll discuss what [schema migrations](https://www.prisma.io/dataguide/types/relational/what-are-database-migrations) are and how they affect the workflow. + +Because the ORM sits between the developer and the database, most ORMs provide a **migration tool** to assist with the creation and modification of the database schema. + +A migration is a set of steps to take the database schema from one state to another. The first migration usually creates tables and indices. Subsequent migrations may add or remove columns, introduce new indices, or create new tables. Depending on the migration tool, the migration may be in the form of SQL statements or programmatic code which will get converted to SQL statements (as with [ActiveRecord](https://guides.rubyonrails.org/active_record_migrations.html) and [SQLAlchemy](https://alembic.sqlalchemy.org/en/latest/tutorial.html#create-a-migration-script)). + +Because databases usually contain data, migrations assist you with breaking down schema changes into smaller units which helps avoid inadvertent data loss. + +Assuming you were starting a project from scratch, this is what a full workflow would look like: you create a migration that will create the `User` table in the database schema and define the `User` entity class as in the example above. + +Then, as the project progresses and you decide you want to add a new `salutation` column to the `User` table, you would create another migration which would alter the table and add the `salutation` column. + +Let's take a look at how that would look like with a TypeORM migration: + +```ts +import { MigrationInterface, QueryRunner } from 'typeorm' + +export class UserRefactoring1604448000 implements MigrationInterface { + async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "User" ADD COLUMN "salutation" TEXT`) + } + + async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "User" DROP COLUMN "salutation"`) + } +} +``` + +Once a migration is carried out and the database schema has been altered, the entity and mapper classes must also be updated to account for the new `salutation` column. + +With TypeORM that means adding a `salutation` property to the `User` entity class: + +```ts highlight=17,18;normal +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm' + +@Entity() +export class User { + @PrimaryGeneratedColumn() + id: number + + @Column({ name: 'first_name' }) + firstName: string + + @Column({ name: 'last_name' }) + lastName: string + + @Column({ unique: true }) + email: string + + //highlight-start + @Column() + salutation: string + //highlight-end +} +``` + +Synchronizing such changes can be a challenge with ORMs because the changes are applied manually and are not easily verifiable programmatically. Renaming an existing column can be even more cumbersome and involve searching and replacing references to the column. + +> **Note:** Django's [makemigrations](https://docs.djangoproject.com/en/3.1/ref/django-admin/#django-admin-makemigrations) CLI generates migrations by inspecting changes in models which, similar to Prisma ORM, does away with the synchronization problem. + +In summary, evolving the schema is a key part of building applications. With ORMs, the workflow for updating the schema involves using a migration tool to create a migration followed by updating the corresponding entity and mapper classes (depending on the implementation). As you'll see, Prisma ORM takes a different approach to this. + +Now that you've seen what migrations are and how they fit into the development workflows, you will learn more about the benefits and drawbacks of ORMs. + +### Benefits of ORMs + +There are different reasons why developers choose to use ORMs: + +- ORMs facilitate implementing the domain model. The domain model is an object model that incorporates the behavior and data of your business logic. In other words, it allows you to focus on real business concepts rather than the database structure or SQL semantics. +- ORMs help reduce the amount of code. They save you from writing repetitive SQL statements for common CRUD (Create Read Update Delete) operations and escaping user input to prevent vulnerabilities such as SQL injections. +- ORMs require you to write little to no SQL (depending on your complexity you may still need to write the odd raw query). This is beneficial for developers who are not familiar with SQL but still want to work with a database. +- Many ORMs abstract database-specific details. In theory, this means that an ORM can make changing from one database to another easier. It should be noted that in practice applications rarely change the database they use. + +As with all abstractions that aim to improve productivity, there are also drawbacks to using ORMs. + +### Drawbacks of ORMs + +The drawbacks of ORMs are not always apparent when you start using them. This section covers some of the commonly accepted ones: + +- With ORMs, you form an object graph representation of database tables which may lead to the [object-relational impedance mismatch](https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch). This happens when the problem you are solving forms a complex object graph which doesn't trivially map to a relational database. Synchronizing between two different representations of data, one in the relational database, and the other in-memory (with objects) is quite difficult. This is because objects are more flexible and varied in the way they can relate to each other compared to relational database records. +- While ORMs handle the complexity associated with the problem, the synchronization problem doesn't go away. Any changes to the database schema or the data model require the changes to be mapped back to the other side. This burden is often on the developer. In the context of a team working on a project, database schema changes require coordination. +- ORMs tend to have a large API surface due to the complexity they encapsulate. The flip side of not having to write SQL is that you spend a lot of time learning how to use the ORM. This applies to most abstractions, however without understanding how the database works, improving slow queries can be difficult. +- Some _complex queries_ aren't supported by ORMs due to the flexibility that SQL offers. This problem is alleviated by raw SQL querying functionality in which you pass the ORM a SQL statement string and the query is run for you. + +Now that the costs and benefits of ORMs have been covered, you can better understand what Prisma ORM is and how it fits in. + +## Prisma ORM + +Prisma ORM is a **next-generation ORM** that makes working with databases easy for application developers and features the following tools: + +- [**Prisma Client**](/orm/prisma-client): Auto-generated and type-safe database client for use in your application. +- [**Prisma Migrate**](/orm/prisma-migrate): A declarative data modeling and migration tool. +- [**Prisma Studio**](/orm/tools/prisma-studio): A modern GUI for browsing and managing data in your database. + +> **Note:** Since Prisma Client is the most prominent tool, we often refer to it as simply Prisma. + +These three tools use the [Prisma schema](/orm/prisma-schema) as a single source of truth for the database schema, your application's object schema, and the mapping between the two. It's defined by you and is your main way of configuring Prisma ORM. + +Prisma ORM makes you productive and confident in the software you're building with features such as _type safety_, rich auto-completion, and a natural API for fetching relations. + +In the next section, you will learn about how Prisma ORM implements the Data Mapper ORM pattern. + +### How Prisma ORM implements the Data Mapper pattern + +As mentioned earlier in the article, the Data Mapper pattern aligns well with organizations where the database and application are owned by different teams. + +With the rise of modern cloud environments with managed database services and DevOps practices, more teams embrace a cross-functional approach, whereby teams own both the full development cycle including the database and operational concerns. + +Prisma ORM enables the evolution of the DB schema and object schema in tandem, thereby reducing the need for deviation in the first place, while still allowing you to keep your application and database somewhat decoupled using `@map` attributes. While this may seem like a limitation, it prevents the domain model's evolution (through the object schema) from getting imposed on the database as an afterthought. + +To understand how Prisma ORM's implementation of the Data Mapper pattern differs conceptually to traditional Data Mapper ORMs, here's a brief comparison of their concepts and building blocks: + +| Concept | Description | Building block in traditional ORMs | Building block in Prisma ORM | Source of truth in Prisma ORM | +| --------------- | -------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------ | ------------------------------------ | +| Object schema | The in-memory data structures in your applications | Model classes | Generated TypeScript types | Models in the Prisma schema | +| Data Mapper | The code which transforms between the object schema and the database | Mapper classes | Generated functions in Prisma Client | @map attributes in the Prisma schema | +| Database schema | The structure of data in the database, e.g., tables and columns | SQL written by hand or with a programmatic API | SQL generated by Prisma Migrate | Prisma schema | + +Prisma ORM aligns with the Data Mapper pattern with the following added benefits: + +- Reducing the boilerplate of defining classes and mapping logic by generating a Prisma Client based on the Prisma schema. +- Eliminating the synchronization challenges between application objects and the database schema. +- Database migrations are a first-class citizen as they're derived from the Prisma schema. + +Now that we've talked about the concepts behind Prisma ORM's approach to Data Mapper, we can go through how the Prisma schema works in practice. + +### Prisma schema + +At the heart of Prisma's implementation of the Data Mapper pattern is the _Prisma schema_ – a single source of truth for the following responsibilities: + +- Configuring how Prisma connects to your database. +- Generating Prisma Client – the type-safe ORM for use in your application code. +- Creating and evolving the database schema with Prisma Migrate. +- Defining the mapping between application objects and database columns. + +Models in Prisma ORM mean something slightly different to Active Record ORMs. With Prisma ORM, models are defined in the Prisma schema as abstract entities which describe tables, relations, and the mappings between columns to properties in Prisma Client. + +As an example, here's a Prisma schema for a blog: + +```prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? @map("post_content") + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +Here's a break down of the example above: + +- The `datasource` block defines the connection to the database. +- The `generator` block tells Prisma ORM to generate Prisma Client for TypeScript and Node.js. +- The `Post` and `User` models map to database tables. +- The two models have a _1-n_ relation where each `User` can have many related `Post`s. +- Each field in the models has a type, e.g. the `id` has the type `Int`. +- Fields may contain field attributes to define: + - Primary keys with the `@id` attribute. + - Unique keys with the `@unique` attribute. + - Default values with the `@default` attribute. + - Mapping between table columns and Prisma Client fields with the `@map` attribute, e.g., the `content` field (which will be accessible in Prisma Client) maps to the `post_content` database column. + +The `User` / `Post` relation can be visualized with the following diagram: + +![1-n relation between User and Post](../100-introduction/user-post-relation-1-n.png) + +At a Prisma ORM level, the `User` / `Post` relation is made up of: + +- The scalar `authorId` field, which is referenced by the `@relation` attribute. This field exists in the database table – it is the foreign key that connects Post and User. +- The two relation fields: `author` and `posts` **do not exist** in the database table. Relation fields define connections between models at the Prisma ORM level and exist only in the Prisma schema and generated Prisma Client, where they are used to access the relations. + +The declarative nature of Prisma schema is concise and allows defining the database schema and corresponding representation in Prisma Client. + +In the next section, you will learn about Prisma ORM's supported workflows. + +### Prisma ORM workflow + +The workflow with Prisma ORM is slightly different to traditional ORMs. You can use Prisma ORM when building new applications from scratch or adopt it incrementally: + +- _New application_ (greenfield): Projects that have no database schema yet can use Prisma Migrate to create the database schema. +- _Existing application_ (brownfield): Projects that already have a database schema can be [introspected](/orm/prisma-schema/introspection) by Prisma ORM to generate the Prisma schema and Prisma Client. This use-case works with any existing migration tool and is useful for incremental adoption. It's possible to switch to Prisma Migrate as the migration tool. However, this is optional. + +With both workflows, the Prisma schema is the main configuration file. + +#### Workflow for incremental adoption in projects with an existing database + +Brownfield projects typically already have some database abstraction and schema. Prisma ORM can integrate with such projects by introspecting the existing database to obtain a Prisma schema that reflects the existing database schema and to generate Prisma Client. This workflow is compatible with any migration tool and ORM which you may already be using. If you prefer to incrementally evaluate and adopt, this approach can be used as part of a [parallel adoption strategy](https://en.wikipedia.org/wiki/Parallel_adoption). + +A non-exhaustive list of setups compatible with this workflow: + +- Projects using plain SQL files with `CREATE TABLE` and `ALTER TABLE` to create and alter the database schema. +- Projects using a third party migration library like [db-migrate](https://github.com/db-migrate/node-db-migrate) or [Umzug](https://github.com/sequelize/umzug). +- Projects already using an ORM. In this case, database access through the ORM remains unchanged while the generated Prisma Client can be incrementally adopted. + +In practice, these are the steps necessary to introspect an existing DB and generate Prisma Client: + +1. Create a `schema.prisma` defining the `datasource` (in this case, your existing DB) and `generator`: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://janedoe:janedoe@localhost:5432/hello-prisma" +} + +generator client { + provider = "prisma-client-js" +} +``` + +2. Run `prisma db pull` to populate the Prisma schema with models derived from your database schema. +3. (Optional) Customize [field and model mappings](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections) between Prisma Client and the database. +4. Run `prisma generate`. + +Prisma ORM will generate Prisma Client inside the `node_modules` folder, from which it can be imported in your application. For more extensive usage documentation, see the [Prisma Client API](/orm/prisma-client) docs. + +To summarize, Prisma Client can be integrated into projects with an existing database and tooling as part of a parallel adoption strategy. New projects will use a different workflow detailed next. + +#### Workflow for new projects + +Prisma ORM is different from ORMs in terms of the workflows it supports. A closer look at the steps necessary to create and change a new database schema is useful for understanding Prisma Migrate. + +Prisma Migrate is a CLI for declarative data modeling & migrations. Unlike most migration tools that come as part of an ORM, you only need to describe the current schema, instead of the operations to move from one state to another. Prisma Migrate infers the operations, generates the SQL and carries out the migration for you. + +This example demonstrates using Prisma ORM in a new project with a new database schema similar to the blog example above: + +1. Create the Prisma schema: + +```prisma +// schema.prisma +datasource db { + provider = "postgresql" + url = "postgresql://janedoe:janedoe@localhost:5432/hello-prisma" +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? @map("post_content") + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +2. Run `prisma migrate` to generate the SQL for the migration, apply it to the database, and generate Prisma Client. + +For any further changes to the database schema: + +1. Apply changes to the Prisma schema, e.g., add a `registrationDate` field to the `User` model +1. Run `prisma migrate` again. + +The last step demonstrates how declarative migrations work by adding a field to the Prisma schema and using Prisma Migrate to transform the database schema to the desired state. After the migration is run, Prisma Client is automatically regenerated so that it reflects the updated schema. + +If you don't want to use Prisma Migrate but still want to use the type-safe generated Prisma Client in a new project, see the next section. + +##### Alternative for new projects without Prisma Migrate + +It is possible to use Prisma Client in a new project with a third-party migration tool instead of Prisma Migrate. For example, a new project could choose to use the Node.js migration framework [db-migrate](https://github.com/db-migrate/node-db-migrate) to create the database schema and migrations and Prisma Client for querying. In essence, this is covered by the [workflow for existing databases](#workflow-for-incremental-adoption-in-projects-with-an-existing-database). + +## Accessing data with Prisma Client + +So far, the article covered the concepts behind Prisma ORM, its implementation of the Data Mapper pattern, and the workflows it supports. In this last section, you will see how to access data in your application using Prisma Client. + +Accessing the database with Prisma Client happens through the query methods it exposes. All queries return plain old JavaScript objects. Given the blog schema from above, fetching a user looks as follows: + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +const user = await prisma.user.findUnique({ + where: { + email: 'alice@prisma.io', + }, +}) +``` + +In this query, the `findUnique()` method is used to fetch a single row from the `User` table. By default, Prisma ORM will return all the scalar fields in the `User` table. + +> **Note:** The example uses TypeScript to make full use of the type safety features offered by Prisma Client. However, Prisma ORM also works with [JavaScript in Node.js](https://dev.to/prisma/productive-development-with-prisma-s-zero-cost-type-safety-4od2). + +Prisma Client maps queries and results to [structural types](https://en.wikipedia.org/wiki/Structural_type_system) by generating code from the Prisma schema. This means that `user` has an associated type in the generated Prisma Client: + +``` +export type User = { + id: number + email: string + name: string | null +} +``` + +This ensures that accessing a non-existent field will raise a type error. More broadly, it means that the result's type for every query is known ahead of running the query, which helps catch errors. For example, the following code snippet will raise a type error: + +```ts +console.log(user.lastName) // Property 'lastName' does not exist on type 'User'. +``` + +### Fetching relations + +Fetch relations with Prisma Client is done with the `include` option. For example, to fetch a user and their posts would be done as follows: + +```ts +const user = await prisma.user.findUnique({ + where: { + email: 'alice@prisma.io', + }, + include: { + posts: true, + }, +}) +``` + +With this query, `user`'s type will also include `Post`s which can be accessed with the `posts` array field: + +```ts +console.log(user.posts[0].title) +``` + +The example only scratches the surface of Prisma Client's API for [CRUD operations](/orm/prisma-client/queries/crud) which you can learn more about in the docs. The main idea is that all queries and results are backed by types and you have full control over how relations are fetched. + +## Conclusion + +In summary, Prisma ORM is a new kind of Data Mapper ORM that differs from traditional ORMs and doesn't suffer from the problems commonly associated with them. + +Unlike traditional ORMs, with Prisma ORM, you define the Prisma schema – a declarative single source of truth for the database schema and application models. All queries in Prisma Client return plain JavaScript objects which makes the process of interacting with the database a lot more natural as well as more predictable. + +Prisma ORM supports two main workflows for starting new projects and adopting in an existing project. For both workflows, your main avenue for configuration is via the Prisma schema. + +Like all abstractions, both Prisma ORM and other ORMs hide away some of the underlying details of the database with different assumptions. + +These differences and your use case all affect the workflow and cost of adoption. Hopefully understanding how they differ can help you make an informed decision. diff --git a/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/index.mdx b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/index.mdx new file mode 100644 index 0000000000..8e030cae0b --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/300-prisma-in-your-stack/index.mdx @@ -0,0 +1,16 @@ +--- +title: 'Prisma ORM in your stack' +metaTitle: 'How Prisma ORM fits into your stack' +metaDescription: 'How Prisma ORM fits into your stack' +hide_table_of_contents: true +--- + + + +Prisma ORM provides a fully type-safe API and simplified database access. You can use Prisma ORM tools to build a GraphQL or REST API, or as part of a fullstack application - the extent to which you incorporate Prisma ORM is up to you. + + + +## In this section + + diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/200-database-drivers.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/200-database-drivers.mdx new file mode 100644 index 0000000000..4e03ada414 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/200-database-drivers.mdx @@ -0,0 +1,180 @@ +--- +title: 'Database drivers' +metaTitle: 'Database drivers' +metaDescription: 'Learn how Prisma connects to your database using the built-in drivers and how you can use Prisma along with other JavaScript database drivers using driver adapters (Preview)' +tocDepth: 4 +toc_max_heading_level: 4 +--- + +## Default built-in drivers + +One of Prisma Client's components is the [Query Engine](/orm/more/under-the-hood/engines). The Query Engine is responsible for transforming Prisma Client queries into SQL statements. It connects to your database via TCP using built-in drivers that don't require additional setup. + +![Query flow from the user application to the database with Prisma Client](./images/drivers/qe-query-execution-flow.png) + +## Driver adapters + +Prisma Client can connect and run queries against your database using JavaScript database drivers using **driver adapters**. Adapters act as _translators_ between Prisma Client and the JavaScript database driver. + +Prisma Client will use the Query Engine to transform the Prisma Client query to SQL and run the generated SQL queries via the JavaScript database driver. + +![Query flow from the user application to the database using Prisma Client and driver adapters](./images/drivers/qe-query-engine-adapter.png) + +There are two different types of driver adapters: + +- [Database driver adapters](#database-driver-adapters) +- [Serverless driver adapters](#serverless-driver-adapters) + +> **Note**: Driver adapters enable [edge deployments](/orm/prisma-client/deployment/edge/overview) of applications that use Prisma ORM. + +### Database driver adapters + +You can connect to your database using a Node.js-based driver from Prisma Client using a database driver adapter. Prisma maintains the following database driver adapters: + +- [PostgreSQL](/orm/overview/databases/postgresql#using-the-node-postgres-driver) +- [Turso](/orm/overview/databases/turso#how-to-connect-and-query-a-turso-database) + +### Serverless driver adapters + +Database providers, such as Neon and PlanetScale, allow you to connect to your database using other protocols besides TCP, such as HTTP and WebSockets. These database drivers are optimized for connecting to your database in serverless and edge environments. + +Prisma ORM maintains the following serverless driver adapters: + +- [Neon](/orm/overview/databases/neon#how-to-use-neons-serverless-driver-with-prisma-orm-preview) (and Vercel Postgres) +- [PlanetScale](/orm/overview/databases/planetscale#how-to-use-the-planetscale-serverless-driver-with-prisma-orm-preview) +- [Cloudflare D1](/orm/overview/databases/cloudflare-d1) + +### Community-maintained database driver adapters + +You can also build your own driver adapter for the database you're using. The following is a list of community-maintained driver adapters: + +- [TiDB Cloud Serverless Driver](https://github.com/tidbcloud/prisma-adapter) +- [PGlite - Postgres in WASM](https://github.com/lucasthevenet/pglite-utils/tree/main/packages/prisma-adapter) + +## How to use driver adapters + +To use this feature: + +1. Update the `previewFeatures` block in your schema to include the `driverAdapters` Preview feature: + + ```prisma + generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] + } + ``` + +2. Generate Prisma Client: + + ```bash + npx prisma generate + ``` + +3. Refer to the following pages to learn more about how to use the specific driver adapters with the specific database providers: + + - [PostgreSQL](/orm/overview/databases/postgresql#using-the-node-postgres-driver) + - [Neon](/orm/overview/databases/neon#how-to-use-neons-serverless-driver-with-prisma-orm-preview) + - [PlanetScale](/orm/overview/databases/planetscale#how-to-use-the-planetscale-serverless-driver-with-prisma-orm-preview) + - [Turso](/orm/overview/databases/turso#how-to-connect-and-query-a-turso-database) + - [Cloudflare D1](/orm/overview/databases/cloudflare-d1) + +## Notes about using driver adapters + +### Driver adapters don't read the connection string from the Prisma schema + +When using Prisma ORM's built-in drivers, the connection string is read from the `url` field of the `datasource` block in your Prisma schema. + +On the other hand, when using a driver adapter, the connection string needs to be provided in your _application code_ when the driver adapter is set up initially. Here is how this is done for the `pg` driver and the `@prisma/adapter-pg` adapter: + +```ts highlight=5,normal +import { PrismaClient } from '@prisma/client' +import { PrismaPg } from '@prisma/adapter-pg' +import { Pool } from 'pg' + +const pool = new Pool({ connectionString: env.DATABASE_URL }) +const adapter = new PrismaPg(pool) +const prisma = new PrismaClient({ adapter }) +``` + +See the docs for the driver adapter you're using for concrete setup instructions. + +### Driver adapters and custom output paths + +Since Prisma 5.9.0, when using the driver adapters Preview feature along with a [custom output path for Prisma Client](/orm/prisma-client/setup-and-configuration/generating-prisma-client#using-a-custom-output-path), you cannot reference Prisma Client using a relative path. + +Let's assume you had `output` in your Prisma schema set to `../src/generated/client`: + +```prisma +generator client { + provider = "prisma-client-js" + output = "../src/generated/client" +} +``` + +What you should **not** do is reference that path relatively: + +```ts no-copy +// what not to do! +import { PrismaClient } from './src/generated/client' + +const client = new PrismaClient() +``` + +Instead, you will need to use a linked dependency. + + + + + +```terminal +npm add db@./src/generated/client +``` + + + + + +```terminal +pnpm add db@link:./src/generated/client +``` + + + + + +```terminal +yarn add db@link:./src/generated/client +``` + + + + + +Now, you should be able to reference your generated client using `db`! + +```ts +import { PrismaClient } from 'db' + +const client = new PrismaClient() +``` + +### Driver adapters and specific frameworks + +#### Nuxt + +Using a driver adapter with [Nuxt](https://nuxt.com/) to deploy to an edge function environment does not work out of the box, but adding the `nitro.experimental.wasm` configuration option fixes that: + +```ts +export default defineNuxtConfig({ + // ... + nitro: { + // ... + experimental: { + wasm: true, + }, + }, + // ... +}) +``` + +See [this example project](https://github.com/prisma/ecosystem-tests/tree/dev/driver-adapters-wasm/d1-cfpages-nuxt) for a full example that can be deployed to Cloudflare Pages. diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/250-prisma-postgres.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/250-prisma-postgres.mdx new file mode 100644 index 0000000000..f38d412401 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/250-prisma-postgres.mdx @@ -0,0 +1,113 @@ +--- +title: 'Prisma Postgres®' +metaTitle: 'Prisma Postgres®' +metaDescription: 'This page gives an overview Prisma Postgres®, its main workflows, how to get started, technical details, architecture, limitations, and more.' +sidebar_class_name: early-access-badge +earlyaccess: true +tocDepth: 3 +--- + +## Overview + +[Prisma Postgres](https://www.prisma.io/postgres?utm_source=docs) is a managed PostgreSQL database service that easily lets you create a new database, interact with it through Prisma ORM, and build applications that start small and cheap but can scale to millions of users. + +It supports the following workflows: + +- Schema migrations and queries (via [Prisma ORM](https://www.prisma.io/orm)) +- Connection pooling and caching (via [Prisma Accelerate](https://www.prisma.io/accelerate)) +- Real-time database change events (via [Prisma Pulse](https://www.prisma.io/pulse)) + +:::warning + +Prisma Postgres is currently in [Early Access](/platform/maturity-levels#early-access) and not yet suitable for production use. It doesn't perform any automated backups and thus there's a risk of total data loss. + +::: + +## Getting started with Prisma Postgres + +The easiest way to get started with Prisma Postgres is the [Quickstart](/getting-started/quickstart-prismaPostgres). + +## Technical details + +Here's an overview of the technical details of your Prisma Postgres instances: + +- **PostgreSQL version**: 16 +- **Storage**: Max 1GB + +## Architecture + +Prisma Postgres uses a unique architecture to deliver unmatched efficiency, safety and ease of use. It is deployed on bare metal servers using unikernels (think: "hyper-specialized operating systems"). + +Learn more about the architecture in our [announcement article](https://pris.ly/ppg-early-access?utm_source=docs). + +## Bundling with Prisma Accelerate and Pulse + +During the Early Access period, Prisma Postgres comes bundled with [Prisma Accelerate](/accelerate) and [Prisma Pulse](/pulse). + +### Using the Client extension for Prisma Accelerate (required) + +Because all traffic to Prisma Postgres is routed through Accelerate's connection pool, your project must have the [`@prisma/extension-accelerate`](https://www.npmjs.com/package/@prisma/extension-accelerate) npm package installed. The extension then needs to be applied to the `PrismaClient` instance you use to interact with your database: + +```ts +import { PrismaClient } from '@prisma/client' +import { withAccelerate } from '@prisma/extension-accelerate' + +const prisma = new PrismaClient() + .$extends(withAccelerate()) +``` + +### Using the Client extension for Prisma Pulse (optional) + +Pulse is able to deliver real-time events from your Prisma Postgres database to your application via Prisma Client. If you want to make use of this functionality, you'll need to install the [`@prisma/extension-pulse`](https://www.npmjs.com/package/@prisma/extension-pulse) npm library in your project and apply the extension to your `PrismaClient` instance: + +```ts +import { PrismaClient } from '@prisma/client' +import { withAccelerate } from '@prisma/extension-accelerate' +import { withPulse } from '@prisma/extension-pulse' + +const prisma = new PrismaClient() + .$extends(withAccelerate()) + .$extends(withPulse()) +``` + +## Viewing and editing data in Prisma Studio + +With Prisma Postgres, a hosted version of [Prisma Studio](/orm/tools/prisma-studio) is available for you in of your project. Select the **Studio** tab in the left-hand navigation to view and edit your data: + +![View of Prisma Studio open in the console.](/img/ppg-studio.png) + + +## Pricing + +Prisma Postgres is free during [Early Access](/platform/maturity-levels#early-access). More details on our [pricing page](https://www.prisma.io/pricing). + +## Temporary limitations + +Here's a list of limitations that Prisma Postgres currently has. All of these are temporary and will be lifted in the future. + +### No automated backups (risk of total data loss) + +Prisma Postgres doesn't perform automated backups yet. Hence, there's a risk of total data loss. + +### No direct TCP connection + +You can only interact with Prisma Postgres through Prisma Accelerate's connection pool using HTTP. This means: + +- You have to use Prisma ORM with the Accelerate Client extension to interact with Prisma Postgres from your application. Other ORMs and DB libraries like TypeORM, Sequelize or knex.js are not yet supported. +- You have to use Prisma Studio if you want to visually explore and edit your data. Other database GUIs like Postico or TablePlus are not yet supported. + +### Same resource allocation regardless of pricing plan + +It's not yet possible to configure the size and resource allocation of your Prisma Postgres instance. All instances will have the same [technical details](#technical-details), regardless of the pricing plan you chose. + +### Limited region support + +Prisma Postgres will be gradually rolled out in new regions. If it is not yet available in your preferred region, you can simply subscribe to get notified when it becomes available by subscribing to notifications in the **Region** dropdown when setting up your Prisma Postgres instance in the Platform Console. We'll send you an email when new regions become available, so you can easily stay up to date. + +### Fixed connection limit + +Prisma Postgres currently has a fixed connection limit of 10 that cannot be adjusted. This is a temporary limitation during Early Access. Once Prisma Postgres reaches General Availability (GA), it will support configurable connection limits, enabling you to scale connections according to your needs. + +--- + +> **Note**: Postgres, PostgreSQL and the Slonik Logo are trademarks or registered trademarks of the PostgreSQL Community Association of Canada, and used with their permission diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/300-postgresql.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/300-postgresql.mdx new file mode 100644 index 0000000000..daa20db190 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/300-postgresql.mdx @@ -0,0 +1,310 @@ +--- +title: 'PostgreSQL' +metaTitle: 'PostgreSQL database connector' +metaDescription: 'This page explains how Prisma can connect to a PostgreSQL database using the PostgreSQL database connector.' +--- + +The PostgreSQL data source connector connects Prisma ORM to a [PostgreSQL](https://www.postgresql.org/) database server. + +By default, the PostgreSQL connector contains a database driver responsible for connecting to your database. You can use a [driver adapter](/orm/overview/databases/database-drivers#driver-adapters) (Preview) to connect to your database using a JavaScript database driver from Prisma Client. + +## Example + +To connect to a PostgreSQL database server, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema](/orm/prisma-schema): + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `postgresql` data source connector. +- `url`: Specifies the [connection URL](#connection-url) for the PostgreSQL database server. In this case, an [environment variable is used](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) to provide the connection URL. + +## Using the `node-postgres` driver + +As of [`v5.4.0`](https://github.com/prisma/prisma/releases/tag/5.4.0), you can use Prisma ORM with database drivers from the JavaScript ecosystem (instead of using Prisma ORM's built-in drivers). You can do this by using a [driver adapter](/orm/overview/databases/database-drivers). + +For PostgreSQL, [`node-postgres`](https://node-postgres.com) (`pg`) is one of the most popular drivers in the JavaScript ecosystem. It can be used with any PostgreSQL database that's accessed via TCP. + +This section explains how you can use it with Prisma ORM and the `@prisma/adapter-pg` driver adapter. + +### 1. Enable the `driverAdapters` Preview feature flag + +Since driver adapters are currently in [Preview](/orm/more/releases#preview), you need to enable its feature flag on the `datasource` block in your Prisma schema: + +```prisma +// schema.prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Once you have added the feature flag to your schema, re-generate Prisma Client: + +```terminal copy +npx prisma generate +``` + +### 2. Install the dependencies + +Next, install the `pg` package and Prisma ORM's driver adapter: + +```terminal copy +npm install pg +npm install @prisma/adapter-pg +``` + +### 3. Instantiate Prisma Client using the driver adapter + +Finally, when you instantiate Prisma Client, you need to pass an instance of Prisma ORM's driver adapter to the `PrismaClient` constructor: + +```ts copy +import { Pool } from 'pg' +import { PrismaPg } from '@prisma/adapter-pg' +import { PrismaClient } from '@prisma/client' + +const connectionString = `${process.env.DATABASE_URL}` + +const pool = new Pool({ connectionString }) +const adapter = new PrismaPg(pool) +const prisma = new PrismaClient({ adapter }) +``` + +Notice that this code requires the `DATABASE_URL` environment variable to be set to your PostgreSQL connection string. You can learn more about the connection string below. + +### Notes + +#### Specifying a PostgreSQL schema + +You can specify a [PostgreSQL schema](https://www.postgresql.org/docs/current/ddl-schemas.html) by passing in the `schema` option when instantiating `PrismaPg`: + +```ts +const adapter = new PrismaPg(pool, { + schema: 'myPostgresSchema' +}) +``` + +## Connection details + +### Connection URL + +Prisma ORM follows the connection URL format specified by [PostgreSQL's official guidelines](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING), but does not support all arguments and includes additional arguments such as `schema`. Here's an overview of the components needed for a PostgreSQL connection URL: + +![Structure of the PostgreSQL connection URL](./postgresql-connection-string.png) + +#### Base URL and path + +Here is an example of the structure of the _base URL_ and the _path_ using placeholder values in uppercase letters: + +``` +postgresql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +The following components make up the _base URL_ of your database, they are always required: + +| Name | Placeholder | Description | +| :------- | :---------- | :-------------------------------------------------------------------------------------------------------------- | +| Host | `HOST` | IP address/domain of your database server, e.g. `localhost` | +| Port | `PORT` | Port on which your database server is running, e.g. `5432` | +| User | `USER` | Name of your database user, e.g. `janedoe` | +| Password | `PASSWORD` | Password for your database user | +| Database | `DATABASE` | Name of the [database](https://www.postgresql.org/docs/12/manage-ag-overview.html) you want to use, e.g. `mydb` | + + + +You must [percentage-encode special characters](/orm/reference/connection-urls#special-characters). + + + +#### Arguments + +A connection URL can also take arguments. Here is the same example from above with placeholder values in uppercase letters for three _arguments_: + +``` +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?KEY1=VALUE&KEY2=VALUE&KEY3=VALUE +``` + +The following arguments can be used: + +| Argument name | Required | Default | Description | +| :--------------------- | :------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `schema` | **Yes** | `public` | Name of the [schema](https://www.postgresql.org/docs/12/ddl-schemas.html) you want to use, e.g. `myschema` | +| `connection_limit` | No | `num_cpus * 2 + 1` | Maximum size of the [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool) | +| `connect_timeout` | No | `5` | Maximum number of seconds to wait for a new connection to be opened, `0` means no timeout | +| `pool_timeout` | No | `10` | Maximum number of seconds to wait for a new connection from the pool, `0` means no timeout | +| `sslmode` | No | `prefer` | Configures whether to use TLS. Possible values: `prefer`, `disable`, `require` | +| `sslcert` | No | | Path of the server certificate. Certificate paths are [resolved relative to the `./prisma folder`](/orm/prisma-schema/overview/data-sources#securing-database-connections) | +| `sslrootcert` | No | | Path of the root certificate. Certificate paths are [resolved relative to the `./prisma folder`](/orm/prisma-schema/overview/data-sources#securing-database-connections) | +| `sslidentity` | No | | Path to the PKCS12 certificate | +| `sslpassword` | No | | Password that was used to secure the PKCS12 file | +| `sslaccept` | No | `accept_invalid_certs` | Configures whether to check for missing values in the certificate. Possible values: `accept_invalid_certs`, `strict` | +| `host` | No | | Points to a directory that contains a socket to be used for the connection | +| `socket_timeout` | No | | Maximum number of seconds to wait until a single query terminates | +| `pgbouncer` | No | `false` | Configure the Engine to [enable PgBouncer compatibility mode](/orm/prisma-client/setup-and-configuration/databases-connections/pgbouncer) | +| `statement_cache_size` | No | `100` | Since 2.1.0: Specifies the number of [prepared statements](#prepared-statement-caching) cached per connection | +| `application_name` | No | | Since 3.3.0: Specifies a value for the application_name configuration parameter | +| `channel_binding` | No | `prefer` | Since 4.8.0: Specifies a value for the channel_binding configuration parameter | +| `options` | No | | Since 3.8.0: Specifies command line options to send to the server at connection start | + +As an example, if you want to connect to a schema called `myschema`, set the connection pool size to `5` and configure a timeout for queries of `3` seconds. You can use the following arguments: + +``` +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=myschema&connection_limit=5&socket_timeout=3 +``` + +### Configuring an SSL connection + +You can add various parameters to the connection URL if your database server uses SSL. Here's an overview of the possible parameters: + +- `sslmode=(disable|prefer|require)`: + - `prefer` (default): Prefer TLS if possible, accept plain text connections. + - `disable`: Do not use TLS. + - `require`: Require TLS or fail if not possible. +- `sslcert=`: Path to the server certificate. This is the root certificate used by the database server to sign the client certificate. You need to provide this if the certificate doesn't exist in the trusted certificate store of your system. For Google Cloud this likely is `server-ca.pem`. Certificate paths are [resolved relative to the `./prisma folder`](/orm/prisma-schema/overview/data-sources#securing-database-connections) +- `sslidentity=`: Path to the PKCS12 certificate database created from client cert and key. This is the SSL identity file in PKCS12 format which you will generate using the client key and client certificate. It combines these two files in a single file and secures them via a password (see next parameter). You can create this file using your client key and client certificate by using the following command (using `openssl`): + ``` + openssl pkcs12 -export -out client-identity.p12 -inkey client-key.pem -in client-cert.pem + ``` +- `sslpassword=`: Password that was used to secure the PKCS12 file. The `openssl` command listed in the previous step will ask for a password while creating the PKCS12 file, you will need to provide that same exact password here. +- `sslaccept=(strict|accept_invalid_certs)`: + - `strict`: Any missing value in the certificate will lead to an error. For Google Cloud, especially if the database doesn't have a domain name, the certificate might miss the domain/IP address, causing an error when connecting. + - `accept_invalid_certs` (default): Bypass this check. Be aware of the security consequences of this setting. + +Your database connection URL will look similar to this: + +``` +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?sslidentity=client-identity.p12&sslpassword=mypassword&sslcert=rootca.cert +``` + +### Connecting via sockets + +To connect to your PostgreSQL database via sockets, you must add a `host` field as a _query parameter_ to the connection URL (instead of setting it as the `host` part of the URI). +The value of this parameter then must point to the directory that contains the socket, e.g.: `postgresql://USER:PASSWORD@localhost/database?host=/var/run/postgresql/` + +Note that `localhost` is required, the value itself is ignored and can be anything. + +> **Note**: You can find additional context in this [GitHub issue](https://github.com/prisma/prisma-client-js/issues/437#issuecomment-592436707). + +## Type mapping between PostgreSQL and Prisma schema + +These two tables show the type mapping between PostgreSQL and Prisma schema. First [how Prisma ORM scalar types are translated into PostgreSQL database column types](#mapping-between-prisma-orm-scalar-types-and-postgresql-database-column-types), and then [how PostgreSQL database column types relate to Prisma ORM scalar and native types](#mapping-between-postgresql-database-column-types-to-prisma-orm-scalar-and-native-types). + +> Alternatively, see [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma type. + +### Mapping between Prisma ORM scalar types and PostgreSQL database column types + +The PostgreSQL connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma ORM [data model](/orm/prisma-schema/data-model/models) as follows to database column types: + +| Prisma ORM | PostgreSQL | +| ---------- | ------------------ | +| `String` | `text` | +| `Boolean` | `boolean` | +| `Int` | `integer` | +| `BigInt` | `bigint` | +| `Float` | `double precision` | +| `Decimal` | `decimal(65,30)` | +| `DateTime` | `timestamp(3)` | +| `Json` | `jsonb` | +| `Bytes` | `bytea` | + +### Mapping between PostgreSQL database column types to Prisma ORM scalar and native types + +- When [introspecting](/orm/prisma-schema/introspection) a PostgreSQL database, the database types are mapped to Prisma ORM types according to the following table. +- When [creating a migration](/orm/prisma-migrate) or [prototyping your schema](/orm/prisma-migrate/workflows/prototyping-your-schema) the table is also used - in the other direction. + +| PostgreSQL (Type \| Aliases) | Supported | Prisma ORM | Native database type attribute | Notes | +| ------------------------------------------- | :-------: | ------------- | :--------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `bigint` \| `int8` | ✔️ | `BigInt` | `@db.BigInt`\* | \*Default mapping for `BigInt` - no type attribute added to schema. | +| `boolean` \| `bool` | ✔️ | `Bool` | `@db.Boolean`\* | \*Default mapping for `Bool` - no type attribute added to schema. | +| `timestamp with time zone` \| `timestamptz` | ✔️ | `DateTime` | `@db.Timestamptz(x)` | +| `time without time zone` \| `time` | ✔️ | `DateTime` | `@db.Time(x)` | +| `time with time zone` \| `timetz` | ✔️ | `DateTime` | `@db.Timetz(x)` | +| `numeric(p,s)` \| `decimal(p,s)` | ✔️ | `Decimal` | `@db.Decimal(x, y)` | +| `real` \| `float`, `float4` | ✔️ | `Float` | `@db.Real` | +| `double precision` \| `float8` | ✔️ | `Float` | `@db.DoublePrecision`\* | \*Default mapping for `Float` - no type attribute added to schema. | +| `smallint` \| `int2` | ✔️ | `Int` | `@db.SmallInt` | | +| `integer` \| `int`, `int4` | ✔️ | `Int` | `@db.Int`\* | \*Default mapping for `Int` - no type attribute added to schema. | +| `smallserial` \| `serial2` | ✔️ | `Int` | `@db.SmallInt @default(autoincrement())` | +| `serial` \| `serial4` | ✔️ | `Int` | `@db.Int @default(autoincrement())` | +| `bigserial` \| `serial8` | ✔️ | `Int` | `@db.BigInt @default(autoincrement()` | +| `character(n)` \| `char(n)` | ✔️ | `String` | `@db.Char(x)` | +| `character varying(n)` \| `varchar(n)` | ✔️ | `String` | `@db.VarChar(x)` | +| `money` | ✔️ | `Decimal` | `@db.Money` | +| `text` | ✔️ | `String` | `@db.Text`\* | \*Default mapping for `String` - no type attribute added to schema. | +| `timestamp` | ✔️ | `DateTime` | `@db.TimeStamp`\* | \*Default mapping for `DateTime` - no type attribute added to schema. | +| `date` | ✔️ | `DateTime` | `@db.Date` | +| `enum` | ✔️ | `Enum` | N/A | +| `inet` | ✔️ | `String` | `@db.Inet` | +| `bit(n)` | ✔️ | `String` | `@Bit(x)` | +| `bit varying(n)` | ✔️ | `String` | `@VarBit` | +| `oid` | ✔️ | `Int` | `@db.Oid` | +| `uuid` | ✔️ | `String` | `@db.Uuid` | +| `json` | ✔️ | `Json` | `@db.Json` | +| `jsonb` | ✔️ | `Json` | `@db.JsonB`\* | \*Default mapping for `Json` - no type attribute added to schema. | +| `bytea` | ✔️ | `Bytes` | `@db.ByteA`\* | \*Default mapping for `Bytes` - no type attribute added to schema. | +| `xml` | ✔️ | `String` | `@db.Xml` | +| Array types | ✔️ | `[]` | +| `citext` | ✔️\* | `String` | `@db.Citext` | \* Only available if [Citext extension is enabled](/orm/prisma-schema/data-model/unsupported-database-features#enable-postgresql-extensions-for-native-database-functions). | +| `interval` | Not yet | `Unsupported` | | | +| `cidr` | Not yet | `Unsupported` | | | +| `macaddr` | Not yet | `Unsupported` | | | +| `tsvector` | Not yet | `Unsupported` | | | +| `tsquery` | Not yet | `Unsupported` | | | +| `int4range` | Not yet | `Unsupported` | | | +| `int8range` | Not yet | `Unsupported` | | | +| `numrange` | Not yet | `Unsupported` | | | +| `tsrange` | Not yet | `Unsupported` | | | +| `tstzrange` | Not yet | `Unsupported` | | | +| `daterange` | Not yet | `Unsupported` | | | +| `point` | Not yet | `Unsupported` | | | +| `line` | Not yet | `Unsupported` | | | +| `lseg` | Not yet | `Unsupported` | | | +| `box` | Not yet | `Unsupported` | | | +| `path` | Not yet | `Unsupported` | | | +| `polygon` | Not yet | `Unsupported` | | | +| `circle` | Not yet | `Unsupported` | | | +| Composite types | Not yet | n/a | | | +| Domain types | Not yet | n/a | | | + +[Introspection](/orm/prisma-schema/introspection) adds native database types that are **not yet supported** as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) fields: + +```prisma file=schema.prisma showLineNumbers +model Device { + id Int @id @default(autoincrement()) + name String + data Unsupported("circle") +} +``` + +## Prepared statement caching + +A [prepared statement](https://www.postgresql.org/docs/current/sql-prepare.html) is a feature that can be used to optimize performance. A prepared statement is parsed, compiled, and optimized only once and then can be executed directly multiple times without the overhead of parsing the query again. + +By caching prepared statements, Prisma Client's [query engine](/orm/more/under-the-hood/engines) does not repeatedly compile the same query which reduces database CPU usage and query latency. + +For example, here is the generated SQL for two different queries made by Prisma Client: + +```sql +SELECT * FROM user WHERE name = "John"; +SELECT * FROM user WHERE name = "Brenda"; +``` + +The two queries after parameterization will be the same, and the second query can skip the preparing step, saving database CPU and one extra roundtrip to the database. Query after parameterization: + +```sql +SELECT * FROM user WHERE name = $1 +``` + +Every database connection maintained by Prisma Client has a separate cache for storing prepared statements. The size of this cache can be tweaked with the `statement_cache_size` parameter in the connection string. By default, Prisma Client caches `100` statements per connection. + +Due to the nature of pgBouncer, if the `pgbouncer` parameter is set to `true`, the prepared statement cache is automatically disabled for that connection. diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/400-mysql.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/400-mysql.mdx new file mode 100644 index 0000000000..1b678eae3f --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/400-mysql.mdx @@ -0,0 +1,235 @@ +--- +title: 'MySQL/MariaDB' +metaTitle: 'MySQL database connector' +metaDescription: 'This page explains how Prisma can connect to a MySQL or MariaDB database using the MySQL database connector.' +tocDepth: 3 +--- + + + +The MySQL data source connector connects Prisma ORM to a [MySQL](https://www.mysql.com/) or [MariaDB](https://mariadb.org/) database server. + +By default, the MySQL connector contains a database driver responsible for connecting to your database. You can use a [driver adapter](/orm/overview/databases/database-drivers#driver-adapters) (Preview) to connect to your database using a JavaScript database driver from Prisma Client. + + + +## Example + +To connect to a MySQL database server, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema](/orm/prisma-schema): + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `mysql` data source connector, which is used both for MySQL and MariaDB. +- `url`: Specifies the [connection URL](#connection-url) for the MySQL database server. In this case, an [environment variable is used](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) to provide the connection URL. + +## Connection details + +### Connection URL + +Here's an overview of the components needed for a MySQL connection URL: + +![Structure of the MySQL connection URL](./mysql-connection-string.png) + +#### Base URL and path + +Here is an example of the structure of the _base URL_ and the _path_ using placeholder values in uppercase letters: + +``` +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +The following components make up the _base URL_ of your database, they are always required: + +| Name | Placeholder | Description | +| :------- | :---------- | :------------------------------------------------------------------------------------------------------------------ | +| Host | `HOST` | IP address/domain of your database server, e.g. `localhost` | +| Port | `PORT` | Port on which your database server is running, e.g. `5432` (default is `3306`, or no port when using Unix socket) | +| User | `USER` | Name of your database user, e.g. `janedoe` | +| Password | `PASSWORD` | Password for your database user | +| Database | `DATABASE` | Name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) you want to use, e.g. `mydb` | + + + +You must [percentage-encode special characters](/orm/reference/connection-urls#special-characters). + + + +#### Arguments + +A connection URL can also take arguments. Here is the same example from above with placeholder values in uppercase letters for three _arguments_: + +``` +mysql://USER:PASSWORD@HOST:PORT/DATABASE?KEY1=VALUE&KEY2=VALUE&KEY3=VALUE +``` + +The following arguments can be used: + +| Argument name | Required | Default | Description | +| :----------------- | :------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `connection_limit` | No | `num_cpus * 2 + 1` | Maximum size of the [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool) | +| `connect_timeout` | No | `5` | Maximum number of seconds to wait for a new connection to be opened, `0` means no timeout | +| `pool_timeout` | No | `10` | Maximum number of seconds to wait for a new connection from the pool, `0` means no timeout | +| `sslcert` | No | | Path to the server certificate. Certificate paths are [resolved relative to the `./prisma folder`](/orm/prisma-schema/overview/data-sources#securing-database-connections) | +| `sslidentity` | No | | Path to the PKCS12 certificate | +| `sslpassword` | No | | Password that was used to secure the PKCS12 file | +| `sslaccept` | No | `accept_invalid_certs` | Configures whether to check for missing values in the certificate. Possible values: `accept_invalid_certs`, `strict` | +| `socket` | No | | Points to a directory that contains a socket to be used for the connection | +| `socket_timeout` | No | | Number of seconds to wait until a single query terminates | + +As an example, if you want to set the connection pool size to `5` and configure a timeout for queries of `3` seconds, you can use the following arguments: + +``` +mysql://USER:PASSWORD@HOST:PORT/DATABASE?connection_limit=5&socket_timeout=3 +``` + +### Configuring an SSL connection + +You can add various parameters to the connection URL if your database server uses SSL. Here's an overview of the possible parameters: + +- `sslcert=`: Path to the server certificate. This is the root certificate used by the database server to sign the client certificate. You need to provide this if the certificate doesn't exist in the trusted certificate store of your system. For Google Cloud this likely is `server-ca.pem`. Certificate paths are [resolved relative to the `./prisma folder`](/orm/prisma-schema/overview/data-sources#securing-database-connections) + +- `sslidentity=`: Path to the PKCS12 certificate database created from client cert and key. This is the SSL identity file in PKCS12 format which you will generate using the client key and client certificate. It combines these two files in a single file and secures them via a password (see next parameter). You can create this file using your client key and client certificate by using the following command (using `openssl`): + ``` + openssl pkcs12 -export -out client-identity.p12 -inkey client-key.pem -in client-cert.pem + ``` +- `sslpassword=`: Password that was used to secure the PKCS12 file. The `openssl` command listed in the previous step will ask for a password while creating the PKCS12 file, you will need to provide that same exact password here. +- `sslaccept=(strict|accept_invalid_certs)`: + - `strict`: Any missing value in the certificate will lead to an error. For Google Cloud, especially if the database doesn't have a domain name, the certificate might miss the domain/IP address, causing an error when connecting. + - `accept_invalid_certs` (default): Bypass this check. Be aware of the security consequences of this setting. + +Your database connection URL will look similar to this: + +``` +mysql://USER:PASSWORD@HOST:PORT/DATABASE?sslidentity=client-identity.p12&sslpassword=mypassword&sslcert=rootca.cert +``` + +### Connecting via sockets + +To connect to your MySQL/MariaDB database via a socket, you must add a `socket` field as a _query parameter_ to the connection URL (instead of setting it as the `host` part of the URI). +The value of this parameter then must point to the directory that contains the socket, e.g. on a default installation of MySQL/MariaDB on Ubuntu or Debian use: `mysql://USER:PASSWORD@HOST/DATABASE?socket=/run/mysqld/mysqld.sock` + +Note that `localhost` is required, the value itself is ignored and can be anything. + +> **Note**: You can find additional context in this [GitHub issue](https://github.com/prisma/prisma-client-js/issues/437#issuecomment-592436707). + +## Type mapping between MySQL to Prisma schema + +The MySQL connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma ORM [data model](/orm/prisma-schema/data-model/models) as follows to native column types: + +> Alternatively, see [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma ORM type. + +### Native type mapping from Prisma ORM to MySQL + +| Prisma ORM | MySQL | Notes | +| ---------- | ---------------- | ------------------------------------------------------------------------------------- | +| `String` | `VARCHAR(191)` | | +| `Boolean` | `BOOLEAN` | In MySQL `BOOLEAN` is a synonym for `TINYINT(1)` | +| `Int` | `INT` | | +| `BigInt` | `BIGINT` | | +| `Float` | `DOUBLE` | | +| `Decimal` | `DECIMAL(65,30)` | | +| `DateTime` | `DATETIME(3)` | Currently, Prisma ORM does not support zero dates (`0000-00-00`, `00:00:00`) in MySQL | +| `Json` | `JSON` | Supported in MySQL 5.7+ only | +| `Bytes` | `LONGBLOB` | | + +### Native type mapping from Prisma ORM to MariaDB + +| Prisma ORM | MariaDB | Notes | +| ---------- | ---------------- | -------------------------------------------------- | +| `String` | `VARCHAR(191)` | | +| `Boolean` | `BOOLEAN` | In MariaDB `BOOLEAN` is a synonym for `TINYINT(1)` | +| `Int` | `INT` | | +| `BigInt` | `BIGINT` | | +| `Float` | `DOUBLE` | | +| `Decimal` | `DECIMAL(65,30)` | | +| `DateTime` | `DATETIME(3)` | | +| `Json` | `LONGTEXT` | See https://mariadb.com/kb/en/json-data-type/ | +| `Bytes` | `LONGBLOB` | | + +### Native type mappings + +When introspecting a MySQL database, the database types are mapped to Prisma ORM according to the following table: + +| MySQL | Prisma ORM | Supported | Native database type attribute | Notes | +| ------------------------- | ------------- | --------- | ---------------------------------------------- | ------------------------------------------------------------------ | +| `serial` | `BigInt` | ✔️ | `@db.UnsignedBigInt @default(autoincrement())` | +| `bigint` | `BigInt` | ✔️ | `@db.BigInt` | +| `bigint unsigned` | `BigInt` | ✔️ | `@db.UnsignedBigInt` | +| `bit` | `Bytes` | ✔️ | `@db.Bit(x)` | `bit(1)` maps to `Boolean` - all other `bit(x)` map to `Bytes` | +| `boolean` \| `tinyint(1)` | `Boolean` | ✔️ | `@db.TinyInt(1)` | +| `varbinary` | `Bytes` | ✔️ | `@db.VarBinary` | +| `longblob` | `Bytes` | ✔️ | `@db.LongBlob` | +| `tinyblob` | `Bytes` | ✔️ | `@db.TinyBlob` | +| `mediumblob` | `Bytes` | ✔️ | `@db.MediumBlob` | +| `blob` | `Bytes` | ✔️ | `@db.Blob` | +| `binary` | `Bytes` | ✔️ | `@db.Binary` | +| `date` | `DateTime` | ✔️ | `@db.Date` | +| `datetime` | `DateTime` | ✔️ | `@db.DateTime` | +| `timestamp` | `DateTime` | ✔️ | `@db.TimeStamp` | +| `time` | `DateTime` | ✔️ | `@db.Time` | +| `decimal(a,b)` | `Decimal` | ✔️ | `@db.Decimal(x,y)` | +| `numeric(a,b)` | `Decimal` | ✔️ | `@db.Decimal(x,y)` | +| `enum` | `Enum` | ✔️ | N/A | +| `float` | `Float` | ✔️ | `@db.Float` | +| `double` | `Float` | ✔️ | `@db.Double` | +| `smallint` | `Int` | ✔️ | `@db.SmallInt` | +| `smallint unsigned` | `Int` | ✔️ | `@db.UnsignedSmallInt` | +| `mediumint` | `Int` | ✔️ | `@db.MediumInt` | +| `mediumint unsigned` | `Int` | ✔️ | `@db.UnsignedMediumInt` | +| `int` | `Int` | ✔️ | `@db.Int` | +| `int unsigned` | `Int` | ✔️ | `@db.UnsignedInt` | +| `tinyint` | `Int` | ✔️ | `@db.TinyInt(x)` | `tinyint(1)` maps to `Boolean` all other `tinyint(x)` map to `Int` | +| `tinyint unsigned` | `Int` | ✔️ | `@db.UnsignedTinyInt(x)` | `tinyint(1) unsigned` **does not** map to `Boolean` | +| `year` | `Int` | ✔️ | `@db.Year` | +| `json` | `Json` | ✔️ | `@db.Json` | Supported in MySQL 5.7+ only | +| `char` | `String` | ✔️ | `@db.Char(x)` | +| `varchar` | `String` | ✔️ | `@db.VarChar(x)` | +| `tinytext` | `String` | ✔️ | `@db.TinyText` | +| `text` | `String` | ✔️ | `@db.Text` | +| `mediumtext` | `String` | ✔️ | `@db.MediumText` | +| `longtext` | `String` | ✔️ | `@db.LongText` | +| `set` | `Unsupported` | Not yet | | +| `geometry` | `Unsupported` | Not yet | | +| `point` | `Unsupported` | Not yet | | +| `linestring` | `Unsupported` | Not yet | | +| `polygon` | `Unsupported` | Not yet | | +| `multipoint` | `Unsupported` | Not yet | | +| `multilinestring` | `Unsupported` | Not yet | | +| `multipolygon` | `Unsupported` | Not yet | | +| `geometrycollection` | `Unsupported` | Not yet | | + +[Introspection](/orm/prisma-schema/introspection) adds native database types that are **not yet supported** as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) fields: + +```prisma file=schema.prisma showLineNumbers +model Device { + id Int @id @default(autoincrement()) + name String + data Unsupported("circle") +} +``` + +## Engine + +If you are using a version of MySQL where MyISAM is the default engine, you must specify `ENGINE = InnoDB;` when you create a table. If you introspect a database that uses a different engine, relations in the Prisma Schema are not created (or lost, if the relation already existed). + +## Permissions + +A fresh new installation of MySQL/MariaDB has by default only a `root` database user. Do not use `root` user in your Prisma configuration, but instead create a database and database user for each application. On most Linux hosts (e.g. Ubuntu) you can simply run this as the Linux `root` user (which automatically has database `root` access as well): + +``` +mysql -e "CREATE DATABASE IF NOT EXISTS $DB_PRISMA;" +mysql -e "GRANT ALL PRIVILEGES ON $DB_PRISMA.* TO $DB_USER@'%' IDENTIFIED BY '$DB_PASSWORD';" +``` + +The above is enough to run the `prisma db pull` and `prisma db push` commands. In order to also run `prisma migrate` commands these permissions need to be granted: + +``` +mysql -e "GRANT CREATE, DROP, REFERENCES, ALTER ON *.* TO $DB_USER@'%';" +``` diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/500-sqlite.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/500-sqlite.mdx new file mode 100644 index 0000000000..9e8dd99f9a --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/500-sqlite.mdx @@ -0,0 +1,93 @@ +--- +title: 'SQLite' +metaTitle: 'SQLite database connector' +metaDescription: 'This page explains how Prisma can connect to a SQLite database using the SQLite database connector.' +tocDepth: 3 +--- + + + +The SQLite data source connector connects Prisma ORM to a [SQLite](https://www.sqlite.org/) database file. These files always have the file ending `.db` (e.g.: `dev.db`). + +By default, the SQLite connector contains a database driver responsible for connecting to your database. You can use a [driver adapter](/orm/overview/databases/database-drivers#driver-adapters) (Preview) to connect to your database using a JavaScript database driver from Prisma Client. + + + +## Example + +To connect to a SQLite database file, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema](/orm/prisma-schema): + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `sqlite` data source connector. +- `url`: Specifies the [connection URL](/orm/reference/connection-urls) for the SQLite database. The connection URL always starts with the prefix `file:` and then contains a file path pointing to the SQLite database file. In this case, the file is located in the same directory and called `dev.db`. + +## Type mapping between SQLite to Prisma schema + +The SQLite connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the [data model](/orm/prisma-schema/data-model/models) to native column types as follows: + +> Alternatively, see [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma ORM type. + +### Native type mapping from Prisma ORM to SQLite + +| Prisma ORM | SQLite | +| ---------- | ------------- | +| `String` | `TEXT` | +| `Boolean` | `BOOLEAN` | +| `Int` | `INTEGER` | +| `BigInt` | `INTEGER` | +| `Float` | `REAL` | +| `Decimal` | `DECIMAL` | +| `DateTime` | `NUMERIC` | +| `Json` | Not supported | +| `Bytes` | `BLOB` | + +## Rounding errors on big numbers + +SQLite is a loosely-typed database. If your Schema has a field of type `Int`, then Prisma ORM prevents you from inserting a value larger than an integer. However, nothing prevents the database from directly accepting a bigger number. These manually-inserted big numbers cause rounding errors when queried. + +To avoid this problem, Prisma ORM 4.0.0 and later checks numbers on the way out of the database to verify that they fit within the boundaries of an integer. If a number does not fit, then Prisma ORM throws a P2023 error, such as: + +``` +Inconsistent column data: Conversion failed: +Value 9223372036854775807 does not fit in an INT column, +try migrating the 'int' column type to BIGINT +``` + +## Connection details + +### Connection URL + +The connection URL of a SQLite connector points to a file on your file system. For example, the following two paths are equivalent because the `.db` is in the same directory: + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} +``` + +is the same as: + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "sqlite" + url = "file:dev.db" +} +``` + +You can also target files from the root or any other place in your file system: + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "sqlite" + url = "file:/Users/janedoe/dev.db" +} +``` diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/600-mongodb.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/600-mongodb.mdx new file mode 100644 index 0000000000..3ded89ec65 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/600-mongodb.mdx @@ -0,0 +1,577 @@ +--- +title: 'MongoDB' +metaTitle: 'MongoDB database connector' +metaDescription: 'How Prisma can connect to a MongoDB database using the MongoDB database connector.' +hidePage: false +tocDepth: 3 +codeStyle: false +--- + + + +This guide discusses the concepts behind using Prisma ORM and MongoDB, explains the commonalities and differences between MongoDB and other database providers, and leads you through the process for configuring your application to integrate with MongoDB using Prisma ORM. + + + +To connect Prisma ORM with MongoDB, refer to our [Getting Started documentation](/getting-started/setup-prisma/start-from-scratch/mongodb-typescript-mongodb). + + + + + +## What is MongoDB? + +[MongoDB](https://www.mongodb.com/) is a NoSQL database that stores data in [BSON](https://bsonspec.org/) format, a JSON-like document format designed for storing data in key-value pairs. It is commonly used in JavaScript application development because the document model maps easily to objects in application code, and there is built in support for high availability and horizontal scaling. + +MongoDB stores data in collections that do not need a schema to be defined in advance, as you would need to do with tables in a relational database. The structure of each collection can also be changed over time. This flexibility can allow rapid iteration of your data model, but it does mean that there are a number of differences when using Prisma ORM to work with your MongoDB database. + +## Commonalities with other database providers + +Some aspects of using Prisma ORM with MongoDB are the same as when using Prisma ORM with a relational database. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- connect to your database, using the [`mongodb` database connector](/orm/overview/databases) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a MongoDB database +- use [`db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) to push changes in your schema to the database +- use [Prisma Client](/orm/prisma-client) in your application to query your database in a type safe way based on your Prisma Schema + +## Differences to consider + +MongoDB's document-based structure and flexible schema means that using Prisma ORM with MongoDB differs from using it with a relational database in a number of ways. These are some areas where there are differences that you need to be aware of: + +- **Defining IDs**: MongoDB documents have an `_id` field (that often contains an [ObjectID](https://www.mongodb.com/docs/manual/reference/bson-types/#std-label-objectid)). Prisma ORM does not support fields starting with `_`, so this needs to be mapped to a Prisma ORM field using the `@map` attribute. For more information, see [Defining IDs in MongoDB](/orm/prisma-schema/data-model/models#defining-ids-in-mongodb). + +- **Migrating existing data to match your Prisma schema**: In relational databases, all your data must match your schema. If you change the type of a particular field in your schema when you migrate, all the data must also be updated to match. In contrast, MongoDB does not enforce any particular schema, so you need to take care when migrating. For more information, see [How to migrate old data to new schemas](#how-to-migrate-existing-data-to-match-your-prisma-schema). + +- **Introspection and Prisma ORM relations**: When you introspect an existing MongoDB database, you will get a schema with no relations and will need to add the missing relations in manually. For more information, see [How to add in missing relations after Introspection](#how-to-add-in-missing-relations-after-introspection). + +- **Filtering for `null` and missing fields**: MongoDB makes a distinction between setting a field to `null` and not setting it at all, which is not present in relational databases. Prisma ORM currently does not express this distinction, which means that you need to be careful when filtering for `null` and missing fields. For more information, see [How to filter for `null` and missing fields](#how-to-filter-for-null-and-missing-fields) + +- **Enabling replication**: Prisma ORM uses [MongoDB transactions](https://www.mongodb.com/docs/manual/core/transactions/) internally to avoid partial writes on nested queries. When using transactions, MongoDB requires replication of your data set to be enabled. To do this, you will need to configure a [replica set](https://www.mongodb.com/docs/manual/replication/) — this is a group of MongoDB processes that maintain the same data set. Note that it is still possible to use a single database, by creating a replica set with only one node in it. If you use MongoDB's [Atlas](https://www.mongodb.com/atlas/database) hosting service, the replica set is configured for you, but if you are running MongoDB locally you will need to set up a replica set yourself. For more information, see MongoDB's [guide to deploying a replica set](https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/). + +## How to use Prisma ORM with MongoDB + +This section provides instructions for how to carry out tasks that require steps specific to MongoDB. + +### How to migrate existing data to match your Prisma schema + +Migrating your database over time is an important part of the development cycle. During development, you will need to update your Prisma schema (for example, to add new fields), then update the data in your development environment’s database, and eventually push both the updated schema and the new data to the production database. + + + +When using MongoDB, be aware that the “coupling” between your schema and the database is purposefully designed to be less rigid than with SQL databases; MongoDB will not enforce the schema, so you have to verify data integrity. + + + +These iterative tasks of updating the schema and the database can result in inconsistencies between your schema and the actual data in the database. Let’s look at one scenario where this can happen, and then examine several strategies for you and your team to consider for handling these inconsistencies. + +**Scenario**: you need to include a phone number for users, as well as an email. You currently have the following `User` model in your `schema.prisma` file: + +```prisma file=prisma/schema.prisma showLineNumbers +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String +} +``` + +There are a number of strategies you could use for migrating this schema: + +- **"On-demand" updates**: with this strategy, you and your team have agreed that updates can be made to the schema as needed. However, in order to avoid migration failures due to inconsistencies between the data and schema, there is agreement in the team that any new fields added are explicitly defined as optional. + + In our scenario above, you can add an optional `phoneNumber` field to the `User` model in your Prisma schema: + + ```prisma file=prisma/schema.prisma highlight=4;add showLineNumbers + model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + //add-next-line + phoneNumber String? + } + ``` + + Then regenerate your Prisma Client using the `npx prisma generate` command. Next, update your application to reflect the new field, and redeploy your app. + + As the `phoneNumber` field is optional, you can still query the old users where the phone number has not been defined. The records in the database will be updated "on demand" as the application's users begin to enter their phone number in the new field. + + Another option is to add a default value on a required field, for example: + + ```prisma file=prisma/schema.prisma highlight=4;add showLineNumbers + model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + //add-next-line + phoneNumber String @default("000-000-0000") + } + ``` + + Then when you encounter a missing `phoneNumber`, the value will be coerced into `000-000-0000`. + +- **"No breaking changes" updates**: this strategy builds on the first one, with further consensus amongst your team that you don't rename or delete fields, only add new fields, and always define the new fields as optional. This policy can be reinforced by adding checks in the CI/CD process to verify that there are no backwards-incompatible changes to the schema. + +- **"All-at-once" updates**: this strategy is similar to traditional migrations in relational databases, where all data is updated to reflect the new schema. In the scenario above, you would create a script to add a value for the phone number field to all existing users in your database. You can then make the field a required field in the application because the schema and the data are consistent. + +### How to add in missing relations after Introspection + +After introspecting an existing MongoDB database, you will need to manually add in relations between models. MongoDB does not have the concept of defining relations via foreign keys, as you would in a relational database. However, if you have a collection in MongoDB with a "foreign-key-like" field that matches the ID field of another collection, Prisma ORM will allow you to emulate relations between the collections. + +As an example, take a MongoDB database with two collections, `User` and `Post`. The data in these collections has the following format, with a `userId` field linking users to posts: + +`User` collection: + +- `_id` field with a type of `objectId` +- `email` field with a type of `string` + +`Post` collection: + +- `_id` field with a type of `objectId` +- `title` field with a type of `string` +- `userId` with a type of `objectID` + +On introspection with `db pull`, this is pulled in to the Prisma Schema as follows: + +```prisma file=prisma/schema.prisma showLineNumbers +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + userId String @db.ObjectId +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String +} +``` + +This is missing the relation between the `User` and `Post` models. To fix this, manually add a `user` field to the `Post` model with a `@relation` attribute using `userId` as the `fields` value, linking it to the `User` model, and a `posts` field to the `User` model as the back relation: + +```prisma file=prisma/schema.prisma highlight=5;add|11;add showLineNumbers +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + userId String @db.ObjectId + //add-next-line + user User @relation(fields: [userId], references: [id]) +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + //add-next-line + posts Post[] +} +``` + +For more information on how to use relations in Prisma ORM, see [our documentation](/orm/prisma-schema/data-model/relations). + +### How to filter for `null` and missing fields + +To understand how MongoDB distinguishes between `null` and missing fields, consider the example of a `User` model with an optional `name` field: + +```ts +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + name String? +} +``` + +First, try creating a record with the `name` field explicitly set to `null`. Prisma ORM will return `name: null` as expected: + + + + + +```ts +const createNull = await prisma.user.create({ + data: { + email: 'user1@prisma.io', + name: null, + }, +}) +console.log(createNull) +``` + + + + + +```code no-copy +{ + id: '6242c4ae032bc76da250b207', + email: 'user1@prisma.io', + name: null +} +``` + + + + + +If you check your MongoDB database directly, you will also see a new record with `name` set to `null`: + +```json +{ + "_id": "6242c4af032bc76da250b207", + "email": "user1@prisma.io", + "name": null +} +``` + +Next, try creating a record without explicitly setting the `name` field: + + + + + +```ts +const createMissing = await prisma.user.create({ + data: { + email: 'user2@prisma.io', + }, +}) +console.log(createMissing) +``` + + + + + +```code no-copy +{ + id: '6242c4ae032bc76da250b208', + email: 'user2@prisma.io', + name: null +} +``` + + + + + +Prisma ORM still returns `name: null`, but if you look in the database directly you will see that the record has no `name` field defined at all: + +```json +{ + "_id": "6242c4af032bc76da250b208", + "email": "user2@prisma.io" +} +``` + +Prisma ORM returns the same result in both cases, because we currently don't have a way to specify this difference in MongoDB between fields that are `null` in the underlying database, and fields that are not defined at all — see [this Github issue](https://github.com/prisma/prisma/issues/12555) for more information. + +This means that you currently have to be careful when filtering for `null` and missing fields. Filtering for records with `name: null` will only return the first record, with the `name` explicitly set to `null`: + + + + + +```ts +const findNulls = await prisma.user.findMany({ + where: { + name: null, + }, +}) +console.log(findNulls) +``` + + + + + +```terminal no-copy +[ + { + id: '6242c4ae032bc76da250b207', + email: 'user1@prisma.io', + name: null + } +] +``` + + + + + +This is because `name: null` is checking for equality, and a non-existing field isn't equal to `null`. + +To include missing fields as well, use the [`isSet` filter](/orm/reference/prisma-client-reference#isset) to explicitly search for fields which are either `null` or not set. This will return both records: + + + + + +```ts +const findNullOrMissing = await prisma.user.findMany({ + where: { + OR: [ + { + name: null, + }, + { + name: { + isSet: false, + }, + }, + ], + }, +}) +console.log(findNullOrMissing) +``` + + + + + +```terminal no-copy +[ + { + id: '6242c4ae032bc76da250b207', + email: 'user1@prisma.io', + name: null + }, + { + id: '6242c4ae032bc76da250b208', + email: 'user2@prisma.io', + name: null + } +] +``` + + + + + +## More on using MongoDB with Prisma ORM + +The fastest way to start using MongoDB with Prisma ORM is to refer to our Getting Started documentation: + +- [Start from scratch](/getting-started/setup-prisma/start-from-scratch/mongodb-typescript-mongodb) +- [Add to existing project](/getting-started/setup-prisma/add-to-existing-project/mongodb-typescript-mongodb) + +These tutorials will take you through the process of connecting to MongoDB, pushing schema changes, and using Prisma Client. + +Further reference information is available in the [MongoDB connector documentation](/orm/overview/databases/mongodb). + +For more information on how to set up and manage a MongoDB database, see the [Prisma Data Guide](https://www.prisma.io/dataguide#mongodb). + +## Example + +To connect to a MongoDB server, configure the [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma Schema](/orm/prisma-schema): + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `mongodb` data source connector. +- `url`: Specifies the [connection URL](#connection-url) for the MongoDB server. In this case, an [environment variable is used](/orm/more/development-environment/environment-variables) to provide the connection URL. + + + +The MongoDB database connector uses transactions to support nested writes. Transactions **require** a [replica set](https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/) deployment. The easiest way to deploy a replica set is with [Atlas](https://www.mongodb.com/docs/atlas/getting-started/). It's free to get started. + + + +## Connection details + +### Connection URL + +The MongoDB connection URL can be configured in different ways depending on how you are hosting your database. The standard configuration is made up of the following components: + +![Structure of the MongoDB connection URL](./mongodb.png) + +#### Base URL and path + +The base URL and path sections of the connection URL are made up of your authentication credentials followed by the host (and optionally, a port number) and database. + +``` +mongodb://USERNAME:PASSWORD@HOST/DATABASE +``` + +The following components make up the _base URL_ of your database: + +| Name | Placeholder | Description | +| :------- | :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| User | `USERNAME` | Name of your database user, e.g. `janedoe` | +| Password | `PASSWORD` | Password for your database user | +| Host | `HOST` | The host where a [`mongod`](https://www.mongodb.com/docs/manual/reference/program/mongod/#mongodb-binary-bin.mongod) instance is running. If you are running a sharded cluster this will a [`mongos`](https://www.mongodb.com/docs/manual/reference/program/mongos/#mongodb-binary-bin.mongos) instance. This can be a hostname, IP address or UNIX domain socket. | +| Port | `PORT` | Port on which your database server is running, e.g. `1234`. If none is provided the default `27017` is used. | +| Database | `DATABASE` | Name of the database to use. If none is specified but the `authSource` option is set then the `authSource` database name is used. If neither the database in the connection string nor the `authSource` option is specified then it defaults to `admin` | + + + +You must [percentage-encode special characters](/orm/reference/connection-urls#special-characters). + + + +#### Arguments + +A connection URL can also take arguments. The following example sets three arguments: + +- An `ssl` connection +- A `connectTimeoutMS` +- And the `maxPoolSize` + +``` +mongodb://USERNAME:PASSWORD@HOST/DATABASE?ssl=true&connectTimeoutMS=5000&maxPoolSize=50 +``` + +Refer to the [MongoDB connection string documentation](https://www.mongodb.com/docs/manual/reference/connection-string/) for a complete list of connection string arguments. There are no Prisma ORM-specific arguments. + +## Using `ObjectId` + +It is common practice for the `_id` field of a MongoDB document to contain an [ObjectId](https://www.mongodb.com/docs/manual/reference/bson-types/#std-label-objectid): + +```json +{ + "_id": { "$oid": "60d599cb001ef98000f2cad2" }, + "createdAt": { "$date": { "$numberLong": "1624611275577" } }, + "email": "ella@prisma.io", + "name": "Ella", + "role": "ADMIN" +} +``` + +Any field (most commonly IDs and relation scalar fields) that maps to an `ObjectId` in the underlying database: + +- Must be of type `String` or `Bytes` +- Must include the `@db.ObjectId` attribute +- Can optionally use `@default(auto())` to auto-generate a valid `ObjectId` on document creation + +Here is an example that uses `String`: + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + // Other fields +} +``` + +And here is another example that uses `Bytes`: + +```prisma +model User { + id Bytes @id @default(auto()) @map("_id") @db.ObjectId + // Other fields +} +``` + +See also: [Defining ID fields in MongoDB](/orm/prisma-schema/data-model/models#defining-ids-in-mongodb) + +### Generating `ObjectId` + +To generate a valid `ObjectId` (for testing purposes or to manually set an ID field value) in your application, use the [`bson`](https://www.npmjs.com/package/bson) package. + +``` +npm install --save bson +``` + +```ts +import { ObjectId } from 'bson' + +const id = new ObjectId() +``` + +## Differences to connectors for relational databases + +This section covers ways in which the MongoDB connector differs from Prisma ORM connectors for relational databases. + +### No support for Prisma Migrate + +Currently, there are no plans to add support for [Prisma Migrate](/orm/prisma-migrate) as MongoDB projects do not rely on internal schemas where changes need to be managed with an extra tool. Management of `@unique` indexes is realized through `db push`. + +### No support for `@@id` and `autoincrement()` + +The [`@@id`](/orm/reference/prisma-schema-reference#id-1) attribute (an ID for multiple fields) is not supported because primary keys in MongoDB are always on the `_id` field of a model. + +The [`autoincrement()`](/orm/reference/prisma-schema-reference#generate-autoincrementing-integers-as-ids-relational-databases-only) function (which creates incrementing `@id` values) is not supported because `autoincrement()` does not work with the `ObjectID` type that the `_id` field has in MongoDB. + +### Cyclic references and referential actions + +If you have cyclic references in your models, either from self-relations or a cycle of relations between models, and you use [referential actions](/orm/prisma-schema/data-model/relations/referential-actions), you must set a referential action of `NoAction` to prevent an infinite loop of actions. + +See [Special rules for referential actions](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions) for more details. + +### Replica set configuration + +MongoDB only allows you to start a transaction on a replica set. Prisma ORM uses transactions internally to avoid partial writes on nested queries. This means we inherit the requirement of needing a replica set configured. + +When you try to use Prisma ORM's MongoDB connector on a deployment that has no replica set configured, Prisma ORM shows the message `Error: Transactions are not supported by this deployment`. The full text of the error message is the following: + +``` +PrismaClientUnknownRequestError2 [PrismaClientUnknownRequestError]: +Invalid `prisma.post.create()` invocation in +/index.ts:9:21 + + 6 await prisma.$connect() + 7 + 8 // Create the first post +→ 9 await prisma.post.create( + Error in connector: Database error. error code: unknown, error message: Transactions are not supported by this deployment + at cb (/node_modules/@prisma/client/runtime/index.js:34804:17) + at processTicksAndRejections (internal/process/task_queues.js:97:5) { + clientVersion: '3.xx.0' +} +``` + +To resolve this, we suggest you change your deployment to one with a replica set configured. + +One simple way for this is to use [MongoDB Atlas](https://www.mongodb.com/cloud/atlas) to launch a free instance that has replica set support out of the box. + +There's also an option to run the replica set locally with this guide: https://www.mongodb.com/docs/manual/tutorial/convert-standalone-to-replica-set + +## Type mapping between MongoDB and the Prisma schema + +The MongoDB connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma ORM [data model](/orm/prisma-schema/data-model/models) to MongoDB's native column types as follows: + +> Alternatively, see [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma type. + +### Native type mapping from Prisma ORM to MongoDB + +| Prisma ORM | MongoDB | +| ---------- | ---------------------------------------------------------------------- | +| `String` | `string` | +| `Boolean` | `bool` | +| `Int` | `int` | +| `BigInt` | `long` | +| `Float` | `double` | +| `Decimal` | [Currently unsupported](https://github.com/prisma/prisma/issues/12637) | +| `DateTime` | `timestamp` | +| `Bytes` | `binData` | +| `Json` | | + +MongoDB types that are currently unsupported: + +- `Decimal128` +- `Undefined` +- `DBPointer` +- `Null` +- `Symbol` +- `MinKey` +- `MaxKey` +- `Object` +- `Javascript` +- `JavascriptWithScope` +- `Regex` + +### Mapping from MongoDB to Prisma ORM types on Introspection + +When introspecting a MongoDB database, Prisma ORM uses the relevant [scalar types](/orm/prisma-schema/data-model/models#scalar-fields). Some special types also get additional native type annotations: + +| MongoDB (Type \| Aliases) | Prisma ORM | Supported | Native database type attribute | Notes | +| ------------------------- | ---------- | :-------: | :----------------------------- | :---- | +| `objectId` | `String` | ✔️ | `@db.ObjectId` | | + +[Introspection](/orm/prisma-schema/introspection) adds native database types that are **not yet supported** as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) fields: + +```prisma file=schema.prisma showLineNumbers +model Example { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + regex Unsupported("RegularExpression") +} +``` diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/020-sql-server-local.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/020-sql-server-local.mdx new file mode 100644 index 0000000000..67ee63f3f5 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/020-sql-server-local.mdx @@ -0,0 +1,53 @@ +--- +title: 'SQL Server on Windows (local)' +metaTitle: 'SQL Server on Windows' +metaDescription: 'Set up and configure SQL Server on Windows.' +--- + + + +To run a Microsoft SQL Server locally on a Windows machine: + +1. If you do not have access to an instance of Microsoft SQL Server, download and set up [SQL Server 2019 Developer](https://www.microsoft.com/en-us/sql-server/sql-server-downloads). + +1. Download and install [SQL Server Management Studio](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15). + +1. Use Windows Authentication to log in to Microsoft SQL Server Management Studio (expand the **Server Name** dropdown and click **<Browse for more...>** to find your database engine): + +![The New Query button in SQL Server Management Studio](/img/orm/connect-sql-server.png) + + + +## Enable TCP/IP + +Prisma Client requires TCP/IP to be enabled. To enable TCP/IP: + +1. Open SQL Server Configuration Manager. (Search for "SQL Server Configuration Manager" in the Start Menu, or open the Start Menu and type "SQL Server Configuration Manager".) + +1. In the left-hand panel, click **SQL Server Network Configuration** > **Protocols for MSSQLSERVER** + +1. Right-click **TCP/IP** and choose **Enable**. + +## Enable authentication with SQL logins (Optional) + +If you want to use a username and password in your connection URL rather than integrated security, [enable mixed authentication mode](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/change-server-authentication-mode?view=sql-server-ver15&tabs=ssms) as follows: + +1. Right-click on your database engine in the Object Explorer and click **Properties**. + +1. In the Server Properties window, click **Security** in the left-hand list and tick the **SQL Server and Windows Authentication Mode** option, then click **OK**. + +1. Right-click on your database engine in the Object Explorer and click **Restart**. + +### Enable the `sa` login + +To enable the default `sa` (administrator) SQL Server login: + +1. In SQL Server Management Studio, in the Object Explorer, expand **Security** > **Logins** and double-click **sa**. + +1. On the **General** page, choose a password for the `sa` account (untick **Enforce password policy** if you do not want to enforce a policy). + +1. On the **Status** page, under **Settings** > **Login**, tick **Enabled**, then click **OK**. + +You can now use the `sa` account in a connection URL and when you log in to SQL Server Management Studio. + +> **Note**: The `sa` user has extensive permissions. You can also [create your own login with fewer permissions](https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-login?view=sql-server-ver15). diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/030-sql-server-docker.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/030-sql-server-docker.mdx new file mode 100644 index 0000000000..95c0f96a89 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/030-sql-server-docker.mdx @@ -0,0 +1,49 @@ +--- +title: 'SQL Server on Docker' +metaTitle: 'SQL Server on Docker' +metaDescription: 'Download and use the Microsoft SQL Server Docker image.' +--- + + + +To run a Microsoft SQL Server container image with Docker: + +1. Install and set up [Docker](https://docs.docker.com/get-started/get-docker/) +1. Run the following command in your terminal to download the Microsoft SQL Server 2019 image: + + ```terminal + docker pull mcr.microsoft.com/mssql/server:2019-latest + ``` + +1. Create an instance of the container image, replacing the value of `SA_PASSWORD` with a password of your choice: + + ```terminal wrap + docker run --name sql_container -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=myPassword' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest + ``` + +1. [Follow Microsoft's instructions to connect to SQL Server and use the `sqlcmd` tool](https://learn.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-cmd&tabs=cli#connect-to-sql-server), replacing the image name and password with your own. + +1. From the `sqlcmd` command prompt, create a new database: + + ```terminal + CREATE DATABASE quickstart + GO + ``` + +1. Run the following command to check that your database was created successfully: + + ```terminal + sp_databases + GO + ``` + + + +## Connection URL credentials + +Based on this example, your credentials are: + +- **Username**: sa +- **Password**: myPassword +- **Database**: quickstart +- **Port**: 1433 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/index.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/index.mdx new file mode 100644 index 0000000000..50138a1066 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/800-sql-server/index.mdx @@ -0,0 +1,210 @@ +--- +title: 'Microsoft SQL Server' +metaTitle: 'Microsoft SQL Server' +metaDescription: 'This page explains how Prisma can connect to a Microsoft SQL Server database using the Microsoft SQL Server database connector.' +tocDepth: 4 +toc_max_heading_level: 4 +--- + + + +The Microsoft SQL Server data source connector connects Prisma ORM to a [Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/sql-server/?view=sql-server-ver15) database server. + + + +## Example + +To connect to a Microsoft SQL Server database, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema](/orm/prisma-schema): + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "sqlserver" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `sqlserver` data source connector. +- `url`: Specifies the [connection URL](#connection-details) for the Microsoft SQL Server database. In this case, an [environment variable is used](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) to provide the connection URL. + +## Connection details + +The connection URL used to connect to an Microsoft SQL Server database follows the [JDBC standard](https://learn.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15). + +The following example uses SQL authentication (username and password) with an enabled TLS encrypted connection: + +``` +sqlserver://HOST[:PORT];database=DATABASE;user=USER;password=PASSWORD;encrypt=true +``` + + + +Note: If you are using any of the following characters in your connection string, [you will need to escape them](https://learn.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver16#escaping-values-in-the-connection-url). + +```terminal +:\=;/[]{} # these are characters that will need to be escaped +``` + +To escape these characters, use curly braces `{}` around values that contain special characters. As an example: + +```terminal +sqlserver://HOST[:PORT];database=DATABASE;user={MyServer/MyUser};password={ThisIsA:SecurePassword;};encrypt=true +``` + + + +### Arguments + +| Argument name | Required | Default | Comments | +| :------------------------------------------------------------------------------------ | :---------------- | :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|

  • `database`
  • `initial catalog`
| No | `master` | The database to connect to. | +|
  • `username`
  • `user`
  • `uid`
  • `userid`
| No - see Comments | | SQL Server login (such as `sa`) _or_ a valid Windows (Active Directory) username if `integratedSecurity` is set to `true` (Windows only). | +|
  • `password`
  • `pwd`
| No - see Comments | | Password for SQL Server login _or_ Windows (Active Directory) username if `integratedSecurity` is set to `true` (Windows only). | +| `encrypt` | No | `true` | Configures whether to use TLS all the time, or only for the login procedure, possible values: `true` (use always), `false` (only for login credentials). | +| `integratedSecurity` | No | | Enables [Windows authentication (integrated security)](https://learn.microsoft.com/en-us/previous-versions/dotnet/framework/data/adonet/sql/authentication-in-sql-server), possible values: `true`, `false`, `yes`, `no`. If set to `true` or `yes` and `username` and `password` are present, login is performed through Windows Active Directory. If login details are not given via separate arguments, the current logged in Windows user is used to login to the server. | +| `connectionLimit` | No | `num_cpus * 2 + 1` | Maximum size of the [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool) | +| `connectTimeout` | No | `5` | Maximum number of seconds to wait for a new connection | +| `schema` | No | `dbo` | Added as a prefix to all the queries if schema name is not the default. | +|
  • `loginTimeout`
  • `connectTimeout`
  • `connectionTimeout`
| No | | Number of seconds to wait for login to succeed. | +| `socketTimeout` | No | | Number of seconds to wait for each query to succeed. | +| `isolationLevel` | No | | Sets [transaction isolation level](https://learn.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-ver15). | +| `poolTimeout` | No | `10` | Maximum number of seconds to wait for a new connection from the pool. If all connections are in use, the database will return a `PoolTimeout` error after waiting for the given time. | +|
  • `ApplicationName`
  • `Application Name`
(case insensitive) | No | | Sets the application name for the connection. Since version 2.28.0. | +| `trustServerCertificate` | No | `false` | Configures whether to trust the server certificate. | +| `trustServerCertificateCA` | No | | A path to a certificate authority file to be used instead of the system certificates to authorize the server certificate. Must be either in `pem`, `crt` or `der` format. Cannot be used together with `trustServerCertificate` parameter. | + +### Using [integrated security](https://learn.microsoft.com/en-us/previous-versions/dotnet/framework/data/adonet/sql/authentication-in-sql-server) (Windows only) + +The following example uses the currently logged in Windows user to log in to Microsoft SQL Server: + +``` +sqlserver://localhost:1433;database=sample;integratedSecurity=true;trustServerCertificate=true; +``` + +The following example uses a specific Active Directory user to log in to Microsoft SQL Server: + +``` +sqlserver://localhost:1433;database=sample;integratedSecurity=true;username=prisma;password=aBcD1234;trustServerCertificate=true; +``` + +#### Connect to a named instance + +The following example connects to a named instance of Microsoft SQL Server (`mycomputer\sql2019`) using integrated security: + +``` +sqlserver://mycomputer\sql2019;database=sample;integratedSecurity=true;trustServerCertificate=true; +``` + +## Type mapping between Microsoft SQL Server to Prisma schema + +For type mappings organized by Prisma ORM type, refer to the [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) documentation. + +## Supported versions + +See [Supported databases](/orm/reference/supported-databases). + +## Limitations and known issues + +### Prisma Migrate caveats + +Prisma Migrate is supported in [2.13.0](https://github.com/prisma/prisma/releases/tag/2.13.0) and later with the following caveats: + +#### Database schema names + +SQL Server does not have an equivalent to the PostgreSQL `SET search_path` command familiar from PostgreSQL. This means that when you create migrations, you must define the same schema name in the connection URL that is used by the production database. For most of the users this is `dbo` (the default value). However, if the production database uses another schema name, all the migration SQL must be either edited by hand to reflect the production _or_ the connection URL must be changed before creating migrations (for example: `schema=name`). + +#### Cyclic references + +Circular references can occur between models when each model references another, creating a closed loop. When using a Microsoft SQL Server database, Prisma ORM will show a validation error if the [referential action](/orm/prisma-schema/data-model/relations/referential-actions) on a relation is set to something other than [`NoAction`](/orm/prisma-schema/data-model/relations/referential-actions#noaction). + +See [Special rules for referential actions in SQL Server](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions) for more information. + +#### Destructive changes + +Certain migrations will cause more changes than you might expect. For example: + +- Adding or removing `autoincrement()`. This cannot be achieved by modifying the column, but requires recreating the table (including all constraints, indices, and foreign keys) and moving all data between the tables. +- Additionally, it is not possible to delete all the columns from a table (possible with PostgreSQL or MySQL). If a migration needs to recreate all table columns, it will also re-create the table. + +#### Shared default values are not supported + +In some cases, user might want to define default values as shared objects: + +```sql file=default_objects.sql +CREATE DEFAULT catcat AS 'musti'; + +CREATE TABLE cats ( + id INT IDENTITY PRIMARY KEY, + name NVARCHAR(1000) +); + +sp_bindefault 'catcat', 'dbo.cats.name'; +``` + +Using the stored procedure `sp_bindefault`, the default value `catcat` can be used in more than one table. The way Prisma ORM manages default values is per table: + +```sql file=default_per_table.sql showLineNumbers +CREATE TABLE cats ( + id INT IDENTITY PRIMARY KEY, + name NVARCHAR(1000) CONSTRAINT DF_cat_name DEFAULT 'musti' +); +``` + +The last example, when introspected, leads to the following model: + +```prisma file=schema.prisma showLineNumbers +model cats { + id Int @id @default(autoincrement()) + name String? @default("musti") +} +``` + +And the first doesn't get the default value introspected: + +```prisma file=schema.prisma showLineNumbers +model cats { + id Int @id @default(autoincrement()) + name String? +} +``` + +If using Prisma Migrate together with shared default objects, changes to them must be done manually to the SQL. + +### Data model limitations + +#### Cannot use column with `UNIQUE` constraint and filtered index as foreign key + +Microsoft SQL Server [only allows one `NULL` value in a column that has a `UNIQUE` constraint](https://learn.microsoft.com/en-us/sql/relational-databases/tables/unique-constraints-and-check-constraints?view=sql-server-ver15). For example: + +- A table of users has a column named `license_number` +- The `license_number` field has a `UNIQUE` constraint +- The `license_number` field only allows **one** `NULL` value + +The standard way to get around this issue is to create a filtered unique index that excludes `NULL` values. This allows you to insert multiple `NULL` values. If you do not create an index in the database, you will get an error if you try to insert more than one `null` value into a column with Prisma Client. + +_However_, creating an index makes it impossible to use `license_number` as a foreign key in the database (or a relation scalar field in corresponding Prisma Schema) + +### Raw query considerations + +#### Raw queries with `String @db.VarChar(n)` fields / `VARCHAR(N)` columns + +`String` query parameters in [raw queries](/orm/prisma-client/using-raw-sql/raw-queries) are always encoded to SQL Server as `NVARCHAR(4000)` (if your `String` length is \<= 4000) or `NVARCHAR(MAX)`. If you compare a `String` query parameter to a column of type `String @db.VarChar(N)`/`VARCHAR(N)`, this can lead to implicit conversion on SQL Server which affects your index performance and can lead to high CPU usage. + +Here is an example: +```prisma +model user { + id Int @id + name String @db.VarChar(40) +} +``` +This query would be affected: +```ts +await prisma.$queryRaw`SELECT * FROM user WHERE name = ${"John"}` +``` + +To avoid the problem, we recommend you always manually cast your `String` query parameters to `VARCHAR(N)` in the raw query: +```ts +await prisma.$queryRaw`SELECT * FROM user WHERE name = CAST(${"John"} AS VARCHAR(40))` +``` +This enables SQL Server to perform a Clustered Index Seek instead of a Clustered Index Scan. diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/840-cockroachdb.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/840-cockroachdb.mdx new file mode 100644 index 0000000000..846f1401d4 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/840-cockroachdb.mdx @@ -0,0 +1,223 @@ +--- +title: 'CockroachDB' +metaTitle: 'CockroachDB' +metaDescription: 'Guide to CockroachDB' +tocDepth: 3 +toc: true +--- + + + +This guide discusses the concepts behind using Prisma ORM and CockroachDB, explains the commonalities and differences between CockroachDB and other database providers, and leads you through the process for configuring your application to integrate with CockroachDB. + + + + + +The CockroachDB connector is generally available in versions `3.14.0` and later. It was first added as a [Preview feature](/orm/reference/preview-features) in version [`3.9.0`](https://github.com/prisma/prisma/releases/tag/3.9.0) with support for Introspection, and Prisma Migrate support was added in [`3.11.0`](https://github.com/prisma/prisma/releases/tag/3.11.0). + + + +## What is CockroachDB? + +CockroachDB is a distributed database that is designed for scalability and high availability. Features include: + +- **Compatibility with PostgreSQL:** CockroachDB is compatible with PostgreSQL, allowing interoperability with a large ecosystem of existing products +- **Built-in scaling:** CockroachDB comes with automated replication, failover and repair capabilities to allow easy horizontal scaling of your application + +## Commonalities with other database providers + +CockroachDB is largely compatible with PostgreSQL, and can mostly be used with Prisma ORM in the same way. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- connect to your database, using Prisma ORM's [`cockroachdb` database connector](/orm/overview/databases/cockroachdb) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a CockroachDB database +- use [Prisma Migrate](/orm/prisma-migrate) to migrate your database schema to a new version +- use [Prisma Client](/orm/prisma-client) in your application to query your database in a type safe way based on your Prisma Schema + +## Differences to consider + +There are some CockroachDB-specific differences to be aware of when working with Prisma ORM's `cockroachdb` connector: + +- **Cockroach-specific native types:** Prisma ORM's `cockroachdb` database connector provides support for CockroachDB's native data types. To learn more, see [How to use CockroachDB's native types](#how-to-use-cockroachdbs-native-types). + +- **Creating database keys:** Prisma ORM allows you to generate a unique identifier for each record using the [`autoincrement()`](/orm/reference/prisma-schema-reference#autoincrement) function. For more information, see [How to use database keys with CockroachDB](#how-to-use-database-keys-with-cockroachdb). + +## How to use Prisma ORM with CockroachDB + +This section provides more details on how to use CockroachDB-specific features. + +### How to use CockroachDB's native types + +CockroachDB has its own set of native [data types](https://www.cockroachlabs.com/docs/stable/data-types.html) which are supported in Prisma ORM. For example, CockroachDB uses the `STRING` data type instead of PostgreSQL's `VARCHAR`. + +As a demonstration of this, say you create a `User` table in your CockroachDB database using the following SQL command: + +```sql +CREATE TABLE public."Post" ( + "id" INT8 NOT NULL, + "title" VARCHAR(200) NOT NULL, + CONSTRAINT "Post_pkey" PRIMARY KEY ("id" ASC), + FAMILY "primary" ("id", "title") +); +``` + +After introspecting your database with `npx prisma db pull`, you will have a new `Post` model in your Prisma Schema: + +```prisma file=schema.prisma showLineNumbers +model Post { + id BigInt @id + title String @db.String(200) +} +``` + +Notice that the `title` field has been annotated with `@db.String(200)` — this differs from PostgreSQL where the annotation would be `@db.VarChar(200)`. + +For a full list of type mappings, see our [connector documentation](/orm/overview/databases/cockroachdb#type-mapping-between-cockroachdb-and-the-prisma-schema). + +### How to use database keys with CockroachDB + +When generating unique identifiers for records in a distributed database like CockroachDB, it is best to avoid using sequential IDs – for more information on this, see CockroachDB's [blog post on choosing index keys](https://www.cockroachlabs.com/blog/how-to-choose-db-index-keys/). + +Instead, Prisma ORM provides the [`autoincrement()`](/orm/reference/prisma-schema-reference#autoincrement) attribute function, which uses CockroachDB's [`unique_rowid()` function](https://www.cockroachlabs.com/docs/stable/serial.html) for generating unique identifiers. For example, the following `User` model has an `id` primary key, generated using the `autoincrement()` function: + +```prisma file=schema.prisma showLineNumbers +model User { + id BigInt @id @default(autoincrement()) + name String +} +``` + +For compatibility with existing databases, you may sometimes still need to generate a fixed sequence of integer key values. In these cases, you can use Prisma ORM's inbuilt [`sequence()`](/orm/reference/prisma-schema-reference#sequence) function for CockroachDB. For a list of available options for the `sequence()` function, see our [reference documentation](/orm/reference/prisma-schema-reference#sequence). + +For more information on generating database keys, see CockroachDB's [Primary key best practices](https://www.cockroachlabs.com/docs/v21.2/schema-design-table#primary-key-best-practices) guide. + +## Example + +To connect to a CockroachDB database server, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema](/orm/prisma-schema): + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "cockroachdb" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `cockroachdb` data source connector. +- `url`: Specifies the [connection URL](#connection-details) for the CockroachDB database server. In this case, an [environment variable is used](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) to provide the connection URL. + + + +While `cockroachdb` and `postgresql` connectors are similar, it is mandatory to use the `cockroachdb` connector instead of `postgresql` when connecting to a CockroachDB database from version 5.0.0. + + + +## Connection details + +CockroachDB uses the PostgreSQL format for its connection URL. See the [PostgreSQL connector documentation](/orm/overview/databases/postgresql#connection-details) for details of this format, and the optional arguments it takes. + +## Differences between CockroachDB and PostgreSQL + +The following table lists differences between CockroachDB and PostgreSQL: + +| Issue | Area | Notes | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| By default, the `INT` type is an alias for `INT8` in CockroachDB, whereas in PostgreSQL it is an alias for `INT4`. This means that Prisma ORM will introspect an `INT` column in CockroachDB as `BigInt`, whereas in PostgreSQL Prisma ORM will introspect it as `Int`. | Schema | For more information on the `INT` type, see the [CockroachDB documentation](https://www.cockroachlabs.com/docs/stable/int.html#considerations-for-64-bit-signed-integers) | +| When using `@default(autoincrement())` on a field, CockroachDB will automatically generate 64-bit integers for the row IDs. These integers will be increasing but not consecutive. This is in contrast to PostgreSQL, where generated row IDs are consecutive and start from 1. | Schema | For more information on generated values, see the [CockroachDB documentation](https://www.cockroachlabs.com/docs/stable/serial.html#generated-values-for-modes-rowid-and-virtual_sequence) | +| The `@default(autoincrement())` attribute can only be used together with the `BigInt` field type. | Schema | For more information on generated values, see the [CockroachDB documentation](https://www.cockroachlabs.com/docs/stable/serial.html#generated-values-for-modes-rowid-and-virtual_sequence) | + +## Type mapping limitations in CockroachDB + +The CockroachDB connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma ORM [data model](/orm/prisma-schema/data-model/models) to native column types. These native types are mostly the same as for PostgreSQL — see the [Native type mapping from Prisma ORM to CockroachDB](#native-type-mapping-from-prisma-orm-to-cockroachdb) for details. However, there are some limitations: + +| CockroachDB (Type \| Aliases) | Prisma ORM | Supported | Native database type attribute | Notes | +| ----------------------------- | ---------- | :-------: | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------- | +| `money` | `Decimal` | Not yet | `@db.Money` | Supported in PostgreSQL but [not currently in CockroachDB](https://github.com/cockroachdb/cockroach/issues/41578) | +| `xml` | `String` | Not yet | `@db.Xml` | Supported in PostgreSQL but [not currently in CockroachDB](https://github.com/cockroachdb/cockroach/issues/43355) | +| `jsonb` arrays | `Json[]` | Not yet | N/A | `Json[]` supported in PostgreSQL but [not currently in CockroachDB](https://github.com/cockroachdb/cockroach/issues/23468) | + +## Other limitations + +The following table lists any other current known limitations of CockroachDB compared to PostgreSQL: + +| Issue | Area | Notes | +| ---------------------------------------------------------------------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Primary keys are named `primary` instead of `TABLE_pkey`, the Prisma ORM default. | Introspection | This means that they are introspected as `@id(map: "primary")`. This will be [fixed in CockroachDB 22.1](https://github.com/cockroachdb/cockroach/pull/70604). | +| Foreign keys are named `fk_COLUMN_ref_TABLE` instead of `TABLE_COLUMN_fkey`, the Prisma ORM default. | Introspection | This means that they are introspected as `@relation([...], map: "fk_COLUMN_ref_TABLE")`. This will be [fixed in CockroachDB 22.1](https://github.com/cockroachdb/cockroach/pull/70658) | +| Index types `Hash`, `Gist`, `SpGist` or `Brin` are not supported. | Schema | In PostgreSQL, Prisma ORM allows [configuration of indexes](/orm/prisma-schema/data-model/indexes#configuring-the-access-type-of-indexes-with-type-postgresql) to use the different index access method. CockroachDB only currently supports `BTree` and `Gin`. | +| Pushing to `Enum` types not supported | Client | Pushing to `Enum` types (e.g. `data: { enum { push: "A" }, }`) is currently [not supported in CockroachDB](https://github.com/cockroachdb/cockroach/issues/71388) | +| Searching on `String` fields without a full text index not supported | Client | Searching on `String` fields without a full text index (e.g. `where: { text: { search: "cat & dog", }, },`) is currently [not supported in CockroachDB](https://github.com/cockroachdb/cockroach/issues/7821) | +| Integer division not supported | Client | Integer division (e.g. `data: { int: { divide: 10, }, }`) is currently [not supported in CockroachDB](https://github.com/cockroachdb/cockroach/issues/41448) | +| Limited filtering on `Json` fields | Client | Currently CockroachDB [only supports](https://github.com/cockroachdb/cockroach/issues/49144) `equals` and `not` filtering on `Json` fields | + +## Type mapping between CockroachDB and the Prisma schema + +The CockroachDB connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma ORM [data model](/orm/prisma-schema/data-model/models) as follows to native column types: + +> Alternatively, see the [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma ORM type. + +### Native type mapping from Prisma ORM to CockroachDB + +| Prisma ORM | CockroachDB | +| ---------- | ---------------- | +| `String` | `STRING` | +| `Boolean` | `BOOL` | +| `Int` | `INT4` | +| `BigInt` | `INT8` | +| `Float` | `FLOAT8` | +| `Decimal` | `DECIMAL(65,30)` | +| `DateTime` | `TIMESTAMP(3)` | +| `Json` | `JSONB` | +| `Bytes` | `BYTES` | + +### Mapping from CockroachDB to Prisma ORM types on Introspection + +When introspecting a CockroachDB database, the database types are mapped to Prisma ORM according to the following table: + +| CockroachDB (Type \| Aliases) | Prisma ORM | Supported | Native database type attribute | Notes | +| -------------------------------------------- | ---------- | :-------: | :----------------------------- | :--------------------------------------------------------------------- | +| `INT` \| `BIGINT`, `INTEGER` | `BigInt` | ✔️ | `@db.Int8` | | +| `BOOL` \| `BOOLEAN` | `Bool` | ✔️ | `@db.Bool`\* | | +| `TIMESTAMP` \| `TIMESTAMP WITHOUT TIME ZONE` | `DateTime` | ✔️ | `@db.Timestamp(x)` | | +| `TIMESTAMPTZ` \| `TIMESTAMP WITH TIME ZONE` | `DateTime` | ✔️ | `@db.Timestamptz(x)` | | +| `TIME` \| `TIME WITHOUT TIME ZONE` | `DateTime` | ✔️ | `@db.Time(x)` | | +| `TIMETZ` \| `TIME WITH TIME ZONE` | `DateTime` | ✔️ | `@db.Timetz(x)` | | +| `DECIMAL(p,s)` \| `NUMERIC(p,s)`, `DEC(p,s)` | `Decimal` | ✔️ | `@db.Decimal(x, y)` | | +| `REAL` \| `FLOAT4`, `FLOAT` | `Float` | ✔️ | `@db.Float4` | | +| `DOUBLE PRECISION` \| `FLOAT8` | `Float` | ✔️ | `@db.Float8` | | +| `INT2` \| `SMALLINT` | `Int` | ✔️ | `@db.Int2` | | +| `INT4` | `Int` | ✔️ | `@db.Int4` | | +| `CHAR(n)` \| `CHARACTER(n)` | `String` | ✔️ | `@db.Char(x)` | | +| `"char"` | `String` | ✔️ | `@db.CatalogSingleChar` | Internal type for CockroachDB catalog tables, not meant for end users. | +| `STRING` \| `TEXT`, `VARCHAR` | `String` | ✔️ | `@db.String` | | +| `DATE` | `DateTime` | ✔️ | `@db.Date` | | +| `ENUM` | `enum` | ✔️ | N/A | | +| `INET` | `String` | ✔️ | `@db.Inet` | | +| `BIT(n)` | `String` | ✔️ | `@Bit(x)` | | +| `VARBIT(n)` \| `BIT VARYING(n)` | `String` | ✔️ | `@VarBit` | | +| `OID` | `Int` | ✔️ | `@db.Oid` | | +| `UUID` | `String` | ✔️ | `@db.Uuid` | | +| `JSONB` \| `JSON` | `Json` | ✔️ | `@db.JsonB` | | +| Array types | `[]` | ✔️ | | | + +[Introspection](/orm/prisma-schema/introspection) adds native database types that are **not yet supported** as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) fields: + +```prisma file=schema.prisma showLineNumbers +model Device { + id BigInt @id @default(autoincrement()) + interval Unsupported("INTERVAL") +} +``` + +## More on using CockroachDB with Prisma ORM + +The fastest way to start using CockroachDB with Prisma ORM is to refer to our Getting Started documentation: + +- [Start from scratch](/getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-cockroachdb) +- [Add to existing project](/getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-cockroachdb) + +These tutorials will take you through the process of connecting to CockroachDB, migrating your schema, and using Prisma Client. + +Further reference information is available in the [CockroachDB connector documentation](/orm/overview/databases/cockroachdb). diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/850-planetscale.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/850-planetscale.mdx new file mode 100644 index 0000000000..f8086af39a --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/850-planetscale.mdx @@ -0,0 +1,356 @@ +--- +title: 'PlanetScale' +metaTitle: 'PlanetScale' +metaDescription: 'Guide to PlanetScale' +tocDepth: 3 +toc: true +--- + + + +Prisma and [PlanetScale](https://planetscale.com/) together provide a development arena that optimizes rapid, type-safe development of data access applications, using Prisma's ORM and PlanetScale's highly scalable MySQL-based platform. + +This document discusses the concepts behind using Prisma ORM and PlanetScale, explains the commonalities and differences between PlanetScale and other database providers, and leads you through the process for configuring your application to integrate with PlanetScale. + + + +## What is PlanetScale? + +PlanetScale uses the [Vitess](https://vitess.io/) database clustering system to provide a MySQL-compatible database platform. Features include: + +- **Enterprise scalability.** PlanetScale provides a highly available production database cluster that supports scaling across multiple database servers. This is particularly useful in a serverless context, as it avoids the problem of having to [manage connection limits](/orm/prisma-client/setup-and-configuration/databases-connections#serverless-environments-faas). +- **Database branches.** PlanetScale allows you to create [branches of your database schema](https://planetscale.com/docs/concepts/branching), so that you can test changes on a development branch before applying them to your production database. +- **Support for [non-blocking schema changes](https://planetscale.com/docs/concepts/nonblocking-schema-changes).** PlanetScale provides a workflow that allows users to update database schemas without locking the database or causing downtime. + +## Commonalities with other database providers + +Many aspects of using Prisma ORM with PlanetScale are just like using Prisma ORM with any other relational database. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- use Prisma ORM's existing [`mysql` database connector](/orm/overview/databases/mysql) in your schema, along with the [connection string PlanetScale provides you](https://planetscale.com/docs/concepts/connection-strings) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a database schema in PlanetScale +- use [`db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) to push changes in your schema to the database +- use [Prisma Client](/orm/prisma-client) in your application to talk to the database server at PlanetScale + +## Differences to consider + +PlanetScale's branching model and design for scalability means that there are also a number of differences to consider. You should be aware of the following points when deciding to use PlanetScale with Prisma ORM: + +- **Branching and deploy requests.** PlanetScale provides two types of database branches: _development branches_, which allow you to test out schema changes, and _production branches_, which are protected from direct schema changes. Instead, changes must be first created on a development branch and then deployed to production using a deploy request. Production branches are highly available and include automated daily backups. To learn more, see [How to use branches and deploy requests](#how-to-use-branches-and-deploy-requests). +- **Referential actions and integrity.** To support scaling across multiple database servers, PlanetScale [by default does not use foreign key constraints](https://planetscale.com/docs/learn/operating-without-foreign-key-constraints), which are normally used in relational databases to enforce relationships between data in different tables, and asks users to handle this manually in their applications. However, you can explicitly [enable them in the PlanetScale database settings](https://planetscale.com/docs/concepts/foreign-key-constraints). If you don't enable these explicitly, you can still maintain these relationships in your data and allow the use of [referential actions](/orm/prisma-schema/data-model/relations/referential-actions) by using Prisma ORM's ability to [emulate relations in Prisma Client](/orm/prisma-schema/data-model/relations/relation-mode#emulate-relations-in-prisma-orm-with-the-prisma-relation-mode) with the `prisma` relation mode. For more information, see [How to emulate relations in Prisma Client](#option-1-emulate-relations-in-prisma-client). +- **Creating indexes on foreign keys.** When [emulating relations in Prisma ORM](#option-1-emulate-relations-in-prisma-client) (i.e. when _not_ using foreign key constraints on the database-level), you will need to create dedicated indexes on foreign keys. In a standard MySQL database, if a table has a column with a foreign key constraint, an index is automatically created on that column. When PlanetScale is configured to not use foreign key constraints, these indexes are [currently](https://github.com/prisma/prisma/issues/10611) not created when Prisma Client emulates relations, which can lead to issues with queries not being well optimized. To avoid this, you can create indexes in Prisma ORM. For more information, see [How to create indexes on foreign keys](#2-create-indexes-on-foreign-keys). +- **Making schema changes with `db push`.** When you merge a development branch into your production branch, PlanetScale will automatically compare the two schemas and generate its own schema diff. This means that Prisma ORM's [`prisma migrate`](/orm/prisma-migrate) workflow, which generates its own history of migration files, is not a natural fit when working with PlanetScale. These migration files may not reflect the actual schema changes run by PlanetScale when the branch is merged. + + + + We recommend not using `prisma migrate` when making schema changes with PlanetScale. Instead, we recommend that you use the `prisma db push` command. + + + + For an example of how this works, see [How to make schema changes with `db push`](#how-to-make-schema-changes-with-db-push) + +- **Introspection**. When you introspect on an existing database and you have _not_ enabled [foreign key constraints in your PlanetScale database](#option-2-enable-foreign-key-constraints-in-the-planetscale-database-settings), you will get a schema with no relations, as they are usually defined based on foreign keys that connect tables. In that case, you will need to add the missing relations in manually. For more information, see [How to add in missing relations after Introspection](#how-to-add-in-missing-relations-after-introspection). + +## How to use branches and deploy requests + +When connecting to PlanetScale with Prisma ORM, you will need to use the correct connection string for your branch. The connection URL for a given database branch can be found from your PlanetScale account by going to the overview page for the branch and selecting the 'Connect' dropdown. In the 'Passwords' section, generate a new password and select 'Prisma' from the dropdown to get the Prisma format for the connection URL. See Prisma ORM's [Getting Started guide](/getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-planetscale) for more details of how to connect to a PlanetScale database. + +Every PlanetScale database is created with a branch called `main`, which is initially a development branch that you can use to test schema changes on. Once you are happy with the changes you make there, you can [promote it](https://planetscale.com/docs/concepts/branching#promote-a-branch-to-production) to become a production branch. Note that you can only push new changes to a development branch, so further changes will need to be created on a separate development branch and then later deployed to production using a [deploy request](https://planetscale.com/docs/concepts/branching#promote-a-branch-to-production). + +If you try to push to a production branch, you will get the [error message](/orm/reference/error-reference#p3022) `Direct execution of DDL (Data Definition Language) SQL statements is disabled on this database.` + +## How to use relations (and enable referential integrity) with PlanetScale + +### Option 1: Emulate relations in Prisma Client + +#### 1. Set `relationMode = "prisma"` + +PlanetScale does not use foreign key constraints in its database schema by default. However, Prisma ORM relies on foreign key constraints in the underlying database to enforce referential integrity between models in your Prisma schema. + +In Prisma ORM versions 3.1.1 and later, you can [emulate relations in Prisma Client with the `prisma` relation mode](/orm/prisma-schema/data-model/relations/relation-mode#emulate-relations-in-prisma-orm-with-the-prisma-relation-mode), which avoids the need for foreign key constraints in the database. + +To enable emulation of relations in Prisma Client, set the `relationMode` field to `"prisma"` in the `datasource` block: + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + relationMode = "prisma" +} +``` + + + +The ability to set the relation mode was introduced as part of the `referentialIntegrity` preview feature in Prisma ORM version 3.1.1, and is generally available in Prisma ORM versions 4.8.0 and later.

The `relationMode` field was renamed in Prisma ORM version 4.5.0, and was previously named `referentialIntegrity`. + +
+ +If you use relations in your Prisma schema with the default `"foreignKeys"` option for the `relationMode` field, PlanetScale will error and Prisma ORM output the [P3021 error message](/orm/reference/error-reference#p3021) when it tries to create foreign keys. (In versions before 2.27.0 it will output a raw database error.) + +#### 2. Create indexes on foreign keys + +When [you emulate relations in Prisma Client](#option-1-emulate-relations-in-prisma-client), you need to create your own indexes. As an example of a situation where you would want to add an index, take this schema for a blog with posts and comments: + +```prisma file=schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + content String + likes Int @default(0) + comments Comment[] +} + +model Comment { + id Int @id @default(autoincrement()) + comment String + postId Int + post Post @relation(fields: [postId], references: [id], onDelete: Cascade) +} +``` + +The `postId` field in the `Comment` model refers to the corresponding `id` field in the `Post` model. However this is not implemented as a foreign key in PlanetScale, so the column doesn't have an automatic index. This means that some queries may not be well optimized. For example, if you query for all comments with a certain post `id`, PlanetScale may have to do a full table lookup. This could be slow, and also expensive because PlanetScale's billing model charges for the number of rows read. + +To avoid this, you can define an index on the `postId` field using [Prisma ORM's `@@index` argument](/orm/reference/prisma-schema-reference#index): + +```prisma file=schema.prisma highlight=15;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + content String + likes Int @default(0) + comments Comment[] +} + +model Comment { + id Int @id @default(autoincrement()) + comment String + postId Int + post Post @relation(fields: [postId], references: [id], onDelete: Cascade) + + //add-next-line + @@index([postId]) +} +``` + +You can then add this change to your schema [using `db push`](#how-to-make-schema-changes-with-db-push). + +In versions 4.7.0 and later, Prisma ORM warns you if you have a relation with no index on the relation scalar field. For more information, see [Index validation](/orm/prisma-schema/data-model/relations/relation-mode#index-validation). + + + +One issue to be aware of is that [implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations) cannot have an index added in this way. If query speed or cost is an issue, you may instead want to use an [explicit many-to-many relation](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations) in this case. + + + +### Option 2: Enable foreign key constraints in the PlanetScale database settings + +Support for foreign key constraints in PlanetScale databases has been Generally Available since February 2024. Follow the instructions in the [PlanetScale documentation](https://planetscale.com/docs/concepts/foreign-key-constraints) to enable them in your database. + +You can then use Prisma ORM and define relations in your Prisma schema without the need for extra configuration. + +In that case, you can define a relation as with other database that supports foreign key constraints, for example: + +```prisma file=schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + content String + likes Int @default(0) + comments Comment[] +} + +model Comment { + id Int @id @default(autoincrement()) + comment String + postId Int + post Post @relation(fields: [postId], references: [id], onDelete: Cascade) +} +``` + +With this approach, it is _not_ necessary to: + +- set `relationMode = "prisma"` in your Prisma schema +- define additional indexes on foreign keys + +Also, introspection will automatically create relation fields in your Prisma schema because it can detect the foreign key constraints in the database. + +## How to make schema changes with `db push` + +To use `db push` with PlanetScale, you will first need to [enable emulation of relations in Prisma Client](#option-1-emulate-relations-in-prisma-client). Pushing to your branch without referential emulation enabled will give the [error message](/orm/reference/error-reference#p3021) `Foreign keys cannot be created on this database.` + +As an example, let's say you decide to decide to add a new `excerpt` field to the blog post schema above. You will first need to [create a new development branch and connect to it](#how-to-use-branches-and-deploy-requests). + +Next, add the following to your `schema.prisma` file: + +```prisma file=schema.prisma highlight=5;edit showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + content String + //edit-next-line + excerpt String? + likes Int @default(0) + comments Comment[] +} + +model Comment { + id Int @id @default(autoincrement()) + comment String + postId Int + post Post @relation(fields: [postId], references: [id], onDelete: Cascade) + + @@index([postId]) +} +``` + +To push these changes, navigate to your project directory in your terminal and run + +```terminal +npx prisma db push +``` + +Once you are happy with your changes on your development branch, you can open a deploy request to deploy these to your production branch. + +For more examples, see PlanetScale's tutorial on [automatic migrations with Prisma ORM](https://planetscale.com/docs/prisma/automatic-prisma-migrations) using `db push`. + +## How to add in missing relations after Introspection + +> **Note**: This section is only relevant if you use `relationMode = "prisma"` to emulate foreign key constraints with Prisma ORM. If you enabled foreign key constraints in your PlanetScale database, you can ignore this section. + +After introspecting with `npx prisma db pull`, the schema you get may be missing some relations. For example, the following schema is missing a relation between the `User` and `Post` models: + +```prisma file=schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + title String @db.VarChar(255) + content String? + authorId Int + + @@index([authorId]) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? +} +``` + +In this case you need to add the relation in manually: + +```prisma file=schema.prisma highlight=6,16;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + title String @db.VarChar(255) + content String? + //add-next-line + author User @relation(fields: [authorId], references: [id]) + authorId Int + + @@index([authorId]) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + //add-next-line + posts Post[] +} +``` + +For a more detailed example, see the [Getting Started guide for PlanetScale](/getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-planetscale). + +## How to use the PlanetScale serverless driver with Prisma ORM (Preview) + +The [PlanetScale serverless driver](https://planetscale.com/docs/tutorials/planetscale-serverless-driver) provides a way of communicating with your database and executing queries over HTTP. + +You can use Prisma ORM along with the PlanetScale serverless driver using the [`@prisma/adapter-planetscale`](https://www.npmjs.com/package/@prisma/adapter-planetscale) driver adapter. The driver adapter allows you to communicate with your database over HTTP. + + + +This feature is available in Preview from Prisma ORM versions 5.4.2 and later. + + + +To get started, enable the `driverAdapters` Preview feature flag: + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] +} +``` + +Generate Prisma Client: + +```bash +npx prisma generate +``` + + + +Ensure you update the host value in your connection string to `aws.connect.psdb.cloud`. You can learn more about this [here](https://planetscale.com/docs/tutorials/planetscale-serverless-driver#add-and-use-the-planetscale-serverless-driver-for-javascript-to-your-project). + +```bash +DATABASE_URL='mysql://johndoe:strongpassword@aws.connect.psdb.cloud/clear_nightsky?sslaccept=strict' +``` + + + +Install the Prisma ORM adapter for PlanetScale, PlanetScale serverless driver and `undici` packages: + +```bash +npm install @prisma/adapter-planetscale @planetscale/database undici +``` + + + +When using a Node.js version below 18, you must provide a custom fetch function implementation. We recommend the `undici` package on which Node's built-in fetch is based. Node.js versions 18 and later include a built-in global `fetch` function, so you don't have to install an extra package. + + + +Update your Prisma Client instance to use the PlanetScale serverless driver: + +```ts +import { Client } from '@planetscale/database' +import { PrismaPlanetScale } from '@prisma/adapter-planetscale' +import { PrismaClient } from '@prisma/client' +import dotenv from 'dotenv' +import { fetch as undiciFetch } from 'undici' + +dotenv.config() +const connectionString = `${process.env.DATABASE_URL}` + +const client = new Client({ url: connectionString, fetch: undiciFetch }) +const adapter = new PrismaPlanetScale(client) +const prisma = new PrismaClient({ adapter }) +``` + +You can then use Prisma Client as you normally would with full type-safety. Prisma Migrate, introspection, and Prisma Studio will continue working as before using the connection string defined in the Prisma schema. + +## More on using PlanetScale with Prisma ORM + +The fastest way to start using PlanetScale with Prisma ORM is to refer to our Getting Started documentation: + +- [Start from scratch](/getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-planetscale) +- [Add to existing project](/getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-planetscale) + +These tutorials will take you through the process of connecting to PlanetScale, pushing schema changes, and using Prisma Client. + +For further tips on best practices when using Prisma ORM and PlanetScale together, watch our video: + +
+ + + +
diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/880-supabase.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/880-supabase.mdx new file mode 100644 index 0000000000..92bbc64eb9 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/880-supabase.mdx @@ -0,0 +1,71 @@ +--- +title: 'Supabase' +metaTitle: 'Supabase' +metaDescription: 'Guide to Supabase' +tocDepth: 2 +toc: true +--- + +This guide discusses the concepts behind using Prisma ORM and Supabase, explains the commonalities and differences between Supabase and other database providers, and leads you through the process for configuring your application to integrate with Supabase. + +## What is Supabase? + +[Supabase](https://supabase.com/) is a PostgreSQL hosting service and open source Firebase alternative providing all the backend features you need to build a product. Unlike Firebase, Supabase is backed by PostgreSQL which can be accessed directly using Prisma ORM. + +To learn more about Supabase, you can check out their architecture [here](https://supabase.com/docs/guides/getting-started/architecture) and features [here](https://supabase.com/docs/guides/getting-started/features) + +## Commonalities with other database providers + +Many aspects of using Prisma ORM with Supabase are just like using Prisma ORM with any other relational database. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- use Prisma ORM's existing [`postgresql` database connector](/orm/overview/databases/postgresql) in your schema, along with the [connection string Supabase provides you](https://supabase.com/docs/guides/database/connecting-to-postgres#connecting-to-external-libraries-and-tools) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a database schema in Supabase +- use [`db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) to push changes in your schema to Supabase +- use [Prisma Client](/orm/prisma-client) in your application to talk to the database server at Supabase + +## Specific considerations + +If you'd like to use the [connection pooling feature](https://supabase.com/docs/guides/database/connecting-to-postgres#connection-pooling-in-depth) available with Supabase, you will need to use the connection pooling connection string available via your [Supabase database settings](https://supabase.com/dashboard/project/_/settings/database) with `?pgbouncer=true` appended to the end of your `DATABASE_URL` environment variable: + +```env file=.env +# Connect to Supabase via connection pooling with Supavisor. +DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:6543/postgres?pgbouncer=true" +``` + +If you would like to use the Prisma CLI in order to perform other actions on your database (e.g. migrations) you will need to add a `DIRECT_URL` environment variable to use in the `datasource.directUrl` property so that the CLI can bypass Supavisor: + +```env file=.env highlight=4-5;add showLineNumbers +# Connect to Supabase via connection pooling with Supavisor. +DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:6543/postgres?pgbouncer=true" + +//add-start +# Direct connection to the database. Used for migrations. +DIRECT_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:5432/postgres" +//add-end +``` + +You can then update your `schema.prisma` to use the new direct URL: + +```prisma file=schema.prisma highlight=4;add showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + //add-next-line + directUrl = env("DIRECT_URL") +} +``` + +More information about the `directUrl` field can be found [here](/orm/reference/prisma-schema-reference#fields). + + + +We strongly recommend using connection pooling with Supavisor in addition to `DIRECT_URL`. You will gain the great developer experience of the Prisma CLI while also allowing for connections to be pooled regardless of your deployment strategy. While this is not strictly necessary for every app, serverless solutions will inevitably require connection pooling. + + + +## Getting started with Supabase + +If you're interested in learning more, Supabase has a great guide for connecting a database provided by Supabase to your Prisma project available [here](https://supabase.com/partners/integrations/prisma). + +If you're running into issues integrating with Supabase, check out these [specific troubleshooting tips](https://supabase.com/partners/integrations/prisma) or [Prisma's GitHub Discussions](https://github.com/prisma/prisma/discussions) for more help. diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/890-neon.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/890-neon.mdx new file mode 100644 index 0000000000..20e8220266 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/890-neon.mdx @@ -0,0 +1,198 @@ +--- +title: 'Neon' +metaTitle: 'Neon' +metaDescription: 'Guide to Neon' +tocDepth: 2 +toc: true +--- + + + +This guide explains how to: + +- [Connect Prisma ORM using Neon's connection pooling feature](#how-to-use-neons-connection-pooling) +- [Resolve connection timeout issues](#resolving-connection-timeouts) +- [Use Neon's serverless driver with Prisma ORM](#how-to-use-neons-serverless-driver-with-prisma-orm-preview) + + + +## What is Neon? + +Neon's logo + +[Neon](https://neon.tech/) is a fully managed serverless PostgreSQL with a generous free tier. Neon separates storage and compute, and offers modern developer features such as serverless, branching, bottomless storage, and more. Neon is open source and written in Rust. + +Learn more about Neon [here](https://neon.tech/docs/introduction). + +## Commonalities with other database providers + +Many aspects of using Prisma ORM with Neon are just like using Prisma ORM with any other PostgreSQL database. You can: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- use Prisma ORM's [`postgresql` database connector](/orm/overview/databases/postgresql) in your schema, along with the [connection string Neon provides you](https://neon.tech/docs/connect/connect-from-any-app) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a database schema on Neon +- use [`prisma migrate dev`](/orm/prisma-migrate/workflows/development-and-production) to track schema migrations in your Neon database +- use [`prisma db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) to push changes in your schema to Neon +- use [Prisma Client](/orm/prisma-client) in your application to communicate with the database hosted by Neon + +## Differences to consider + +There are a few differences between Neon and PostgreSQL you should be aware of the following when deciding to use Neon with Prisma ORM: + +- **Neon's serverless model** — By default, Neon scales a [compute](https://neon.tech/docs/introduction/compute-lifecycle) to zero after 5 minutes of inactivity. During this state, a compute instance is in _idle_ state. A characteristic of this feature is the concept of a "cold start". Activating a compute from an idle state takes from 500ms to a few seconds. Depending on how long it takes to connect to your database, your application may timeout. To learn more, see: [Connection latency and timeouts](https://neon.tech/docs/guides/prisma#connection-timeouts). +- **Neon's connection pooler** — Neon offers connection pooling using PgBouncer, enabling up to 10,000 concurrent connections. To learn more, see: [Connection pooling](https://neon.tech/docs/connect/connection-pooling). + +## How to use Neon's connection pooling + +If you would like to use the [connection pooling](https://neon.tech/docs/guides/prisma#use-connection-pooling-with-prisma) available in Neon, you will +need to add `-pooler` in the hostname of your `DATABASE_URL` environment variable used in the `url` property of the `datasource` block of your Prisma schema: + +```env file=.env +# Connect to Neon with Pooling. +DATABASE_URL=postgres://daniel:@ep-mute-rain-952417-pooler.us-east-2.aws.neon.tech:5432/neondb?sslmode=require +``` + +If you would like to use Prisma CLI in order to perform other actions on your database (e.g. for migrations) you will need to add a `DIRECT_URL` environment variable to use in the `directUrl` property of the `datasource` block of your Prisma schema so that the CLI will use a direct connection string (without PgBouncer): + +```env file=.env highlight=4-5;add showLineNumbers +# Connect to Neon with Pooling. +DATABASE_URL=postgres://daniel:@ep-mute-rain-952417-pooler.us-east-2.aws.neon.tech/neondb?sslmode=require + +//add-start +# Direct connection to the database used by Prisma CLI for e.g. migrations. +DIRECT_URL="postgres://daniel:@ep-mute-rain-952417.us-east-2.aws.neon.tech/neondb" +//add-end +``` + +You can then update your `schema.prisma` to use the new direct URL: + +```prisma file=schema.prisma highlight=4;add showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + //add-next-line + directUrl = env("DIRECT_URL") +} +``` + +More information about the `directUrl` field can be found [here](/orm/reference/prisma-schema-reference#fields). + + + +We strongly recommend using the pooled connection string in your `DATABASE_URL` environment variable. You will gain the great developer experience of the Prisma CLI while also allowing for connections to be pooled regardless of deployment strategy. While this is not strictly necessary for every app, serverless solutions will inevitably require connection pooling. + + + +## Resolving connection timeouts + +A connection timeout that occurs when connecting from Prisma ORM to Neon causes an error similar to the following: + +```text no-copy +Error: P1001: Can't reach database server at `ep-white-thunder-826300.us-east-2.aws.neon.tech`:`5432` +Please make sure your database server is running at `ep-white-thunder-826300.us-east-2.aws.neon.tech`:`5432`. +``` + +This error most likely means that the connection created by Prisma Client timed out before the Neon compute was activated. + +A Neon compute has two main states: _Active_ and _Idle_. Active means that the compute is currently running. If there is no query activity for 5 minutes, Neon places a compute into an idle state by default. Refer to Neon's docs to [learn more](https://neon.tech/docs/introduction/compute-lifecycle). + +When you connect to an idle compute from Prisma ORM, Neon automatically activates it. Activation typically happens within a few seconds but added latency can result in a connection timeout. To address this issue, your can adjust your Neon connection string by adding a `connect_timeout` parameter. This parameter defines the maximum number of seconds to wait for a new connection to be opened. The default value is 5 seconds. A higher setting should provide the time required to avoid connection timeout issues. For example: + +```text wrap +DATABASE_URL=postgres://daniel:@ep-mute-rain-952417.us-east-2.aws.neon.tech/neondb?connect_timeout=10 +``` + + + +A `connect_timeout` setting of 0 means no timeout. + + + +Another possible cause of connection timeouts is Prisma ORM's [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool), which has a default timeout of 10 seconds. This is typically enough time for Neon, but if you are still experiencing connection timeouts, you can try increasing this limit (in addition to the `connect_timeout` setting described above) by setting the `pool_timeout` parameter to a higher value. For example: + +```text wrap +DATABASE_URL=postgres://daniel:@ep-mute-rain-952417.us-east-2.aws.neon.tech/neondb?connect_timeout=15&pool_timeout=15 +``` + +## How to use Neon's serverless driver with Prisma ORM (Preview) + +The [Neon serverless driver](https://github.com/neondatabase/serverless) is a low-latency Postgres driver for JavaScript and TypeScript that allows you to query data from serverless and edge environments over HTTP or WebSockets in place of TCP. + +You can use Prisma ORM along with the Neon serverless driver using a [driver adapter](/orm/overview/databases/database-drivers#driver-adapters) . A driver adapter allows you to use a different database driver from the default Prisma ORM provides to communicate with your database. + + + +This feature is available in Preview from Prisma ORM versions 5.4.2 and later. + + + +To get started, enable the `driverAdapters` Preview feature flag: + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Generate Prisma Client: + +```bash +npx prisma generate +``` + +Install the Prisma ORM adapter for Neon, Neon serverless driver and `ws` packages: + +```bash +npm install @prisma/adapter-neon @neondatabase/serverless ws +npm install --save-dev @types/ws +``` + +Update your Prisma Client instance: + +```ts +import { Pool, neonConfig } from '@neondatabase/serverless' +import { PrismaNeon } from '@prisma/adapter-neon' +import { PrismaClient } from '@prisma/client' +import dotenv from 'dotenv' +import ws from 'ws' + +dotenv.config() +neonConfig.webSocketConstructor = ws +const connectionString = `${process.env.DATABASE_URL}` + +const pool = new Pool({ connectionString }) +const adapter = new PrismaNeon(pool) +const prisma = new PrismaClient({ adapter }) +``` + +You can then use Prisma Client as you normally would with full type-safety. Prisma Migrate, introspection, and Prisma Studio will continue working as before, using the connection string defined in the Prisma schema. + +### Notes + +#### Specifying a PostgreSQL schema + +You can specify a [PostgreSQL schema](https://www.postgresql.org/docs/current/ddl-schemas.html) by passing in the `schema` option when instantiating `PrismaNeon`: + +```ts +const adapter = new PrismaNeon(pool, { + schema: 'myPostgresSchema' +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/900-turso.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/900-turso.mdx new file mode 100644 index 0000000000..090ccf8a1a --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/900-turso.mdx @@ -0,0 +1,226 @@ +--- +title: 'Turso' +metaTitle: 'Turso (Early Access)' +metaDescription: 'Guide to Turso' +tocDepth: 3 +--- + +This guide discusses the concepts behind using Prisma ORM and Turso, explains the commonalities and differences between Turso and other database providers, and leads you through the process for configuring your application to integrate with Turso. + +Prisma ORM support for Turso is currently in [Early Access](/orm/more/releases#early-access). We would appreciate your feedback in this [GitHub discussion](https://github.com/prisma/prisma/discussions/21345). + +## What is Turso? + +[Turso](https://turso.tech/) is an edge-hosted, distributed database that's based on [libSQL](https://turso.tech/libsql), an open-source and open-contribution fork of [SQLite](https://sqlite.org/), enabling you to bring data closer to your application and minimize query latency. Turso can also be hosted on a remote server. + + + +Support for Turso is available in [Early Access](/orm/more/releases#early-access) from Prisma ORM versions 5.4.2 and later. + + + +## Commonalities with other database providers + +libSQL is 100% compatible with SQLite. libSQL extends SQLite and adds the following features and capabilities: + +- Support for replication +- Support for automated backups +- Ability to embed Turso as part of other programs such as the Linux kernel +- Supports user-defined functions +- Support for asynchronous I/O + +> To learn more about the differences between libSQL and how it is different from SQLite, see [libSQL Manifesto](https://turso.tech/libsql-manifesto). + +Many aspects of using Prisma ORM with Turso are just like using Prisma ORM with any other relational database. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- use Prisma ORM's existing [`sqlite` database connector](/orm/overview/databases/sqlite) in your schema +- use [Prisma Client](/orm/prisma-client) in your application to talk to the database server at Turso + +## Differences to consider + +There are a number of differences between Turso and SQLite to consider. You should be aware of the following when deciding to use Turso and Prisma ORM: + +- **Remote and embedded SQLite databases**. libSQL uses HTTP to connect to the remote SQLite database. libSQL also supports remote database replicas and embedded replicas. Embedded replicas enable you to replicate your primary database inside your application. +- **Making schema changes**. Since libSQL uses HTTP to connect to the remote database, this makes it incompatible with Prisma Migrate. However, you can use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to create a schema migration and then apply the changes to your database using [Turso's CLI](https://docs.turso.tech/reference/turso-cli). + +## How to connect and query a Turso database + +The subsequent section covers how you can create a Turso database, retrieve your database credentials and connect to your database. + +### How to provision a database and retrieve database credentials + + + +Ensure that you have the [Turso CLI](https://docs.turso.tech/reference/turso-cli) installed to manage your databases. + + + +If you don't have an existing database, you can provision a database by running the following command: + +```terminal +turso db create turso-prisma-db +``` + +The above command will create a database in the closest region to your location. + +Run the following command to retrieve your database's connection string: + +```terminal +turso db show turso-prisma-db +``` + +Next, create an authentication token that will allow you to connect to the database: + +```terminal +turso db tokens create turso-prisma-db +``` + +Update your `.env` file with the authentication token and connection string: + +```text file=.env +TURSO_AUTH_TOKEN="eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9..." +TURSO_DATABASE_URL="libsql://turso-prisma-db-user.turso.io" +``` + +### How to connect to a Turso database + +To get started, enable the `driverAdapters` Preview feature flag: + +```prisma highlight=3;add +generator client { + provider = "prisma-client-js" + //add-next-line + previewFeatures = ["driverAdapters"] +} + +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} +``` + +Generate Prisma Client: + +```terminal +npx prisma generate +``` + +Install the libSQL database client and Prisma ORM driver adapter for libSQL packages: + +```terminal +npm install @libsql/client @prisma/adapter-libsql +``` + +Update your Prisma Client instance: + +```ts +import { PrismaClient } from '@prisma/client' +import { PrismaLibSQL } from '@prisma/adapter-libsql' +import { createClient } from '@libsql/client' + +const libsql = createClient({ + url: `${process.env.TURSO_DATABASE_URL}`, + authToken: `${process.env.TURSO_AUTH_TOKEN}`, +}) + +const adapter = new PrismaLibSQL(libsql) +const prisma = new PrismaClient({ adapter }) +``` + +You can use Prisma Client as you normally would with full type-safety in your project. + +## How to manage schema changes + +Prisma Migrate and Introspection workflows are currently not supported when working with Turso. This is because Turso uses HTTP to connect to your database, which Prisma Migrate doesn't support. + +To update your database schema: + +1. Generate a migration file using `prisma migrate dev` against a local SQLite database: + + ```terminal + npx prisma migrate dev --name init + ``` + +2. Apply the migration using Turso's CLI: + + ```terminal + turso db shell turso-prisma-db < ./prisma/migrations/20230922132717_init/migration.sql + ``` + + + + Replace `20230922132717_init` with the name of your migration. + + + +For subsequent migrations, repeat the above steps to apply changes to your database. This workflow does not support track the history of applied migrations to your remote database. + +## Embedded Turso database replicas + +Turso supports [embedded replicas](https://turso.tech/blog/introducing-embedded-replicas-deploy-turso-anywhere-2085aa0dc242). Turso's embedded replicas enable you to have a copy of your primary, remote database _inside_ your application. Embedded replicas behave similarly to a local SQLite database. Database queries are faster because your database is inside your application. + +### How embedded database replicas work + +When your app initially establishes a connection to your database, the primary database will fulfill the query: + +![Embedded Replica: First remote read](./images/embedded-replica-remote-read.png) + +Turso will (1) create an embedded replica inside your application and (2) copy data from your primary database to the replica so it is locally available: + +![Embedded Replica: Remote DB Copy](./images/embedded-replica-create-replica.png) + +The embedded replica will fulfill subsequent read queries. The libSQL client provides a [`sync()`](https://docs.turso.tech/sdk/ts/reference#manual-sync) method which you can invoke to ensure the embedded replica's data remains fresh. + +![Embedded Replica: Local DB reads](./images/embedded-replica-read.png) + +With embedded replicas, this setup guarantees a responsive application, because the data will be readily available locally and faster to access. + +Like a read replica setup you may be familiar with, write operations are forwarded to the primary remote database and executed before being propagated to all embedded replicas. + +![Embedded Replica: Write operation propagation](./images/embedded-replica-write-propagation.png) + +1. Write operations propagation are forwarded to the database. +1. Database responds to the server with the updates from 1. +1. Write operations are propagated to the database replica. + +Your application's data needs will determine how often you should synchronize data between your remote database and embedded database replica. For example, you can use either middleware functions (e.g. Express and Fastify) or a cron job to synchronize the data. + +### How to synchronize data between your remote database and embedded replica + +To get started using embedded replicas with Prisma ORM, add the `sync()` method from libSQL in your application. The example below shows how you can synchronize data using Express middleware. + +```ts highlight=5-8;add; +import express from 'express' +const app = express() + +// ... the rest of your application code +//add-start +app.use(async (req, res, next) => { + await libsql.sync() + next() +}) +//add-end + +app.listen(3000, () => console.log(`Server ready at http://localhost:3000`)) +``` +It could be also implemented as a [Prisma Client extension](/orm/prisma-client/client-extensions). The below example shows auto-syncing after create, update or delete operation is performed. + +```ts highlight=5-8 +const prisma = new PrismaClient().$extends({ + query: { + $allModels: { + async $allOperations({ operation, model, args, query }) { + const result = await query(args) + + // Synchronize the embedded replica after any write operation + if (['create', 'update', 'delete'].includes(operation)) { + await libsql.sync() + } + + return result + } + } + } +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/950-cloudflare-d1.mdx b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/950-cloudflare-d1.mdx new file mode 100644 index 0000000000..39316a077d --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/950-cloudflare-d1.mdx @@ -0,0 +1,231 @@ +--- +title: 'Cloudflare D1' +metaTitle: 'Cloudflare D1' +metaDescription: 'Guide to Cloudflare D1' +tocDepth: 3 +preview: true +--- + + + +This guide discusses the concepts behind using Prisma ORM and Cloudflare D1, explains the commonalities and differences between Cloudflare D1 and other database providers, and leads you through the process for configuring your application to integrate with Cloudflare D1. + +Prisma ORM support for Cloudflare D1 is currently in [Preview](/orm/more/releases#preview). We would appreciate your feedback [on GitHub](https://github.com/prisma/prisma/discussions/23646). + +If you want to deploy a Cloudflare Worker with D1 and Prisma ORM, follow this [tutorial](/orm/prisma-client/deployment/edge/deploy-to-cloudflare#cloudflare-d1). + + + +## What is Cloudflare D1? + +D1 is Cloudflare's native serverless database and was initially [launched in 2022](https://blog.cloudflare.com/introducing-d1/). It's based on SQLite and can be used when deploying applications with Cloudflare. + +Following Cloudflare's principles of geographic distribution and bringing compute and data closer to application users, D1 supports automatic read-replication. It dynamically manages the number of database instances and locations of read-only replicas based on how many queries a database is getting, and from where. + +For write-operations, queries travel to a single primary instance in order to propagate the changes to all read-replicas and ensure data consistency. + +## Commonalities with other database providers + +D1 is based on SQLite. + +Many aspects of using Prisma ORM with D1 are just like using Prisma ORM with any other relational database. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- use Prisma ORM's existing [`sqlite` database connector](/orm/overview/databases/sqlite) in your schema +- use [Prisma Client](/orm/prisma-client) in your application to talk to the database server at D1 + +## Differences to consider + +There are a number of differences between D1 and SQLite to consider. You should be aware of the following when deciding to use D1 and Prisma ORM: + +- **Local and remote D1 (SQLite) databases**. Cloudflare provides local and remote versions of D1. The [local](https://developers.cloudflare.com/d1/build-with-d1/local-development/) version is managed using the `--local` option of the `wrangler d1` CLI and is located in `.wrangler/state`. The [remote](https://developers.cloudflare.com/d1/build-with-d1/remote-development/) version is managed by Cloudflare and is accessed via HTTP. +- **Making schema changes**. Since D1 uses HTTP to connect to the remote database, this makes it incompatible with some commands of Prisma Migrate, like `prisma migrate dev`. However, you can use D1's [migration system](https://developers.cloudflare.com/d1/reference/migrations/) and the [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) command for your migration workflows. See the [Migration workflows](#migration-workflows) below for more information. + +## How to connect to D1 in Cloudflare Workers or Cloudflare Pages + +When using Prisma ORM with D1, you need to use the `sqlite` database provider and the `@prisma/adapter-d1` [driver adapter](/orm/overview/databases/database-drivers#driver-adapters). + +If you want to deploy a Cloudflare Worker with D1 and Prisma ORM, follow these [step-by-step instructions](/orm/prisma-client/deployment/edge/deploy-to-cloudflare#cloudflare-d1). + +## Migration workflows + +Cloudflare D1 comes with its own [migration system](https://developers.cloudflare.com/d1/reference/migrations/). We recommend that you use this migration system via the `wrangler d1 migrations` command to create and manage migration files on your file system. + +This command doesn't help you in figuring out the SQL statements for creating your database schema that need to be put _inside_ of these migration files though. If you want to query your database using Prisma Client, it's important that your database schema maps to your Prisma schema, this is why it's recommended to generate the SQL statements from your Prisma schema. + +When using D1, you can use the [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) command for that purpose. + +### Creating an initial migration + +The workflow for creating an initial migration looks as follows. Assume you have a fresh D1 instance without any tables. + +#### 1. Update your Prisma data model + +This is your initial version of the Prisma schema that you want to map to your D1 instance: + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? +} +``` + +#### 2. Create migration file using `wrangler` CLI + +Next, you need to create the migration file using the [`wrangler d1 migrations create`](https://developers.cloudflare.com/workers/wrangler/commands/#migrations-create) command: + +```terminal +npx wrangler d1 migrations create __YOUR_DATABASE_NAME__ create_user_table +``` + +Since this is the very first migration, this command will prompt you to also create a `migrations` folder. Note that if you want your migration files to be stored in a different location, you can [customize it using Wrangler](https://developers.cloudflare.com/d1/reference/migrations/#wrangler-customizations). + +Once the command has executed and assuming you have chosen the default `migrations` name for the location of your migration files, the command has created the following folder and file for you: + +```no-copy +migrations/ +└── 0001_create_user_table.sql +``` + +However, before you can apply the migration to your D1 instance, you actually need to put a SQL statement into the currently empty `0001_create_user_table.sql` file. + +#### 3. Generate SQL statements using `prisma migrate diff` + +To generate the initial SQL statement, you can use the `prisma migrate diff` command which compares to _schemas_ (via its `--to-X` and `--from-X` options) and generates the steps that are needed to "evolve" from one to the other. These schemas can be either Prisma or SQL schemas. + +For the initial migration, you can use the special `--from-empty` option though: + +```terminal +npx prisma migrate diff \ + --from-empty \ + --to-schema-datamodel ./prisma/schema.prisma \ + --script \ + --output migrations/0001_create_user_table.sql +``` + +The command above uses the following options: + +- `--from-empty`: The source for the SQL statement is an empty schema. +- `--to-schema-datamodel ./prisma/schema.prisma`: The target for the SQL statement is the data model in `./prisma/schema.prisma`. +- `--script`: Output the result as SQL. If you omit this option, the "migration steps" will be generated in plain English. +- `--output migrations/0001_create_user_table.sql`: Store the result in `migrations/0001_create_user_table.sql`. + +After running this command, `migrations/0001_create_user_table.sql` will have the following contents: + +```sql file=migrations/0001_create_user_table.sql no-copy +-- CreateTable +CREATE TABLE "User" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "email" TEXT NOT NULL, + "name" TEXT +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); +``` + +#### 4. Execute the migration using `wrangler d1 migrations apply` + +Finally, you can apply the migration against your D1 instances. + +For the **local** instance, run: + +```terminal +npx wrangler d1 migrations apply __YOUR_DATABASE_NAME__ --local +``` + +For the **remote** instance, run: + +```terminal +npx wrangler d1 migrations apply __YOUR_DATABASE_NAME__ --remote +``` + +### Evolve your schema with further migrations + +For any further migrations, you can use the same workflow but instead of using `--from-empty`, you'll need to use `--from-local-d1` because your source schema for the `prisma migrate diff` command now is the current schema of that local D1 instance, while the target remains your (then updated) Prisma schema. + +#### 1. Update your Prisma data model + +Assume you have updated your Prisma schema with another model: + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id]) + authorId Int +} +``` + +#### 2. Create migration file using `wrangler` CLI + +Like before, you first need to create the migration file: + +```terminal +npx wrangler d1 migrations create __YOUR_DATABASE_NAME__ create_post_table +``` + +Once the command has executed (again assuming you have chosen the default `migrations` name for the location of your migration files), the command has created a new file inside of the `migrations` folder: + +```no-copy +migrations/ +├── 0001_create_user_table.sql +└── 0002_create_post_table.sql +``` + +As before, you now need to put a SQL statement into the currently empty `0002_create_post_table.sql` file. + +#### 3. Generate SQL statements using `prisma migrate diff` + +As explained above, you now need to use `--from-local-d1` instead of `--from-empty` to specify a source schema: + +```terminal +npx prisma migrate diff \ + --from-local-d1 \ + --to-schema-datamodel ./prisma/schema.prisma \ + --script \ + --output migrations/0002_create_post_table.sql +``` + +The command above uses the following options: + +- `--from-local-d1`: The source for the SQL statement is the local D1 database file. +- `--to-schema-datamodel ./prisma/schema.prisma`: The target for the SQL statement is the data model in `./prisma/schema.prisma`. +- `--script`: Output the result as SQL. If you omit this option, the "migration steps" will be generated in plain English. +- `--output migrations/0002_create_post_table.sql`: Store the result in `migrations/0002_create_post_table.sql`. + +After running this command, `migrations/0002_create_post_table.sql` will have the following contents: + +```sql file=migrations/0002_create_post_table.sql no-copy +-- CreateTable +CREATE TABLE "Post" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "title" TEXT NOT NULL, + "authorId" INTEGER NOT NULL, + CONSTRAINT "Post_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE +); +``` + +#### 4. Execute the migration using `wrangler d1 migrations apply` + +Finally, you can apply the migration against your D1 instances. + +For the **local** instance, run: + +```terminal +npx wrangler d1 migrations apply __YOUR_DATABASE_NAME__ --local +``` + +For the **remote** instance, run: + +```terminal +npx wrangler d1 migrations apply __YOUR_DATABASE_NAME__ --remote +``` diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/drivers/qe-query-engine-adapter.png b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/drivers/qe-query-engine-adapter.png new file mode 100644 index 0000000000000000000000000000000000000000..068f9c76c55f50e87bfd1d6da2b1b735072ff162 GIT binary patch literal 117668 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/embedded-replica-write-propagation.png b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/embedded-replica-write-propagation.png new file mode 100644 index 0000000000000000000000000000000000000000..fa36c873351b01bdc1582ba28cfbefe38e7a060b GIT binary patch literal 89371 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

7$H4~QS-YH5)AOP0yN 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ÌzlT}I50@z87Tm7^~~O! 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 + +Learn about the different databases Prisma ORM supports. + + + +## In this section + + diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/mongodb.png b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/mongodb.png new file mode 100644 index 0000000000000000000000000000000000000000..192f87b08d76e0c0c2e7dac9f5065387c49a4302 GIT binary patch literal 26812 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 XI5E!CL3eoR)oE+!sh6lee(`?*OU^*~ literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/mysql-connection-string.png b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/mysql-connection-string.png new file mode 100644 index 0000000000000000000000000000000000000000..5ded2e0d6fe04979d2d527ca23444f34e942c9a2 GIT binary patch literal 14409 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/600-beyond-prisma-orm.mdx b/versioned_docs/version-legacy/200-orm/050-overview/600-beyond-prisma-orm.mdx new file mode 100644 index 0000000000..9425accd1d --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/600-beyond-prisma-orm.mdx @@ -0,0 +1,170 @@ +--- +title: Beyond Prisma ORM +sidebar_label: Beyond Prisma ORM +description: Prisma ORM addresses many development needs, but Prisma's additional products like Accelerate and Pulse can further enhance performance and real-time capabilities. +--- + +As a Prisma ORM user, you're already experiencing the power of type-safe database queries and intuitive data modeling. When scaling production applications, however, new challenges emerge. As an app matures it’s a given that you’ll begin to experience connection pooling complexities, find ways to effectively cache common queries, or develop sophisticated, event-driven systems to handle real-time or time-sensitive features. + +Instead of spending your valuable time overcoming these challenges, let’s explore how Prisma can help by extending the capabilities of the ORM as your application grows. + +## Boost application performance with Prisma Accelerate + +As your application scales, you'll likely need tools to handle increased traffic efficiently. This often involves implementing connection pooling to manage database connections and caching strategies to reduce database load and improve response times. Prisma Accelerate addresses these needs in a single solution, eliminating the need to set up and manage separate infrastructure. + +Prisma Accelerate is particularly useful for applications deployed to serverless and edge environments (also know as Function-as-a-Service) because these deployments lend themselves towards many orders of magnitude more connections being created than a traditional, long-lived application. For these apps, Prisma Accelerate has the added benefit of protecting your database from day one and keeping your app online [regardless of traffic you experience](https://www.prisma.io/blog/saving-black-friday-with-connection-pooling). + +Try out the [Accelerate speed test](https://accelerate-speed-test.prisma.io/) to see what’s possible. + +### Improve query performance with connection pooling + +Place your connection pooler in one of 15+ global regions, minimizing latency for database operations. Enable high-performance distributed workloads across serverless and edge environments. + +### Reduce query latency and database load with caching + +Cache query results across 300+ global points of presence. Accelerate extends your Prisma Client, offering intuitive, granular control over caching patterns such as `ttl` and `swr` on a per-query basis. + +### Handle scaling traffic with managed infrastructure + +Scale to millions of queries per day without infrastructure changes. Efficiently manage database connections and serve more users with fewer resources. + +### Get started with Accelerate today + +Accelerate integrates seamlessly with your Prisma ORM project through the `@prisma/extension-accelerate` client extension. Get started quickly with our [setup guide](/accelerate/getting-started) and instantly access full edge environment support, connection pooling, and global caching. + +```tsx +import { PrismaClient } from '@prisma/client' +import { withAccelerate } from '@prisma/extension-accelerate' + +// 1. Extend your Prisma Client with the Accelerate extension +const prisma = new PrismaClient().$extends(withAccelerate()) + +// 2. (Optionally) add cache to your Prisma queries +const users = await prisma.user.findMany({ + cacheStrategy: { + ttl: 30, // Consider data fresh for 30 seconds + swr: 60 // Serve stale data for up to 60 seconds while fetching fresh data + } +}) +``` + +To see more examples, visit our [examples repo](https://github.com/prisma/prisma-examples) or try them out yourself with `npx try-prisma`. + +[Sign up for Accelerate](https://console.prisma.io/login) + +## Build real-time, event-driven applications with Prisma Pulse + +HTTP requests resulting in reads and writes to your database is straightforward with Prisma ORM. But what if you wanted to trigger specific code based on events or only run a given function based on changes to your database? + +With Pulse, you can reliably stream database changes directly to your application! No need to constantly poll the database for changes or set up complex infrastructure to achieve this. + +Pulse extends your Prisma Client, giving you an API that allows you to react to database changes as they happen with the same, great developer experience of Prisma ORM. + +```tsx +import { PrismaClient } from '@prisma/client' +import { withPulse } from '@prisma/extension-pulse' + +// Extend your Prisma Client with the Pulse extension +const prisma = new PrismaClient().$extends( + withPulse({ apiKey: process.env.PULSE_API_KEY }) +) + +// You're now ready to develop real-time features with Pulse! +const stream = await prisma.user.stream() + +for await (const event of stream) { + console.log('Received database event:', event) + +} +``` + +:::info + +View the event object and Pulse API: [Pulse API Reference](/pulse/api-reference) + +::: + +### Simplify event-driven workflows + +Remove the need for complicated scheduling and queues and let events arrive directly from your database. + +```tsx +// Stream new users on the `User` model in real-time +const stream = await prisma.user.stream({ + create: {}, // This stream will include any User.create event. + name: 'user-create-events' // Name is optional, but allows you to stop and restart the stream without losing any events. +}); + +for await (let event of stream) { + const { email } = event.created; + + // Send welcome email to user after sign up + await sendWelcomeEmail({ email }); +} +``` + +### Build real-time experiences + +When someone sends a chat message through your app, it’s critical that it’s delivered quickly. Power any real-time functionality with Pulse as the database-event engine. + +```tsx +// Stream unread messages on the `Message` model in real-time +const stream = await prisma.message.stream({ + create: { read: false }, // Filter for unread messages +}); + +for await (let event of stream) { + const { senderId, message, chatId } = event.created; + + // Update the chat UI and send a notification + await sendMessageInChat({ senderId, message, chatId }); +} +``` + +### Keep services in sync + +Synchronize data to external services when your data changes without cluttering your code with extra API calls. + +```tsx +// Stream new orders on the `Order` model in real-time +const stream = await prisma.order.stream({ + create: {}, // This stream will include any User.create event. + name: 'user-create-events' // Name is optional, but allows you to stop and restart the stream without losing any events. +}); + +for await (let event of stream) { + const { orderId, orderItems } = event.created; + + // Update the inventory + await updateExternalInventoryFromOrder({ orderId, orderItems }); +} +``` + +To see more examples, visit our [examples repo](https://github.com/prisma/prisma-examples) or try them out yourself with `npx try-prisma`. + +[Sign up for Pulse](https://console.prisma.io/login). + +## Grow with Prisma + +Both Accelerate and Pulse take features built into Prisma ORM and build upon them by adding additional capabilities like globally-optimized caching and real-time data synchronization. Get started for free the [Prisma Data Platform](https://console.prisma.io/login) and explore how Accelerate and Pulse can help you build scalable, high-performance applications! + +Improving developer experience doesn’t stop at Accelerate and Pulse. Prisma is building and expanding our products to improve every aspect of Data DX and we’d love to hear what you think. Join our community and learn more about our products below. + +Both Accelerate and Pulse build on Prisma ORM through [Prisma Client Extensions](/orm/prisma-client/client-extensions). This opens up features that we couldn’t include in the ORM like globally-optimized caching and real-time data synchronization. Create a free [Prisma Data Platform](https://console.prisma.io/login) account and explore how Accelerate and Pulse can help you build scalable, high-performance applications! + +Improving developer experience doesn’t stop at Accelerate and Pulse. Prisma is building and expanding our products to improve every aspect of Data DX and we’d love to hear what you think. Join our community and learn more about our products below + + +

diff --git a/versioned_docs/version-legacy/200-orm/050-overview/_category_.json b/versioned_docs/version-legacy/200-orm/050-overview/_category_.json new file mode 100644 index 0000000000..42c3080f16 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Overview", + "collapsible": false, + "collapsed": false +} diff --git a/versioned_docs/version-legacy/200-orm/050-overview/index.mdx b/versioned_docs/version-legacy/200-orm/050-overview/index.mdx new file mode 100644 index 0000000000..a2b97e062b --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/050-overview/index.mdx @@ -0,0 +1,12 @@ +--- +title: 'Overview' +metaTitle: 'Overview' +metaDescription: 'Overview' +staticLink: true +hide_table_of_contents: true +--- + + +## In this section + + diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/02-data-sources.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/02-data-sources.mdx new file mode 100644 index 0000000000..fc97d81577 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/02-data-sources.mdx @@ -0,0 +1,42 @@ +--- +title: 'Data sources' +metaTitle: 'Data sources (Reference)' +metaDescription: 'Data sources enable Prisma to connect to your database. This page explains how to configure data sources in your Prisma schema.' +--- + + + +A data source determines how Prisma ORM connects your database, and is represented by the [`datasource`](/orm/reference/prisma-schema-reference#datasource) block in the Prisma schema. The following data source uses the `postgresql` provider and includes a connection URL: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public" +} +``` + +A Prisma schema can only have _one_ data source. However, you can: + +- [Programmatically override a data source `url` when creating your `PrismaClient`](/orm/reference/prisma-client-reference#programmatically-override-a-datasource-url) +- [Specify a different URL for Prisma Migrate's shadow database if you are working with cloud-hosted development databases](/orm/prisma-migrate/understanding-prisma-migrate/shadow-database#cloud-hosted-shadow-databases-must-be-created-manually) + +> **Note**: Multiple provider support was removed in 2.22.0. Please see [Deprecation of provider array notation](https://github.com/prisma/prisma/issues/3834) for more information. + + + +## Securing database connections + +Some data source `provider`s allow you to configure your connection with SSL/TLS, and provide parameters for the `url` to specify the location of certificates. + +- [Configuring an SSL connection with PostgreSQL](/orm/overview/databases/postgresql#configuring-an-ssl-connection) +- [Configuring an SSL connection with MySQL](/orm/overview/databases/mysql#configuring-an-ssl-connection) +- [Configure a TLS connection with Microsoft SQL Server](/orm/overview/databases/sql-server#connection-details) + +Prisma ORM resolves SSL certificates relative to the `./prisma` directory. If your certificate files are located outside that directory, e.g. your project root directory, use relative paths for certificates: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public&sslmode=require&sslcert=../server-ca.pem&sslidentity=../client-identity.p12&sslpassword=" +} +``` diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/03-generators.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/03-generators.mdx new file mode 100644 index 0000000000..1740b2c155 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/03-generators.mdx @@ -0,0 +1,103 @@ +--- +title: 'Generators' +metaTitle: 'Generators (Reference)' +metaDescription: 'Generators in your Prisma schema specify what assets are generated when the `prisma generate` command is invoked. This page explains how to configure generators.' +--- + +A Prisma schema can have one or more generators, represented by the [`generator`](/orm/reference/prisma-schema-reference#generator) block: + +```prisma +generator client { + provider = "prisma-client-js" + output = "./generated/prisma-client-js" +} +``` + +A generator determines which assets are created when you run the `prisma generate` command. The main property `provider` defines which **Prisma Client (language specific)** is created - currently, only `prisma-client-js` is available. Alternatively you can define any npm package that follows our generator specification. Additionally and optionally you can define a custom output folder for the generated assets with `output`. + +## Prisma Client: `prisma-client-js` + +The generator for Prisma's JavaScript Client accepts multiple additional properties: + +- `previewFeatures`: [Preview features](/orm/reference/preview-features) to include +- `binaryTargets`: Engine binary targets for `prisma-client-js` (for example, `debian-openssl-1.1.x` if you are deploying to Ubuntu 18+, or `native` if you are working locally) + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["sample-preview-feature"] + binaryTargets = ["linux-musl"] +} +``` + +### Binary targets + +Prisma Client JS (`prisma-client-js`) uses several [engines](https://github.com/prisma/prisma-engines). Engines are implemented in Rust and are used by Prisma Client in the form of executable, platform dependent engine files. Depending on which platform you are executing your code on, you need the correct file. "Binary targets" are used to define which files should be present for the target platform(s). + +The correct file is particularly important when [deploying](/orm/prisma-client/deployment/deploy-prisma) your application to production, which often differs from your local development environment. + +#### The `native` binary target + +The `native` binary target is special. It doesn't map to a concrete operating system. Instead, when `native` is specified in `binaryTargets`, Prisma Client detects the _current_ operating system and automatically specifies the correct binary target for it. + +As an example, assume you're running **macOS** and you specify the following generator: + +```prisma +generator client { + provider = "prisma-client-js" + binaryTargets = ["native"] +} +``` + +In that case, Prisma Client detects your operating system and finds the right binary file for it based on the [list of supported operating systems](/orm/reference/prisma-schema-reference#binarytargets-options) . +If you use macOS Intel x86 (`darwin`), then the binary file that was compiled for `darwin` will be selected. +If you use macOS ARM64 (`darwin-arm64`), then the binary file that was compiled for `darwin-arm64` will be selected. + +> **Note**: The `native` binary target is the default. You can set it explicitly if you wish to include additional [binary targets](/orm/reference/prisma-schema-reference#binarytargets-options) for deployment to different environments. + +## Community generators + +:::note + +Existing generators or new ones should not be affected if you are using the [`prismaSchemaFolder`](/orm/reference/preview-features/client-preview-features#currently-active-preview-features) preview feature to manage multiple schema files, unless a generator reads the schema manually. + +::: + +The following is a list of community created generators. + +- [`prisma-dbml-generator`](https://notiz.dev/blog/prisma-dbml-generator/): Transforms the Prisma schema into [Database Markup Language](https://dbml.dbdiagram.io/home/) (DBML) which allows for an easy visual representation +- [`prisma-docs-generator`](https://github.com/pantharshit00/prisma-docs-generator): Generates an individual API reference for Prisma Client +- [`prisma-json-schema-generator`](https://github.com/valentinpalkovic/prisma-json-schema-generator): Transforms the Prisma schema in [JSON schema](https://json-schema.org/) +- [`prisma-json-types-generator`](https://github.com/arthurfiorette/prisma-json-types-generator): Adds support for [Strongly Typed `Json`](https://github.com/arthurfiorette/prisma-json-types-generator#readme) fields for all databases. It goes on `prisma-client-js` output and changes the json fields to match the type you provide. Helping with code generators, intellisense and much more. All of that without affecting any runtime code. +- [`typegraphql-prisma`](https://github.com/MichalLytek/typegraphql-prisma#readme): Generates [TypeGraphQL](https://typegraphql.com/) CRUD resolvers for Prisma models +- [`typegraphql-prisma-nestjs`](https://github.com/EndyKaufman/typegraphql-prisma-nestjs#readme): Fork of [`typegraphql-prisma`](https://github.com/MichalLytek/typegraphql-prisma), which also generates CRUD resolvers for Prisma models but for NestJS +- [`prisma-typegraphql-types-gen`](https://github.com/YassinEldeeb/prisma-tgql-types-gen): Generates [TypeGraphQL](https://typegraphql.com/) class types and enums from your prisma type definitions, the generated output can be edited without being overwritten by the next gen and has the ability to correct you when you mess up the types with your edits. +- [`nexus-prisma`](https://github.com/prisma/nexus-prisma/): Allows to project Prisma models to GraphQL via [GraphQL Nexus](https://nexusjs.org/docs/) +- [`prisma-nestjs-graphql`](https://github.com/unlight/prisma-nestjs-graphql): Generates object types, inputs, args, etc. from the Prisma Schema for usage with `@nestjs/graphql` module +- [`prisma-appsync`](https://github.com/maoosi/prisma-appsync): Generates a full-blown GraphQL API for [AWS AppSync](https://aws.amazon.com/appsync/) +- [`prisma-kysely`](https://github.com/valtyr/prisma-kysely): Generates type definitions for Kysely, a TypeScript SQL query builder. This can be useful to perform queries against your database from an edge runtime, or to write more complex SQL queries not possible in Prisma without dropping type safety. +- [`prisma-generator-nestjs-dto`](https://github.com/vegardit/prisma-generator-nestjs-dto): Generates DTO and Entity classes with relation `connect` and `create` options for use with [NestJS Resources](https://docs.nestjs.com/recipes/crud-generator) and [@nestjs/swagger](https://www.npmjs.com/package/@nestjs/swagger) +- [`prisma-erd-generator`](https://github.com/keonik/prisma-erd-generator): Generates an entity relationship diagram +- [`prisma-generator-plantuml-erd`](https://github.com/dbgso/prisma-generator-plantuml-erd/tree/main/packages/generator): Generator to generate ER diagrams for PlantUML. Markdown and Asciidoc documents can also be generated by activating the option. +- [`prisma-class-generator`](https://github.com/kimjbstar/prisma-class-generator): Generates classes from your Prisma Schema that can be used as DTO, Swagger Response, TypeGraphQL and so on. +- [`zod-prisma`](https://github.com/CarterGrimmeisen/zod-prisma): Creates Zod schemas from your Prisma models. +- [`prisma-pothos-types`](https://github.com/hayes/pothos/tree/main/packages/plugin-prisma): Makes it easier to define Prisma-based object types, and helps solve n+1 queries for relations. It also has integrations for the Relay plugin to make defining nodes and connections easy and efficient. +- [`prisma-generator-pothos-codegen`](https://github.com/Cauen/prisma-generator-pothos-codegen): Auto generate input types (for use as args) and auto generate decoupled type-safe base files makes it easy to create customizable objects, queries and mutations for [Pothos](https://pothos-graphql.dev/) from Prisma schema. Optionally generate all crud at once from the base files. +- [`prisma-joi-generator`](https://github.com/omar-dulaimi/prisma-joi-generator): Generate full Joi schemas from your Prisma schema. +- [`prisma-yup-generator`](https://github.com/omar-dulaimi/prisma-yup-generator): Generate full Yup schemas from your Prisma schema. +- [`prisma-class-validator-generator`](https://github.com/omar-dulaimi/prisma-class-validator-generator): Emit TypeScript models from your Prisma schema with class validator validations ready. +- [`prisma-zod-generator`](https://github.com/omar-dulaimi/prisma-zod-generator): Emit Zod schemas from your Prisma schema. +- [`prisma-trpc-generator`](https://github.com/omar-dulaimi/prisma-trpc-generator): Emit fully implemented tRPC routers. +- [`prisma-json-server-generator`](https://github.com/omar-dulaimi/prisma-json-server-generator): Emit a JSON file that can be run with json-server. +- [`prisma-trpc-shield-generator`](https://github.com/omar-dulaimi/prisma-trpc-shield-generator): Emit a tRPC shield from your Prisma schema. +- [`prisma-custom-models-generator`](https://github.com/omar-dulaimi/prisma-custom-models-generator): Emit custom models from your Prisma schema, based on Prisma recommendations. +- [`nestjs-prisma-graphql-crud-gen`](https://github.com/mk668a/nestjs-prisma-graphql-crud-gen): Generate CRUD resolvers from GraphQL schema with NestJS and Prisma. +- [`prisma-generator-dart`](https://github.com/FredrikBorgstrom/abcx3/tree/master/libs/prisma-generator-dart): Generates Dart/Flutter class files with to- and fromJson methods. +- [`prisma-generator-graphql-typedef`](https://github.com/mavvy22/prisma-generator-graphql-typedef): Generates graphql schema. +- [`prisma-markdown`](https://github.com/samchon/prisma-markdown): Generates markdown document composed with ERD diagrams and their descriptions. Supports pagination of ERD diagrams through `@namespace` comment tag. +- [`prisma-models-graph`](https://github.com/dangchinh25/prisma-models-graph): Generates a bi-directional models graph for schema without strict relationship defined in the schema, works via a custom schema annotation. +- [`prisma-generator-fake-data`](https://github.com/luisrudge/prisma-generator-fake-data): Generates realistic-looking fake data for your Prisma models that can be used in unit/integration tests, demos, and more. +- [`prisma-generator-drizzle`](https://github.com/farreldarian/prisma-generator-drizzle): A Prisma generator for generating Drizzle schema with ease. +- [`prisma-generator-express`](https://github.com/multipliedtwice/prisma-generator-express): Generates Express CRUD and Router generator function. +- [`prismabox`](https://github.com/m1212e/prismabox): Generates versatile [typebox](https://github.com/sinclairzx81/typebox) schema from your Prisma models. +- [`prisma-generator-typescript-interfaces`](https://github.com/mogzol/prisma-generator-typescript-interfaces): Generates zero-dependency TypeScript interfaces from your Prisma schema. diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/04-location.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/04-location.mdx new file mode 100644 index 0000000000..ce40444b4f --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/04-location.mdx @@ -0,0 +1,121 @@ +--- +title: Schema location +metaTitle: Prisma Schema Location and Configuration +metaDescription: Documentation regarding proper location of Prisma Schema including default naming and multiple files. +--- + +The default name for the Prisma Schema is a single file `schema.prisma` in your `prisma` folder. When your schema is named like this, the Prisma CLI will detect it automatically. + +> If you are using the [`prismaSchemaFolder` preview feature](#multi-file-prisma-schema) any files in the `prisma/schema` directory are detected automatically. + +## Prisma Schema location + +The Prisma CLI looks for the Prisma Schema in the following locations, in the following order: + +1. The location specified by the [`--schema` flag](/orm/reference/prisma-cli-reference), which is available when you `introspect`, `generate`, `migrate`, and `studio`: + + ```terminal + prisma generate --schema=./alternative/schema.prisma + ``` + +2. The location specified in the `package.json` file (version 2.7.0 and later): + + ```json + "prisma": { + "schema": "db/schema.prisma" + } + ``` + +3. Default locations: + + - `./prisma/schema.prisma` + - `./schema.prisma` + +The Prisma CLI outputs the path of the schema that will be used. The following example shows the terminal output for `prisma db pull`: + +```no-lines +Environment variables loaded from .env +//highlight-next-line +Prisma Schema loaded from prisma/schema.prisma + +Introspecting based on datasource defined in prisma/schema.prisma … + +✔ Introspected 4 models and wrote them into prisma/schema.prisma in 239ms + +Run prisma generate to generate Prisma Client. +``` + +## Multi-file Prisma Schema + +:::tip + +Multi-file Prisma Schema is available via the `prismaSchemaFolder` preview feature in Prisma versions 5.15.0 and later. + +::: + +To use multiple Prisma Schema files, add a `schema` folder inside of your current `prisma` directory. With the `prismaSchemaFolder` Preview feature enabled, you can add as many files as you want to the `prisma/schema` directory. +``` +my-app/ +├─ ... +├─ prisma/ +│ ├─ schema/ +│ │ ├─ post.prisma +│ │ ├─ schema.prisma +│ │ ├─ user.prisma +├─ ... +``` + +### How to enable multi-file Prisma schema support + +Support for multiple Prisma Schema files is currently in preview. To enable the feature, add the `prismaSchemaFolder` feature flag to the `previewFeatures` field of the `generator` block in your Prisma Schema: + +```prisma file=schema.prisma showLineNumbers +generator client { + provider = "prisma-client-js" + //add-next-line + previewFeatures = ["prismaSchemaFolder"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +:::info + +When first updating to Prisma ORM 5.15.0 or later, your IDE may not recognize the new multi-file format immediately. Be sure to restart your IDE to confirm you have the latest version of the Prisma VS Code Extension installed. + +::: + +### How to use existing Prisma CLI commands with multiple Prisma schema files + +For most Prisma CLI commands, no changes will be necessary to work with a multi-file Prisma schema. Only in the specific cases where you need to supply a schema via an option will a command need to be changed. In these cases, simply replace references to a file with a directory. As an example, the following `prisma db push` command: + +```terminal +npx prisma db push --schema custom/path/to/my/schema.prisma +``` + +becomes the following: + +```terminal +npx prisma db push --schema custom/path/to/my/schema # note this is now a directory! +``` + +### Tips for multi-file Prisma Schema + +We’ve found that a few patterns work well with this feature and will help you get the most out of it: + +- Organize your files by domain: group related models into the same file. For example, keep all user-related models in `user.prisma` while post-related models go in `post.prisma`. Try to avoid having “kitchen sink” schema files. + +- Use clear naming conventions: schema files should be named clearly and succinctly. Use names like `user.prisma` and `post.prisma` and not `myModels.prisma` or `CommentFeaturesSchema.prisma`. + +- Have an obvious “main” schema file: while you can now have as many schema files as you want, you’ll still need a place where you define `datasource` and `generator` blocks. We recommend having a single schema file that’s obviously the “main” file so that these blocks are easy to find. `main.prisma`, `schema.prisma`, and `base.prisma` are a few we’ve seen that work well. + +### Examples + +Our fork of [`dub` by dub.co](https://github.com/prisma/dub) is a great example of a real world project adapted to use a multi-file Prisma Schema. + +### Learn more about the `prismaSchemaFolder` preview feature + +To give feedback on the `prismaSchemaFolder` Preview feature, please refer to [our dedicated Github discussion](https://github.com/prisma/prisma/discussions/24413). diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/index.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/index.mdx new file mode 100644 index 0000000000..ea948299d6 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/10-overview/index.mdx @@ -0,0 +1,262 @@ +--- +title: 'Overview' +metaTitle: 'Prisma Schema Overview' +metaDescription: 'The Prisma schema is the main method of configuration when using Prisma. It is typically called schema.prisma and contains your database connection and data model.' +--- + +The Prisma Schema (or _schema_ for short) is the main method of configuration for your Prisma ORM setup. It consists of the following parts: + +- [**Data sources**](/orm/prisma-schema/overview/data-sources): Specify the details of the data sources Prisma ORM should connect to (e.g. a PostgreSQL database) +- [**Generators**](/orm/prisma-schema/overview/generators): Specifies what clients should be generated based on the data model (e.g. Prisma Client) +- [**Data model definition**](/orm/prisma-schema/data-model): Specifies your application [models](/orm/prisma-schema/data-model/models#defining-models) (the shape of the data per data source) and their [relations](/orm/prisma-schema/data-model/relations) + +It is typically a single file called `schema.prisma` (or multiple files with `.prisma` file extension) that is stored in a defined but customizable [location](/orm/prisma-schema/overview/location). + +:::note + +Looking to split your schema into multiple files? Multi-file Prisma Schema is supported via the [`prismaSchemaFolder` preview feature](/orm/prisma-schema/overview/location#multi-file-prisma-schema) in Prisma ORM 5.15.0 and later. + +::: + +See the [Prisma schema API reference](/orm/reference/prisma-schema-reference) for detailed information about each section of the schema. + +Whenever a `prisma` command is invoked, the CLI typically reads some information from the schema, e.g.: + +- `prisma generate`: Reads _all_ above mentioned information from the Prisma schema to generate the correct data source client code (e.g. Prisma Client). +- `prisma migrate dev`: Reads the data sources and data model definition to create a new migration. + +You can also [use environment variables](#accessing-environment-variables-from-the-schema) inside the schema to provide configuration options when a CLI command is invoked. + +## Example + +The following is an example of a Prisma Schema that specifies: + +- A data source (PostgreSQL or MongoDB) +- A generator (Prisma Client) +- A data model definition with two models (with one relation) and one `enum` +- Several [native data type attributes](/orm/prisma-schema/data-model/models#native-types-mapping) (`@db.VarChar(255)`, `@db.ObjectId`) + + + + +```prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + email String @unique + name String? + role Role @default(USER) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + published Boolean @default(false) + title String @db.VarChar(255) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +enum Role { + USER + ADMIN +} +``` + + + + +```prisma +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + email String @unique + name String? + role Role @default(USER) + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + published Boolean @default(false) + title String + author User? @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId +} + +enum Role { + USER + ADMIN +} +``` + + + + +## Syntax + +Prisma Schema files are written in Prisma Schema Language (PSL). See the [data sources](/orm/prisma-schema/overview/data-sources), [generators](/orm/prisma-schema/overview/generators), [data model definition](/orm/prisma-schema/data-model) and of course [Prisma Schema API reference](/orm/reference/prisma-schema-reference) pages for details and examples. + +### VS Code + +Syntax highlighting for PSL is available via a [VS Code extension](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma) (which also lets you auto-format the contents of your Prisma schema and indicates syntax errors with red squiggly lines). Learn more about [setting up Prisma ORM in your editor](/orm/more/development-environment/editor-setup). + +### GitHub + +PSL code snippets on GitHub can be rendered with syntax highlighting as well by using the `.prisma` file extension or annotating fenced code blocks in Markdown with `prisma`: + +```` +```prisma +model User { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + email String @unique + name String? +} +``` +```` + +## Accessing environment variables from the schema + +You can use environment variables to provide configuration options when a CLI command is invoked, or a Prisma Client query is run. + +Hardcoding URLs directly in your schema is possible but is discouraged because it poses a security risk. Using environment variables in the schema allows you to **keep secrets out of the schema** which in turn **improves the portability of the schema** by allowing you to use it in different environments. + +Environment variables can be accessed using the `env()` function: + +```prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +You can use the `env()` function in the following places: + +- A datasource url +- Generator binary targets + +See [Environment variables](/orm/more/development-environment/environment-variables) for more information about how to use an `.env` file during development. + +## Comments + +There are two types of comments that are supported in Prisma Schema Language: + +- `// comment`: This comment is for the reader's clarity and is not present in the abstract syntax tree (AST) of the schema. +- `/// comment`: These comments will show up in the abstract syntax tree (AST) of the schema as descriptions to AST nodes. Tools can then use these comments to provide additional information. All comments are attached to the next available node - [free-floating comments](https://github.com/prisma/prisma/issues/3544) are not supported and are not included in the AST. + +Here are some different examples: + +```prisma +/// This comment will get attached to the `User` node in the AST +model User { + /// This comment will get attached to the `id` node in the AST + id Int @default(autoincrement()) + // This comment is just for you + weight Float /// This comment gets attached to the `weight` node +} + +// This comment is just for you. It will not +// show up in the AST. + +/// This comment will get attached to the +/// Customer node. +model Customer {} +``` + +## Auto formatting + +Prisma ORM supports formatting `.prisma` files automatically. There are two ways to format `.prisma` files: + +- Run the [`prisma format`](/orm/reference/prisma-cli-reference#format) command. +- Install the [Prisma VS Code extension](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma) and invoke the [VS Code format action](https://code.visualstudio.com/docs/editor/codebasics#_formatting) - manually or on save. + +There are no configuration options - [formatting rules](#formatting-rules) are fixed (similar to Golang's `gofmt` but unlike Javascript's `prettier`): + +### Formatting rules + +#### Configuration blocks are aligned by their `=` sign. + +``` +block _ { + key = "value" + key2 = 1 + long_key = true +} +``` + +A newline resets block alignment: + +``` +block _ { + key = "value" + key2 = 1 + key10 = true + + long_key = true + long_key_2 = true +} +``` + +#### Field definitions are aligned into columns separated by 2 or more spaces + +``` +block _ { + id String @id + first_name LongNumeric @default +} +``` + +#### Multiline field attributes are properly aligned with the rest of the field attributes + +``` +block _ { + id String @id + @default + first_name LongNumeric @default +} +``` + +A newline resets formatting rules: + +``` +block _ { + id String @id + @default + + first_name LongNumeric @default +} + +``` + +#### Block attributes are sorted to the end of the block + +``` +block _ { + key = "value" + + @@attribute +} +``` diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/10-models.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/10-models.mdx new file mode 100644 index 0000000000..fa4b9d6329 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/10-models.mdx @@ -0,0 +1,1224 @@ +--- +title: 'Models' +metaTitle: 'Models' +metaDescription: 'Learn about the concepts for building your data model with Prisma: Models, scalar types, enums, attributes, functions, IDs, default values and more.' +tocDepth: 3 +--- + +The data model definition part of the [Prisma schema](/orm/prisma-schema) defines your application models (also called **Prisma models**). Models: + +- Represent the **entities** of your application domain +- Map to the **tables** (relational databases like PostgreSQL) or **collections** (MongoDB) in your database +- Form the foundation of the **queries** available in the generated [Prisma Client API](/orm/prisma-client) +- When used with TypeScript, Prisma Client provides generated **type definitions** for your models and any [variations](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types) of them to make database access entirely type safe. + +The following schema describes a blogging platform - the data model definition is highlighted: + + + + +```prisma highlight=10-46;normal +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +//highlight-start +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + bio String + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int + categories Category[] +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] +} + +enum Role { + USER + ADMIN +} +//highlight-end +``` + + + + +```prisma highlight=10-45;normal +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +//highlight-start +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + bio String + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + categoryIDs String[] @db.ObjectId + categories Category[] @relation(fields: [categoryIDs], references: [id]) +} + +model Category { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + postIDs String[] @db.ObjectId + posts Post[] @relation(fields: [postIDs], references: [id]) +} + +enum Role { + USER +//highlight-end + ADMIN +} +``` + + + + +The data model definition is made up of: + +- [Models](#defining-models) ([`model`](/orm/reference/prisma-schema-reference#model) primitives) that define a number of fields, including [relations between models](#relation-fields) +- [Enums](#defining-enums) ([`enum`](/orm/reference/prisma-schema-reference#enum) primitives) (if your connector supports Enums) +- [Attributes](#defining-attributes) and [functions](#using-functions) that change the behavior of fields and models + +The corresponding database looks like this: + +![Sample database](/img/orm/sample-database.png) + +
+ +A model maps to the underlying structures of the data source. + +- In relational databases like PostgreSQL and MySQL, a `model` maps to a **table** +- In MongoDB, a `model` maps to a **collection** + +> **Note**: In the future there might be connectors for non-relational databases and other data sources. For example, for a REST API it would map to a _resource_. + +
+ +The following query uses Prisma Client that's generated from this data model to create: + +- A `User` record +- Two nested `Post` records +- Three nested `Category` records + + + + + +```ts +const user = await prisma.user.create({ + data: { + email: 'ariadne@prisma.io', + name: 'Ariadne', + posts: { + create: [ + { + title: 'My first day at Prisma', + categories: { + create: { + name: 'Office', + }, + }, + }, + { + title: 'How to connect to a SQLite database', + categories: { + create: [{ name: 'Databases' }, { name: 'Tutorials' }], + }, + }, + ], + }, + }, +}) +``` + + + + + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient({}) + +// A `main` function so that you can use async/await +async function main() { + // Create user, posts, and categories + const user = await prisma.user.create({ + data: { + email: 'ariadne@prisma.io', + name: 'Ariadne', + posts: { + create: [ + { + title: 'My first day at Prisma', + categories: { + create: { + name: 'Office', + }, + }, + }, + { + title: 'How to connect to a SQLite database', + categories: { + create: [{ name: 'Databases' }, { name: 'Tutorials' }], + }, + }, + ], + }, + }, + }) + + // Return user, and posts, and categories + const returnUser = await prisma.user.findUnique({ + where: { + id: user.id, + }, + include: { + posts: { + include: { + categories: true, + }, + }, + }, + }) + + console.log(returnUser) +} + +main() +``` + + + + + +Your data model reflects _your_ application domain. For example: + +- In an **ecommerce** application you probably have models like `Customer`, `Order`, `Item` and `Invoice`. +- In a **social media** application you probably have models like `User`, `Post`, `Photo` and `Message`. + +## Introspection and migration + +There are two ways to define a data model: + +- **Write the data model manually and use Prisma Migrate**: You can write your data model manually and map it to your database using [Prisma Migrate](/orm/prisma-migrate). In this case, the data model is the single source of truth for the models of your application. +- **Generate the data model via introspection**: When you have an existing database or prefer migrating your database schema with SQL, you generate the data model by [introspecting](/orm/prisma-schema/introspection) your database. In this case, the database schema is the single source of truth for the models of your application. + +## Defining models + +Models represent the entities of your application domain. Models are represented by [`model`](/orm/reference/prisma-schema-reference#model) blocks and define a number of [fields](/orm/reference/prisma-schema-reference#model-fields). In the example data model above, `User`, `Profile`, `Post` and `Category` are models. + +A blogging platform can be extended with the following models: + +```prisma +model Comment { + // Fields +} + +model Tag { + // Fields +} +``` + +### Mapping model names to tables or collections + +Prisma model [naming conventions (singular form, PascalCase)](/orm/reference/prisma-schema-reference#naming-conventions) do not always match table names in the database. A common approach for naming tables/collections in databases is to use plural form and [snake_case](https://en.wikipedia.org/wiki/Snake_case) notation - for example: `comments`. When you introspect a database with a table named `comments`, the result Prisma model will look like this: + +```prisma +model comments { + // Fields +} +``` + +However, you can still adhere to the naming convention without renaming the underlying `comments` table in the database by using the [`@@map`](/orm/reference/prisma-schema-reference#map-1) attribute: + +```prisma +model Comment { + // Fields + + @@map("comments") +} +``` + +With this model definition, Prisma ORM automatically maps the `Comment` model to the `comments` table in the underlying database. + +> **Note**: You can also [`@map`](/orm/reference/prisma-schema-reference#map) a column name or enum value, and `@@map` an enum name. + +`@map` and `@@map` allow you to [tune the shape of your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names#using-map-and-map-to-rename-fields-and-models-in-the-prisma-client-api) by decoupling model and field names from table and column names in the underlying database. + +
+ + + +
+ +## Defining fields + +The properties of a model are called _fields_, which consist of: + +- A **[field name](/orm/reference/prisma-schema-reference#model-fields)** +- A **[field type](/orm/reference/prisma-schema-reference#model-fields)** +- Optional **[type modifiers](#type-modifiers)** +- Optional **[attributes](#defining-attributes)**, including [native database type attributes](#native-types-mapping) + +A field's type determines its _structure_, and fits into one of two categories: + +- [Scalar types](#scalar-fields) (includes [enums](#defining-enums)) that map to columns (relational databases) or document fields (MongoDB) in the database - for example, [`String`](/orm/reference/prisma-schema-reference#string) or [`Int`](/orm/reference/prisma-schema-reference#int) +- Model types (the field is then called [relation field](/orm/prisma-schema/data-model/relations#relation-fields)) - for example `Post` or `Comment[]`. + +The following table describes `User` model's fields from the sample schema: + +
+ +Expand to see table + +| Name | Type | Scalar vs Relation | Type modifier | Attributes | +| :-------- | :-------- | :---------------------------- | :------------ | :------------------------------------ | +| `id` | `Int` | Scalar | - | `@id` and `@default(autoincrement())` | +| `email` | `String` | Scalar | - | `@unique` | +| `name` | `String` | Scalar | `?` | - | +| `role` | `Role` | Scalar (`enum`) | - | `@default(USER)` | +| `posts` | `Post` | Relation (Prisma-level field) | `[]` | - | +| `profile` | `Profile` | Relation (Prisma-level field) | `?` | - | + +
+ +### Scalar fields + +The following example extends the `Comment` and `Tag` models with several scalar types. Some fields include [attributes](#defining-attributes): + + + + +```prisma highlight=2-4,8;normal +model Comment { + //highlight-start + id Int @id @default(autoincrement()) + title String + content String + //highlight-end +} + +model Tag { + //highlight-next-line + name String @id +} +``` + + + + +```prisma highlight=2-4,8;normal +model Comment { + //highlight-start + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + content String + //highlight-end +} + +model Tag { + //highlight-next-line + name String @id @map("_id") +} +``` + + + + +See [complete list of scalar field types](/orm/reference/prisma-schema-reference#model-field-scalar-types) . + +### Relation fields + +A relation field's type is another model - for example, a post (`Post`) can have multiple comments (`Comment[]`): + + + + +```prisma highlight=4,10;normal +model Post { + id Int @id @default(autoincrement()) + // Other fields + //highlight-next-line + comments Comment[] // A post can have many comments +} + +model Comment { + id Int + // Other fields + //highlight-next-line + post Post? @relation(fields: [postId], references: [id]) // A comment can have one post + postId Int? +} +``` + + + + +```prisma highlight=4,10;normal +model Post { + id String @id @default(auto()) @map("_id") @db.Objectid + // Other fields + //highlight-next-line + comments Comment[] // A post can have many comments +} + +model Comment { + id String @id @default(auto()) @map("_id") @db.Objectid + // Other fields + //highlight-next-line + post Post? @relation(fields: [postId], references: [id]) // A comment can have one post + postId String? @db.ObjectId +} +``` + + + + +Refer to the [relations documentation](/orm/prisma-schema/data-model/relations) for more examples and information about relationships between models. + +### Native types mapping + +Version [2.17.0](https://github.com/prisma/prisma/releases/tag/2.17.0) and later support **native database type attributes** (type attributes) that describe the underlying database type: + +```prisma highlight=3;normal +model Post { + id Int @id + //highlight-next-line + title String @db.VarChar(200) + content String +} +``` + +Type attributes are: + +- Specific to the underlying provider - for example, PostgreSQL uses `@db.Boolean` for `Boolean` whereas MySQL uses `@db.TinyInt(1)` +- Written in PascalCase (for example, `VarChar` or `Text`) +- Prefixed by `@db`, where `db` is the name of the `datasource` block in your schema + +Furthermore, during [Introspection](/orm/prisma-schema/introspection) type attributes are _only_ added to the schema if the underlying native type is **not the default type**. For example, if you are using the PostgreSQL provider, `String` fields where the underlying native type is `text` will not have a type attribute. + +See [complete list of native database type attributes per scalar type and provider](/orm/reference/prisma-schema-reference#model-field-scalar-types) . + +#### Benefits and workflows + +- Control **the exact native type** that [Prisma Migrate](/orm/prisma-migrate) creates in the database - for example, a `String` can be `@db.VarChar(200)` or `@db.Char(50)` +- See an **enriched schema** when you introspect + +### Type modifiers + +The type of a field can be modified by appending either of two modifiers: + +- [`[]`](/orm/reference/prisma-schema-reference#-modifier) Make a field a list +- [`?`](/orm/reference/prisma-schema-reference#-modifier-1) Make a field optional + +> **Note**: You **cannot** combine type modifiers - optional lists are not supported. + +#### Lists + +The following example includes a scalar list and a list of related models: + + + + +```prisma highlight=4,5;normal +model Post { + id Int @id @default(autoincrement()) + // Other fields + //highlight-start + comments Comment[] // A list of comments + keywords String[] // A scalar list + //highlight-end +} +``` + + + + +```prisma highlight=4,5;normal +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + // Other fields + //highlight-start + comments Comment[] // A list of comments + keywords String[] // A scalar list + //highlight-end +} +``` + + + + +> **Note**: Scalar lists are **only** supported if the database connector supports scalar lists, either natively or at a Prisma ORM level. + +#### Optional and mandatory fields + + + + +```prisma highlight=4;normal +model Comment { + id Int @id @default(autoincrement()) + title String + //highlight-next-line + content String? +} + +model Tag { + name String @id +} +``` + + + + +```prisma highlight=4;normal +model Comment { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + //highlight-next-line + content String? +} + +model Tag { + name String @id @map("_id") +} +``` + + + + +When **not** annotating a field with the `?` type modifier, the field will be _required_ on every record of the model. This has effects on two levels: + +- **Databases** + - **Relational databases**: Required fields are represented via `NOT NULL` constraints in the underlying database. + - **MongoDB**: Required fields are not a concept on a MongoDB database level. +- **Prisma Client**: Prisma Client's generated [TypeScript types](#type-definitions) that represent the models in your application code will also define these fields as required to ensure they always carry values at runtime. + +> **Note**: The default value of an optional field is `null`. + +### Unsupported types + +When you introspect a relational database, unsupported data types are added as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) : + +```prisma +location Unsupported("POLYGON")? +``` + +The `Unsupported` type allows you to define fields in the Prisma schema for database types that are not yet supported by Prisma ORM. For example, MySQL's `POLYGON` type is not currently supported by Prisma ORM, but can now be added to the Prisma schema using the `Unsupported("POLYGON")` type. + +Fields of type `Unsupported` do not appear in the generated Prisma Client API, but you can still use Prisma ORM’s [raw database access feature](/orm/prisma-client/using-raw-sql/raw-queries) to query these fields. + +> **Note**: If a model has **mandatory `Unsupported` fields**, the generated client will not include `create` or `update` methods for that model. + +> **Note**: The MongoDB connector does not support nor require the `Unsupported` type because it supports all scalar types. + +## Defining attributes + +Attributes modify the behavior of fields or model blocks. The following example includes three field attributes ([`@id`](/orm/reference/prisma-schema-reference#id) , [`@default`](/orm/reference/prisma-schema-reference#default) , and [`@unique`](/orm/reference/prisma-schema-reference#unique) ) and one block attribute ([`@@unique`](/orm/reference/prisma-schema-reference#unique-1)): + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + firstName String + lastName String + email String @unique + isAdmin Boolean @default(false) + + @@unique([firstName, lastName]) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + firstName String + lastName String + email String @unique + isAdmin Boolean @default(false) + + @@unique([firstName, lastName]) +} +``` + + + + +Some attributes accept [arguments](/orm/reference/prisma-schema-reference#attribute-argument-types) - for example, `@default` accepts `true` or `false`: + +```prisma +isAdmin Boolean @default(false) // short form of @default(value: false) +``` + +See [complete list of field and block attributes](/orm/reference/prisma-schema-reference#attributes) + +### Defining an ID field + +An ID uniquely identifies individual records of a model. A model can only have _one_ ID: + +- In **relational databases**, the ID can be a single field or based on multiple fields. If a model does not have an `@id` or an `@@id`, you must define a mandatory `@unique` field or `@@unique` block instead. +- In **MongoDB**, an ID must be a single field that defines an `@id` attribute and a `@map("_id")` attribute. + +#### Defining IDs in relational databases + +In relational databases, an ID can be defined by a single field using the [`@id`](/orm/reference/prisma-schema-reference#id) attribute, or multiple fields using the [`@@id`](/orm/reference/prisma-schema-reference#id-1) attribute. + +##### Single field IDs + +In the following example, the `User` ID is represented by the `id` integer field: + +```prisma highlight=2;normal +model User { + //highlight-next-line + id Int @id @default(autoincrement()) + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} +``` + +##### Composite IDs + +In the following example, the `User` ID is represented by a combination of the `firstName` and `lastName` fields: + +```prisma highlight=7;normal +model User { + firstName String + lastName String + email String @unique + isAdmin Boolean @default(false) + + //highlight-next-line + @@id([firstName, lastName]) +} +``` + +By default, the name of this field in Prisma Client queries will be `firstName_lastName`. + +You can also provide your own name for the composite ID using the [`@@id`](/orm/reference/prisma-schema-reference#id-1) attribute's `name` field: + +```prisma highlight=7;normal +model User { + firstName String + lastName String + email String @unique + isAdmin Boolean @default(false) + + //highlight-next-line + @@id(name: "fullName", fields: [firstName, lastName]) +} +``` + +The `firstName_lastName` field will now be named `fullName` instead. + + + +Refer to the documentation on [working with composite IDs](/orm/prisma-client/special-fields-and-types/working-with-composite-ids-and-constraints) to learn how to interact with a composite ID in Prisma Client. + + + +##### `@unique` fields as unique identifiers + +In the following example, users are uniquely identified by a `@unique` field. Because the `email` field functions as a unique identifier for the model (which is required), it must be mandatory: + +```prisma highlight=2;normal +model User { + //highlight-next-line + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} +``` + + + +**Constraint names in relational databases**
+You can optionally define a [custom primary key constraint name](/orm/prisma-schema/data-model/database-mapping#constraint-and-index-names) in the underlying database. + +
+ +#### Defining IDs in MongoDB + +The MongoDB connector has [specific rules for defining an ID field](/orm/reference/prisma-schema-reference#mongodb) that differs from relational databases. An ID must be defined by a single field using the [`@id`](/orm/reference/prisma-schema-reference#id) attribute and must include `@map("_id")`. + +In the following example, the `User` ID is represented by the `id` string field that accepts an auto-generated `ObjectId`: + +```prisma highlight=2;normal +model User { + //highlight-next-line + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} +``` + +In the following example, the `User` ID is represented by the `id` string field that accepts something other than an `ObjectId` - for example, a unique username: + +```prisma highlight=2;normal +model User { + //highlight-next-line + id String @id @map("_id") + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} +``` + + + +**MongoDB does not support `@@id`**
+MongoDB does not support composite IDs, which means you cannot identify a model with a `@@id` block. + +
+ +### Defining a default value + +You can define default values for scalar fields of your models using the [`@default`](/orm/reference/prisma-schema-reference#default) attribute: + + + + +```prisma highlight=3,5;normal +model Post { + id Int @id @default(autoincrement()) + //highlight-next-line + createdAt DateTime @default(now()) + title String + //highlight-next-line + published Boolean @default(false) + //highlight-next-line + data Json @default("{ \"hello\": \"world\" }") + author User @relation(fields: [authorId], references: [id]) + authorId Int + categories Category[] @relation(references: [id]) +} +``` + + + + +```prisma highlight=3,5;normal +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + categories Category[] @relation(references: [id]) +} +``` + + + + +`@default` attributes either: + +- Represent `DEFAULT` values in the underlying database (relational databases only) _or_ +- Use a Prisma ORM-level function. For example, `cuid()` and `uuid()` are provided by Prisma Client's [query engine](/orm/more/under-the-hood/engines) for all connectors. + +Default values can be: + +- Static values that correspond to the field type, such as `5` (`Int`), `Hello` (`String`), or `false` (`Boolean`) +- [Lists](/orm/reference/prisma-schema-reference#-modifier) of static values, such as `[5, 6, 8]` (`Int[]`) or `["Hello", "Goodbye"]` (`String`[]). These are available in Prisma ORM versions `4.0.0` and later, when using supported databases (PostgreSQL, CockroachDB and MongoDB) +- [Functions](#using-functions), such as [`now()`](/orm/reference/prisma-schema-reference#now) or [`uuid()`](/orm/reference/prisma-schema-reference#uuid) +- JSON data. Note that JSON needs to be enclosed with double-quotes inside the `@default` attribute, e.g.: `@default("[]")`. If you want to provide a JSON object, you need to enclose it with double-quotes and then escape any internal double quotes using a backslash, e.g.: `@default("{ \"hello\": \"world\" }")`. + + + +Refer to the [attribute function reference documentation](/orm/reference/prisma-schema-reference#attribute-functions) for information about connector support for functions. + + + +### Defining a unique field + +You can add unique attributes to your models to be able to uniquely identify individual records of that model. Unique attributes can be defined on a single field using [`@unique`](/orm/reference/prisma-schema-reference#unique) attribute, or on multiple fields (also called composite or compound unique constraints) using the [`@@unique`](/orm/reference/prisma-schema-reference#unique-1) attribute. + +In the following example, the value of the `email` field must be unique: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? +} +``` + + + + +In the following example, a combination of `authorId` and `title` must be unique: + + + + +```prisma highlight=10;normal +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int + categories Category[] @relation(references: [id]) + + //highlight-next-line + @@unique([authorId, title]) +} +``` + + + + +```prisma highlight=10;normal +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + categories Category[] @relation(references: [id]) + + //highlight-next-line + @@unique([authorId, title]) +} +``` + + + + + + +**Constraint names in relational databases**
+You can optionally define a [custom unique constraint name](/orm/prisma-schema/data-model/database-mapping#constraint-and-index-names) in the underlying database. + +
+ +By default, the name of this field in Prisma Client queries will be `authorId_title`. + +You can also provide your own name for the composite unique constraint using the [`@@unique`](/orm/prisma-schema/data-model/database-mapping#constraint-and-index-names) attribute's `name` field: + +```prisma highlight=10;normal +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + categories Category[] @relation(references: [id]) + + //highlight-next-line + @@unique(name: "authorTitle", [authorId, title]) +} +``` + +The `authorId_title` field will now be named `authorTitle` instead. + + + +Refer to the documentation on [working with composite unique identifiers](/orm/prisma-client/special-fields-and-types/working-with-composite-ids-and-constraints) to learn how to interact with a composite unique constraints in Prisma Client. + + + +#### Composite type unique constraints + +When using the MongoDB provider in version `3.12.0` and later, you can define a unique constraint on a field of a [composite type](#defining-composite-types) using the syntax `@@unique([compositeType.field])`. As with other fields, composite type fields can be used as part of a multi-column unique constraint. + +The following example defines a multi-column unique constraint based on the `email` field of the `User` model and the `number` field of the `Address` composite type which is used in `User.address`: + +```prisma file=schema.prisma showLineNumbers +type Address { + street String + number Int +} + +model User { + id Int @id + email String + address Address + + @@unique([email, address.number]) +} +``` + +This notation can be chained if there is more than one nested composite type: + +```prisma file=schema.prisma showLineNumbers +type City { + name String +} + +type Address { + number Int + city City +} + +model User { + id Int @id + address Address[] + + @@unique([address.city.name]) +} +``` + +### Defining an index + +You can define indexes on one or multiple fields of your models via the [`@@index`](/orm/reference/prisma-schema-reference#index) on a model. The following example defines a multi-column index based on the `title` and `content` field: + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + content String? + + @@index([title, content]) +} +``` + + + +**Index names in relational databases**
+You can optionally define a [custom index name](/orm/prisma-schema/data-model/database-mapping#constraint-and-index-names) in the underlying database. + +
+ +#### Defining composite type indexes + +When using the MongoDB provider in version `3.12.0` and later, you can define an index on a field of a [composite type](#defining-composite-types) using the syntax `@@index([compositeType.field])`. As with other fields, composite type fields can be used as part of a multi-column index. + +The following example defines a multi-column index based on the `email` field of the `User` model and the `number` field of the `Address` composite type: + +```prisma file=schema.prisma showLineNumbers +type Address { + street String + number Int +} + +model User { + id Int @id + email String + address Address + + @@index([email, address.number]) +} +``` + +This notation can be chained if there is more than one nested composite type: + +```prisma file=schema.prisma showLineNumbers +type City { + name String +} + +type Address { + number Int + city City +} + +model User { + id Int @id + address Address[] + + @@index([address.city.name]) +} +``` + +## Defining enums + +You can define enums in your data model [if enums are supported for your database connector](/orm/reference/database-features#misc), either natively or at Prisma ORM level. + +Enums are considered [scalar](#scalar-fields) types in the Prisma schema data model. They're therefore [by default](/orm/prisma-client/queries/select-fields#return-the-default-fields) included as return values in [Prisma Client queries](/orm/prisma-client/queries/crud). + +Enums are defined via the [`enum`](/orm/reference/prisma-schema-reference#enum) block. For example, a `User` has a `Role`: + + + + +```prisma highlight=5,8-11;normal +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + //highlight-next-line + role Role @default(USER) +} + +//highlight-start +enum Role { + USER + ADMIN +} +//highlight-end +``` + + + + +```prisma highlight=5,8-11;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + //highlight-next-line + role Role @default(USER) +} + +//highlight-start +enum Role { + USER + ADMIN +} +//highlight-end +``` + + + + +## Defining composite types + + + +Composite types were added in version `3.10.0` under the `mongodb` Preview feature flag and are in General Availability since version `3.12.0`. + + + + + +Composite types are currently only available on MongoDB. + + + +Composite types (known as [embedded documents](https://www.mongodb.com/docs/manual/data-modeling/#embedded-data) in MongoDB) provide support for embedding records inside other records, by allowing you to define new object types. Composite types are structured and typed in a similar way to [models](#defining-models). + +To define a composite type, use the `type` block. As an example, take the following schema: + +```prisma file=schema.prisma showLineNumbers +model Product { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + photos Photo[] +} + +type Photo { + height Int + width Int + url String +} +``` + +In this case, the `Product` model has a list of `Photo` composite types stored in `photos`. + +### Considerations when using composite types + +Composite types only support a limited set of [attributes](/orm/reference/prisma-schema-reference#attributes). The following attributes are supported: + +- `@default` +- `@map` +- [Native types](/orm/reference/prisma-schema-reference#model-field-scalar-types), such as `@db.ObjectId` + +The following attributes are not supported inside composite types: + +- `@unique` +- `@id` +- `@relation` +- `@ignore` +- `@updatedAt` + +However, unique constraints can still be defined by using the `@@unique` attribute on the level of the model that uses the composite type. For more details, see [Composite type unique constraints](#composite-type-unique-constraints). + +Indexes can be defined by using the `@@index` attribute on the level of the model that uses the composite type. For more details, see [Composite type indexes](#defining-composite-type-indexes). + +## Using functions + +The Prisma schema supports a number of [functions](/orm/reference/prisma-schema-reference#attribute-functions) . These can be used to specify [default values](/orm/reference/prisma-schema-reference#default) on fields of a model. + +For example, the default value of `createdAt` is [`now()`](/orm/reference/prisma-schema-reference#now) : + + + + +```prisma +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) +} +``` + + + + +```prisma +model Post { + id String @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) +} +``` + + + + +[`cuid()`](/orm/reference/prisma-schema-reference#cuid) and [`uuid()`](/orm/reference/prisma-schema-reference#uuid) are implemented by Prisma ORM and therefore are not "visible" in the underlying database schema. You can still use them when using [introspection](/orm/prisma-schema/introspection) by [manually changing your Prisma schema](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) and [generating Prisma Client](/orm/prisma-client/setup-and-configuration/generating-prisma-client), in that case the values will be generated by Prisma Client's [query engine](/orm/more/under-the-hood/engines) + +Support for [`autoincrement()`](/orm/reference/prisma-schema-reference#autoincrement), [`now()`](/orm/reference/prisma-schema-reference#now), and [`dbgenerated(...)`](/orm/reference/prisma-schema-reference#dbgenerated) differ between databases. + +**Relational database connectors** implement `autoincrement()`, `dbgenerated(...)`, and `now()` at database level. The **MongoDB connector** does not support `autoincrement()` or `dbgenerated(...)`, and `now()` is implemented at the Prisma ORM level. The [`auto()`](/orm/reference/prisma-schema-reference#auto) function is used to generate an `ObjectId`. + +## Relations + +Refer to the [relations documentation](/orm/prisma-schema/data-model/relations) for more examples and information about relationships between models. + +## Models in Prisma Client + +### Queries (CRUD) + +Every model in the data model definition will result in a number of CRUD queries in the generated [Prisma Client API](/orm/prisma-client): + +- [`findMany()`](/orm/reference/prisma-client-reference#findmany) +- [`findFirst()`](/orm/reference/prisma-client-reference#findfirst) +- [`findFirstOrThrow()`](/orm/reference/prisma-client-reference#findfirstorthrow) +- [`findUnique()`](/orm/reference/prisma-client-reference#findunique) +- [`findUniqueOrThrow()`](/orm/reference/prisma-client-reference#finduniqueorthrow) +- [`create()`](/orm/reference/prisma-client-reference#create) +- [`update()`](/orm/reference/prisma-client-reference#update) +- [`upsert()`](/orm/reference/prisma-client-reference#upsert) +- [`delete()`](/orm/reference/prisma-client-reference#delete) +- [`createMany()`](/orm/reference/prisma-client-reference#createmany) +- [`createManyAndReturn()`](/orm/reference/prisma-client-reference#createmanyandreturn) +- [`updateMany()`](/orm/reference/prisma-client-reference#updatemany) +- [`deleteMany()`](/orm/reference/prisma-client-reference#deletemany) + +The operations are accessible via a generated property on the Prisma Client instance. By default the name of the property is the lowercase form of the model name, e.g. `user` for a `User` model or `post` for a `Post` model. + +Here is an example illustrating the use of a `user` property from the Prisma Client API: + +```js +const newUser = await prisma.user.create({ + data: { + name: 'Alice', + }, +}) +const allUsers = await prisma.user.findMany() +``` + +### Type definitions + +Prisma Client also generates **type definitions** that reflect your model structures. These are part of the generated [`@prisma/client`](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) node module. + +When using TypeScript, these type definitions ensure that all your database queries are entirely type safe and validated at compile-time (even partial queries using [`select`](/orm/reference/prisma-client-reference#select) or [`include`](/orm/reference/prisma-client-reference#include) ). + +Even when using plain JavaScript, the type definitions are still included in the `@prisma/client` node module, enabling features like [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense)/autocompletion in your editor. + +> **Note**: The actual types are stored in the `.prisma/client` folder. `@prisma/client/index.d.ts` exports the contents of this folder. + +For example, the type definition for the `User` model from above would look as follows: + +```ts +export type User = { + id: number + email: string + name: string | null + role: string +} +``` + +Note that the relation fields `posts` and `profile` are not included in the type definition by default. However, if you need variations of the `User` type you can still define them using some of [Prisma Client's generated helper types](/orm/prisma-client/setup-and-configuration/generating-prisma-client) (in this case, these helper types would be called `UserGetIncludePayload` and `UserGetSelectPayload`). + +## Limitations + +### Records must be uniquely identifiable + +Prisma ORM currently only supports models that have at least one unique field or combination of fields. In practice, this means that every Prisma model must have either at least one of the following attributes: + +- `@id` or `@@id` for a single- or multi-field primary key constraint (max one per model) +- `@unique` or `@@unique` for a single- or multi-field unique constraint diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/100-one-to-one-relations.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/100-one-to-one-relations.mdx new file mode 100644 index 0000000000..577a7a80e8 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/100-one-to-one-relations.mdx @@ -0,0 +1,307 @@ +--- +title: One-to-one relations +metaDescription: How to define and work with one-to-one relations in Prisma. +tocDepth: 3 +--- + + + +This page introduces one-to-one relations and explains how to use them in your Prisma schema. + + + +## Overview + +One-to-one (1-1) relations refer to relations where at most **one** record can be connected on both sides of the relation. In the example below, there is a one-to-one relation between `User` and `Profile`: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int @unique // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +The `userId` relation scalar is a direct representation of the foreign key in the underlying database. This one-to-one relation expresses the following: + +- "a user can have zero profiles or one profile" (because the `profile` field is [optional](/orm/prisma-schema/data-model/models#type-modifiers) on `User`) +- "a profile must always be connected to one user" + +In the previous example, the `user` relation field of the `Profile` model references the `id` field of the `User` model. You can also reference a different field. In this case, you need to mark the field with the `@unique` attribute, to guarantee that there is only a single `User` connected to each `Profile`. In the following example, the `user` field references an `email` field in the `User` model, which is marked with the `@unique` attribute: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique // <-- add unique attribute + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userEmail], references: [email]) + userEmail String @unique // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique // <-- add unique attribute + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User @relation(fields: [userEmail], references: [email]) + userEmail String @unique @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + + + +In MySQL, you can create a foreign key with only an index on the referenced side, and not a unique constraint. In Prisma ORM versions 4.0.0 and later, if you introspect a relation of this type it will trigger a validation error. To fix this, you will need to add a `@unique` constraint to the referenced field. + + + +## Multi-field relations in relational databases + +In **relational databases only**, you can also use [multi-field IDs](/orm/reference/prisma-schema-reference#id-1) to define a 1-1 relation: + +```prisma +model User { + firstName String + lastName String + profile Profile? + + @@id([firstName, lastName]) +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userFirstName, userLastName], references: [firstName, lastName]) + userFirstName String // relation scalar field (used in the `@relation` attribute above) + userLastName String // relation scalar field (used in the `@relation` attribute above) + + @@unique([userFirstName, userLastName]) +} +``` + +## 1-1 relations in the database + +### Relational databases + +The following example demonstrates how to create a 1-1 relation in SQL: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Profile" ( + id SERIAL PRIMARY KEY, + "userId" INTEGER NOT NULL UNIQUE, + FOREIGN KEY ("userId") REFERENCES "User"(id) +); +``` + +Notice that there is a `UNIQUE` constraint on the foreign key `userId`. If this `UNIQUE` constraint was missing, the relation would be considered a [1-n relation](/orm/prisma-schema/data-model/relations/one-to-many-relations). + +The following example demonstrates how to create a 1-1 relation in SQL using a composite key (`firstName` and `lastName`): + +```sql +CREATE TABLE "User" ( + firstName TEXT, + lastName TEXT, + PRIMARY KEY ("firstName","lastName") +); +CREATE TABLE "Profile" ( + id SERIAL PRIMARY KEY, + "userFirstName" TEXT NOT NULL, + "userLastName" TEXT NOT NULL, + UNIQUE ("userFirstName", "userLastName") + FOREIGN KEY ("userFirstName", "userLastName") REFERENCES "User"("firstName", "lastName") +); +``` + +### MongoDB + +For MongoDB, Prisma ORM currently uses a [normalized data model design](https://www.mongodb.com/docs/manual/data-modeling/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB document represents a `User`: + +```json +{ "_id": { "$oid": "60d58e130011041800d209e1" }, "name": "Bob" } +``` + +The following MongoDB document represents a `Profile` - notice the `userId` field, which references the `User` document's `$oid`: + +```json +{ + "_id": { "$oid": "60d58e140011041800d209e2" }, + "bio": "I'm Bob, and I like drawing.", + "userId": { "$oid": "60d58e130011041800d209e1" } +} +``` + +## Required and optional 1-1 relation fields + +In a one-to-one relation, the side of the relation _without_ a relation scalar (the field representing the foreign key in the database) _must_ be optional: + +```prisma highlight=3;normal +model User { + id Int @id @default(autoincrement()) + //highlight-next-line + profile Profile? // No relation scalar - must be optional +} +``` + +This restriction was introduced in 2.12.0. + +However, you can choose if the side of the relation _with_ a relation scalar should be optional or mandatory. + +### Mandatory 1-1 relation + +In the following example, `profile` and `profileId` are mandatory. This means that you cannot create a `User` without connecting or creating a `Profile`: + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile @relation(fields: [profileId], references: [id]) // references `id` of `Profile` + profileId Int @unique // relation scalar field (used in the `@relation` attribute above) +} + +model Profile { + id Int @id @default(autoincrement()) + user User? +} +``` + +### Optional 1-1 relation + +In the following example, `profile` and `profileId` are optional. This means that you can create a user without connecting or creating a `Profile`: + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile? @relation(fields: [profileId], references: [id]) // references `id` of `Profile` + profileId Int? @unique // relation scalar field (used in the `@relation` attribute above) +} + +model Profile { + id Int @id @default(autoincrement()) + user User? +} +``` + +## Choosing which side should store the foreign key in a 1-1 relation + +In **1-1 relations**, you can decide yourself which side of the relation you want to annotate with the `@relation` attribute (and therefore holds the foreign key). + +In the following example, the relation field on the `Profile` model is annotated with the `@relation` attribute. `userId` is a direct representation of the foreign key in the underlying database: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int @unique // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId +} +``` + + + + +You can also annotate the other side of the relation with the `@relation` attribute. The following example annotates the relation field on the `User` model. `profileId` is a direct representation of the foreign key in the underlying database: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile? @relation(fields: [profileId], references: [id]) + profileId Int? @unique // relation scalar field (used in the `@relation` attribute above) +} + +model Profile { + id Int @id @default(autoincrement()) + user User? +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + profile Profile? @relation(fields: [profileId], references: [id]) + profileId String? @unique @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User? +} +``` + + + diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/200-one-to-many-relations.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/200-one-to-many-relations.mdx new file mode 100644 index 0000000000..8a46de8dec --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/200-one-to-many-relations.mdx @@ -0,0 +1,276 @@ +--- +title: One-to-many relations +metaDescription: How to define and work with one-to-many relations in Prisma. +tocDepth: 3 +--- + +This page introduces one-to-many relations and explains how to use them in your Prisma schema. + +## Overview + +One-to-many (1-n) relations refer to relations where one record on one side of the relation can be connected to zero or more records on the other side. In the following example, there is one one-to-many relation between the `User` and `Post` models: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId +} +``` + + + + +> **Note** The `posts` field does not "manifest" in the underlying database schema. On the other side of the relation, the [annotated relation field](/orm/prisma-schema/data-model/relations#relation-fields) `author` and its relation scalar `authorId` represent the side of the relation that stores the foreign key in the underlying database. + +This one-to-many relation expresses the following: + +- "a user can have zero or more posts" +- "a post must always have an author" + +In the previous example, the `author` relation field of the `Post` model references the `id` field of the `User` model. You can also reference a different field. In this case, you need to mark the field with the `@unique` attribute, to guarantee that there is only a single `User` connected to each `Post`. In the following example, the `author` field references an `email` field in the `User` model, which is marked with the `@unique` attribute: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique // <-- add unique attribute + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + authorEmail String + author User @relation(fields: [authorEmail], references: [email]) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique // <-- add unique attribute + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + authorEmail String + author User @relation(fields: [authorEmail], references: [email]) +} +``` + + + + + + +In MySQL, you can create a foreign key with only an index on the referenced side, and not a unique constraint. In Prisma ORM versions 4.0.0 and later, if you introspect a relation of this type it will trigger a validation error. To fix this, you will need to add a `@unique` constraint to the referenced field. + + + +## Multi-field relations in relational databases + +In **relational databases only**, you can also define this relation using [multi-field IDs](/orm/reference/prisma-schema-reference#id-1)/composite key: + +```prisma +model User { + firstName String + lastName String + post Post[] + + @@id([firstName, lastName]) +} + +model Post { + id Int @id @default(autoincrement()) + author User @relation(fields: [authorFirstName, authorLastName], references: [firstName, lastName]) + authorFirstName String // relation scalar field (used in the `@relation` attribute above) + authorLastName String // relation scalar field (used in the `@relation` attribute above) +} +``` + +## 1-n relations in the database + +### Relational databases + +The following example demonstrates how to create a 1-n relation in SQL: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + "authorId" integer NOT NULL, + FOREIGN KEY ("authorId") REFERENCES "User"(id) +); +``` + +Since there's no `UNIQUE` constraint on the `authorId` column (the foreign key), you can create **multiple `Post` records that point to the same `User` record**. This makes the relation a one-to-many rather than a one-to-one. + +The following example demonstrates how to create a 1-n relation in SQL using a composite key (`firstName` and `lastName`): + +```sql +CREATE TABLE "User" ( + firstName TEXT, + lastName TEXT, + PRIMARY KEY ("firstName","lastName") +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + "authorFirstName" TEXT NOT NULL, + "authorLastName" TEXT NOT NULL, + FOREIGN KEY ("authorFirstName", "authorLastName") REFERENCES "User"("firstName", "lastName") +); +``` + +#### Comparing one-to-one and one-to-many relations + +In relational databases, the main difference between a 1-1 and a 1-n-relation is that in a 1-1-relation the foreign key must have a `UNIQUE` constraint defined on it. + +### MongoDB + +For MongoDB, Prisma ORM currently uses a [normalized data model design](https://www.mongodb.com/docs/manual/data-modeling/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB document represents a `User`: + +```json +{ "_id": { "$oid": "60d5922d00581b8f0062e3a8" }, "name": "Ella" } +``` + +Each of the following `Post` MongoDB documents has an `authorId` field which references the same user: + +```json +[ + { + "_id": { "$oid": "60d5922e00581b8f0062e3a9" }, + "title": "How to make sushi", + "authorId": { "$oid": "60d5922d00581b8f0062e3a8" } + }, + { + "_id": { "$oid": "60d5922e00581b8f0062e3aa" }, + "title": "How to re-install Windows", + "authorId": { "$oid": "60d5922d00581b8f0062e3a8" } + } +] +``` + +#### Comparing one-to-one and one-to-many relations + +In MongoDB, the only difference between a 1-1 and a 1-n is the number of documents referencing another document in the database - there are no constraints. + +## Required and optional relation fields in one-to-many relations + +A 1-n-relation always has two relation fields: + +- a [list](/orm/prisma-schema/data-model/models#type-modifiers) relation field which is _not_ annotated with `@relation` +- the [annotated relation field](/orm/prisma-schema/data-model/relations#annotated-relation-fields) (including its relation scalar) + +The annotated relation field and relation scalar of a 1-n relation can either _both_ be optional, or _both_ be mandatory. On the other side of the relation, the list is **always mandatory**. + +### Optional one-to-many relation + +In the following example, you can create a `Post` without assigning a `User`: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User? @relation(fields: [authorId], references: [id]) + authorId String? @db.ObjectId +} +``` + + + + +### Mandatory one-to-many relation + +In the following example, you must assign a `User` when you create a `Post`: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId +} +``` + + + diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/300-many-to-many-relations.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/300-many-to-many-relations.mdx new file mode 100644 index 0000000000..d1a3e1d132 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/300-many-to-many-relations.mdx @@ -0,0 +1,546 @@ +--- +title: Many-to-many relations +metaDescription: How to define and work with many-to-many relations in Prisma. +tocDepth: 3 +--- + + + +Many-to-many (m-n) relations refer to relations where zero or more records on one side of the relation can be connected to zero or more records on the other side. + +Prisma schema syntax and the implementation in the underlying database differs between [relational databases](#relational-databases) and [MongoDB](#mongodb). + + + +## Relational databases + +In relational databases, m-n-relations are typically modelled via [relation tables](/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables). m-n-relations can be either [explicit](#explicit-many-to-many-relations) or [implicit](#implicit-many-to-many-relations) in the Prisma schema. We recommend using [implicit](#implicit-many-to-many-relations) m-n-relations if you do not need to store any additional meta-data in the relation table itself. You can always migrate to an [explicit](#explicit-many-to-many-relations) m-n-relation later if needed. + +### Explicit many-to-many relations + +In an explicit m-n relation, the **relation table is represented as a model in the Prisma schema** and can be used in queries. Explicit m-n relations define three models: + +- Two models with m-n relation, such as `Category` and `Post`. +- One model that represents the [relation table](#relation-tables), such as `CategoriesOnPosts` (also sometimes called _JOIN_, _link_ or _pivot_ table) in the underlying database. The fields of a relation table model are both annotated relation fields (`post` and `category`) with a corresponding relation scalar field (`postId` and `categoryId`). + +The relation table `CategoriesOnPosts` connects related `Post` and `Category` records. In this example, the model representing the relation table also **defines additional fields** that describe the `Post`/`Category` relationship - who assigned the category (`assignedBy`), and when the category was assigned (`assignedAt`): + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + categories CategoriesOnPosts[] +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts CategoriesOnPosts[] +} + +model CategoriesOnPosts { + post Post @relation(fields: [postId], references: [id]) + postId Int // relation scalar field (used in the `@relation` attribute above) + category Category @relation(fields: [categoryId], references: [id]) + categoryId Int // relation scalar field (used in the `@relation` attribute above) + assignedAt DateTime @default(now()) + assignedBy String + + @@id([postId, categoryId]) +} +``` + +The underlying SQL looks like this: + +```sql +CREATE TABLE "Post" ( + "id" SERIAL NOT NULL, + "title" TEXT NOT NULL, + + CONSTRAINT "Post_pkey" PRIMARY KEY ("id") +); + +CREATE TABLE "Category" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + + CONSTRAINT "Category_pkey" PRIMARY KEY ("id") +); + + +-- Relation table + indexes -- + +CREATE TABLE "CategoriesOnPosts" ( + "postId" INTEGER NOT NULL, + "categoryId" INTEGER NOT NULL, + "assignedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "CategoriesOnPosts_pkey" PRIMARY KEY ("postId","categoryId") +); + +ALTER TABLE "CategoriesOnPosts" ADD CONSTRAINT "CategoriesOnPosts_postId_fkey" FOREIGN KEY ("postId") REFERENCES "Post"("id") ON DELETE RESTRICT ON UPDATE CASCADE; +ALTER TABLE "CategoriesOnPosts" ADD CONSTRAINT "CategoriesOnPosts_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE RESTRICT ON UPDATE CASCADE; +``` + +Note that the same rules as for [1-n relations](/orm/prisma-schema/data-model/relations/one-to-many-relations) apply (because `Post`↔ `CategoriesOnPosts` and `Category` ↔ `CategoriesOnPosts` are both in fact 1-n relations), which means one side of the relation needs to be annotated with the `@relation` attribute. + +When you don't need to attach additional information to the relation, you can model m-n-relations as [implicit m-n-relations](#implicit-many-to-many-relations). If you're not using Prisma Migrate but obtain your data model from [introspection](/orm/prisma-schema/introspection), you can still make use of implicit m-n-relations by following Prisma ORM's [conventions for relation tables](#conventions-for-relation-tables-in-implicit-m-n-relations). + +#### Querying an explicit many-to-many + +The following section demonstrates how to query an explicit m-n-relation. You can query the relation model directly (`prisma.categoriesOnPosts(...)`), or use nested queries to go from `Post` -> `CategoriesOnPosts` -> `Category` or the other way. + +The following query does three things: + +1. Creates a `Post` +2. Creates a new record in the relation table `CategoriesOnPosts` +3. Creates a new `Category` that is associated with the newly created `Post` record + +```ts +const createCategory = await prisma.post.create({ + data: { + title: 'How to be Bob', + categories: { + create: [ + { + assignedBy: 'Bob', + assignedAt: new Date(), + category: { + create: { + name: 'New category', + }, + }, + }, + ], + }, + }, +}) +``` + +The following query: + +- Creates a new `Post` +- Creates a new record in the relation table `CategoriesOnPosts` +- Connects the category assignment to existing categories (with IDs `9` and `22`) + +```ts +const assignCategories = await prisma.post.create({ + data: { + title: 'How to be Bob', + categories: { + create: [ + { + assignedBy: 'Bob', + assignedAt: new Date(), + category: { + connect: { + id: 9, + }, + }, + }, + { + assignedBy: 'Bob', + assignedAt: new Date(), + category: { + connect: { + id: 22, + }, + }, + }, + ], + }, + }, +}) +``` + +Sometimes you might not know if a `Category` record exists. If the `Category` record exists, you want to connect a new `Post` record to that category. If the `Category` record does not exist, you want to create the record first and then connect it to the new `Post` record. The following query: + +1. Creates a new `Post` +2. Creates a new record in the relation table `CategoriesOnPosts` +3. Connects the category assignment to an existing category (with ID `9`), or creates a new category first if it does not exist + +```ts +const assignCategories = await prisma.post.create({ + data: { + title: 'How to be Bob', + categories: { + create: [ + { + assignedBy: 'Bob', + assignedAt: new Date(), + category: { + connectOrCreate: { + where: { + id: 9, + }, + create: { + name: 'New Category', + id: 9, + }, + }, + }, + }, + ], + }, + }, +}) +``` + +The following query returns all `Post` records where at least one (`some`) category assignment (`categories`) refers to a category named `"New category"`: + +```ts +const getPosts = await prisma.post.findMany({ + where: { + categories: { + some: { + category: { + name: 'New Category', + }, + }, + }, + }, +}) +``` + +The following query returns all categories where at least one (`some`) related `Post` record titles contain the words `"Cool stuff"` _and_ the category was assigned by Bob. + +```ts +const getAssignments = await prisma.category.findMany({ + where: { + posts: { + some: { + assignedBy: 'Bob', + post: { + title: { + contains: 'Cool stuff', + }, + }, + }, + }, + }, +}) +``` + +The following query gets all category assignments (`CategoriesOnPosts`) records that were assigned by `"Bob"` to one of 5 posts: + +```ts +const getAssignments = await prisma.categoriesOnPosts.findMany({ + where: { + assignedBy: 'Bob', + post: { + id: { + in: [9, 4, 10, 12, 22], + }, + }, + }, +}) +``` + +### Implicit many-to-many relations + +Implicit m-n relations define relation fields as lists on both sides of the relation. Although the relation table exists in the underlying database, **it is managed by Prisma ORM and does not manifest in the Prisma schema**. Implicit relation tables follow a [specific convention](#conventions-for-relation-tables-in-implicit-m-n-relations). + +Implicit m-n-relations makes the [Prisma Client API](/orm/prisma-client) for m-n-relations a bit simpler (since you have one fewer level of nesting inside of [nested writes](/orm/prisma-client/queries/relation-queries#nested-writes)). + +In the example below, there's one _implicit_ m-n-relation between `Post` and `Category`: + + + + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +``` + + + + +```prisma +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + categoryIDs String[] @db.ObjectId + categories Category[] @relation(fields: [categoryIDs], references: [id]) +} + +model Category { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + postIDs String[] @db.ObjectId + posts Post[] @relation(fields: [postIDs], references: [id]) +} +``` + + + + +#### Querying an implicit many-to-many + +The following section demonstrates how to query an [implicit m-n](#implicit-many-to-many-relations) relation. The queries require less nesting than [explicit m-n queries](#querying-an-explicit-many-to-many). + +The following query creates a single `Post` and multiple `Category` records: + +```ts +const createPostAndCategory = await prisma.post.create({ + data: { + title: 'How to become a butterfly', + categories: { + create: [{ name: 'Magic' }, { name: 'Butterflies' }], + }, + }, +}) +``` + +The following query creates a single `Category` and multiple `Post` records: + +```ts +const createCategoryAndPosts = await prisma.category.create({ + data: { + name: 'Stories', + posts: { + create: [ + { title: 'That one time with the stuff' }, + { title: 'The story of planet Earth' }, + ], + }, + }, +}) +``` + +The following query returns all `Post` records with a list of that post's assigned categories: + +```ts +const getPostsAndCategories = await prisma.post.findMany({ + include: { + categories: true, + }, +}) +``` + +#### Rules for defining an implicit m-n relation + +Implicit m-n relations: + +- Use a specific [convention for relation tables](#conventions-for-relation-tables-in-implicit-m-n-relations) +- Do **not** require the `@relation` attribute unless you need to [disambiguate relations](/orm/prisma-schema/data-model/relations#disambiguating-relations) with a name, e.g. `@relation("MyRelation")` or `@relation(name: "MyRelation")`. +- If you do use the `@relation` attribute, you cannot use the `references`, `fields`, `onUpdate` or `onDelete` arguments. This is because these take a fixed value for implicit m-n-relations and cannot be changed. +- Require both models to have a single `@id`. Be aware that: + + - You cannot use a [multi-field ID](/orm/reference/prisma-schema-reference#id-1) + - You cannot use a `@unique` in place of an `@id` + + + + To use either of these features, you must use an [explicit m-n instead](#explicit-many-to-many-relations). + + + +#### Conventions for relation tables in implicit m-n relations + +If you obtain your data model from [introspection](/orm/prisma-schema/introspection), you can still use implicit m-n-relations by following Prisma ORM's [conventions for relation tables](#conventions-for-relation-tables-in-implicit-m-n-relations). The following example assumes you want to create a relation table to get an implicit m-n-relation for two models called `Post` and `Category`. + +##### Relation table + +If you want a relation table to be picked up by introspection as an implicit m-n-relation, the name must follow this exact structure: + +- It must start with an underscore `_` +- Then the name of the first model in alphabetical order (in this case `Category`) +- Then the relationship (in this case `To`) +- Then the name of the second model in alphabetical order (in this case `Post`) + +In the example, the correct table name is `_CategoryToPost`. + +When creating an implicit m-n-relation yourself in the Prisma schema file, you can [configure the relation](#configuring-the-name-of-the-relation-table-in-implicit-many-to-many-relations) to have a different name. This will change the name given to the relation table in the database. For example, for a relation named `"MyRelation"` the corresponding table will be called `_MyRelation`. + +###### Multi-schema + +If your implicit many-to-many relationship spans multiple database schemas (using the [`multiSchema` preview feature](/orm/prisma-schema/data-model/multi-schema)), the relation table (with the name defined directly above, in the example `_CategoryToPost`) must be present in the same database schema as the first model in alphabetical order (in this case `Category`). + +##### Columns + +A relation table for an implicit m-n-relation must have exactly two columns: + +- A foreign key column that points to `Category` called `A` +- A foreign key column that points to `Post` called `B` + +The columns must be called `A` and `B` where `A` points to the model that comes first in the alphabet and `B` points to the model which comes last in the alphabet. + +##### Indexes + +There further must be: + +- A unique index defined on both foreign key columns: + + ```sql + CREATE UNIQUE INDEX "_CategoryToPost_AB_unique" ON "_CategoryToPost"("A" int4_ops,"B" int4_ops); + ``` + +- A non-unique index defined on B: + + ```sql + CREATE INDEX "_CategoryToPost_B_index" ON "_CategoryToPost"("B" int4_ops); + ``` + +##### Example + +This is a sample SQL statement that would create the three tables including indexes (in PostgreSQL dialect) that are picked up as a implicit m-n-relation by Prisma Introspection: + +```sql +CREATE TABLE "_CategoryToPost" ( + "A" integer NOT NULL REFERENCES "Category"(id) , + "B" integer NOT NULL REFERENCES "Post"(id) +); +CREATE UNIQUE INDEX "_CategoryToPost_AB_unique" ON "_CategoryToPost"("A" int4_ops,"B" int4_ops); +CREATE INDEX "_CategoryToPost_B_index" ON "_CategoryToPost"("B" int4_ops); + +CREATE TABLE "Category" ( + id integer SERIAL PRIMARY KEY +); + +CREATE TABLE "Post" ( + id integer SERIAL PRIMARY KEY +); +``` + +And you can define multiple many-to-many relations between two tables by using the different relationship name. This example shows how the Prisma introspection works under such case: + +```sql +CREATE TABLE IF NOT EXISTS "User" ( + "id" SERIAL PRIMARY KEY +); +CREATE TABLE IF NOT EXISTS "Video" ( + "id" SERIAL PRIMARY KEY +); +CREATE TABLE IF NOT EXISTS "_UserLikedVideos" ( + "A" SERIAL NOT NULL, + "B" SERIAL NOT NULL, + CONSTRAINT "_UserLikedVideos_A_fkey" FOREIGN KEY ("A") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "_UserLikedVideos_B_fkey" FOREIGN KEY ("B") REFERENCES "Video" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +CREATE TABLE IF NOT EXISTS "_UserDislikedVideos" ( + "A" SERIAL NOT NULL, + "B" SERIAL NOT NULL, + CONSTRAINT "_UserDislikedVideos_A_fkey" FOREIGN KEY ("A") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "_UserDislikedVideos_B_fkey" FOREIGN KEY ("B") REFERENCES "Video" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +CREATE UNIQUE INDEX "_UserLikedVideos_AB_unique" ON "_UserLikedVideos"("A", "B"); +CREATE INDEX "_UserLikedVideos_B_index" ON "_UserLikedVideos"("B"); +CREATE UNIQUE INDEX "_UserDislikedVideos_AB_unique" ON "_UserDislikedVideos"("A", "B"); +CREATE INDEX "_UserDislikedVideos_B_index" ON "_UserDislikedVideos"("B"); +``` + +If you run `prisma db pull` on this database, the Prisma CLI will generate the following schema through introspection: + +```prisma +model User { + id Int @id @default(autoincrement()) + Video_UserDislikedVideos Video[] @relation("UserDislikedVideos") + Video_UserLikedVideos Video[] @relation("UserLikedVideos") +} + +model Video { + id Int @id @default(autoincrement()) + User_UserDislikedVideos User[] @relation("UserDislikedVideos") + User_UserLikedVideos User[] @relation("UserLikedVideos") +} +``` + +#### Configuring the name of the relation table in implicit many-to-many relations + +When using Prisma Migrate, you can configure the name of the relation table that's managed by Prisma ORM using the `@relation` attribute. For example, if you want the relation table to be called `_MyRelationTable` instead of the default name `_CategoryToPost`, you can specify it as follows: + +```prisma +model Post { + id Int @id @default(autoincrement()) + categories Category[] @relation("MyRelationTable") +} + +model Category { + id Int @id @default(autoincrement()) + posts Post[] @relation("MyRelationTable") +} +``` + +### Relation tables + +A relation table (also sometimes called a _JOIN_, _link_ or _pivot_ table) connects two or more other tables and therefore creates a _relation_ between them. Creating relation tables is a common data modelling practice in SQL to represent relationships between different entities. In essence it means that "one m-n relation is modeled as two 1-n relations in the database". + +We recommend using [implicit](#implicit-many-to-many-relations) m-n-relations, where Prisma ORM automatically generates the relation table in the underlying database. [Explicit](#explicit-many-to-many-relations) m-n-relations should be used when you need to store additional data in the relations, such as the date the relation was created. + +## MongoDB + +In MongoDB, m-n-relations are represented by: + +- relation fields on both sides, that each have a `@relation` attribute, with mandatory `fields` and `references` arguments +- a scalar list of referenced IDs on each side, with a type that matches the ID field on the other side + +The following example demonstrates a m-n-relation between posts and categories: + +```prisma +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + categoryIDs String[] @db.ObjectId + categories Category[] @relation(fields: [categoryIDs], references: [id]) +} + +model Category { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + postIDs String[] @db.ObjectId + posts Post[] @relation(fields: [postIDs], references: [id]) +} +``` + +Prisma ORM validates m-n-relations in MongoDB with the following rules: + +- The fields on both sides of the relation must have a list type (in the example above, `categories` have a type of `Category[]` and `posts` have a type of `Post[]`) +- The `@relation` attribute must define `fields` and `references` arguments on both sides +- The `fields` argument must have only one scalar field defined, which must be of a list type +- The `references` argument must have only one scalar field defined. This scalar field must exist on the referenced model and must be of the same type as the scalar field in the `fields` argument, but singular (no list) +- The scalar field to which `references` points must have the `@id` attribute +- No [referential actions](/orm/prisma-schema/data-model/relations/referential-actions) are allowed in `@relation` + +The implicit m-n-relations [used in relational databases](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations) are not supported on MongoDB. + +### Querying MongoDB many-to-many relations + +This section demonstrates how to query m-n-relations in MongoDB, using the example schema above. + +The following query finds posts with specific matching category IDs: + +```ts +const newId1 = new ObjectId() +const newId2 = new ObjectId() + +const posts = await prisma.post.findMany({ + where: { + categoryIDs: { + hasSome: [newId1.toHexString(), newId2.toHexString()], + }, + }, +}) +``` + +The following query finds posts where the category name contains the string `'Servers'`: + +```ts +const posts = await prisma.post.findMany({ + where: { + categories: { + some: { + name: { + contains: 'Servers', + }, + }, + }, + }, +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/400-self-relations.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/400-self-relations.mdx new file mode 100644 index 0000000000..db9e12e34b --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/400-self-relations.mdx @@ -0,0 +1,438 @@ +--- +title: Self-relations +metaDescription: How to define and work with self-relations in Prisma. +--- + +A relation field can also reference its own model, in this case the relation is called a _self-relation_. Self-relations can be of any cardinality, 1-1, 1-n and m-n. + +Note that self-relations always require the `@relation` attribute. + +## One-to-one self-relations + +The following example models a one-to-one self-relation: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + successorId Int? @unique + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + successorId String? @unique @db.ObjectId + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") +} +``` + + + + +This relation expresses the following: + +- "a user can have one or zero predecessors" (for example, Sarah is Mary's predecessor as blog owner) +- "a user can have one or zero successors" (for example, Mary is Sarah's successor as blog owner) + +> **Note**: One-to-one self-relations cannot be made required on both sides. One or both sides must be optional, otherwise it becomes impossible to create the first `User` record. + +To create a one-to-one self-relation: + +- Both sides of the relation must define a `@relation` attribute that share the same name - in this case, **BlogOwnerHistory**. +- One relation field must be a [fully annotated](/orm/prisma-schema/data-model/relations#relation-fields). In this example, the `successor` field defines both the `field` and `references` arguments. +- One relation field must be backed by a foreign key. The `successor` field is backed by the `successorId` foreign key, which references a value in the `id` field. The `successorId` scalar relation field also requires a `@unique` attribute to guarantee a one-to-one relation. + +> **Note**: One-to-one self relations require two sides even if both sides are equal in the relationship. For example, to model a 'best friends' relation, you would need to create two relation fields: `bestfriend1` and a `bestfriend2`. + +Either side of the relation can be backed by a foreign key. In the previous example, repeated below, `successor` is backed by `successorId`: + + + + +```prisma highlight=4;normal +model User { + id Int @id @default(autoincrement()) + name String? + //highlight-next-line + successorId Int? @unique + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + //highlight-next-line + successorId String? @unique @db.ObjectId + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") +} +``` + + + + +Alternatively, you could rewrite this so that `predecessor` is backed by `predecessorId`: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + successor User? @relation("BlogOwnerHistory") + //highlight-start + predecessorId Int? @unique + predecessor User? @relation("BlogOwnerHistory", fields: [predecessorId], references: [id]) + //highlight-end +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + successor User? @relation("BlogOwnerHistory") + //highlight-start + predecessorId String? @unique @db.ObjectId + predecessor User? @relation("BlogOwnerHistory", fields: [predecessorId], references: [id]) + //highlight-end +} +``` + + + + +No matter which side is backed by a foreign key, Prisma Client surfaces both the `predecessor` and `successor` fields: + +```ts showLineNumbers +const x = await prisma.user.create({ + data: { + name: "Bob McBob", + //highlight-next-line + successor: { + connect: { + id: 2, + }, + }, + //highlight-next-line + predecessor: { + connect: { + id: 4, + }, + }, + }, +}); +``` + +### One-to-one self relations in the database + +### Relational databases + +In **relational databases only**, a one-to-one self-relation is represented by the following SQL: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY, + "name" TEXT, + "successorId" INTEGER +); + +ALTER TABLE "User" ADD CONSTRAINT fk_successor_user FOREIGN KEY ("successorId") REFERENCES "User" (id); + +ALTER TABLE "User" ADD CONSTRAINT successor_unique UNIQUE ("successorId"); +``` + +### MongoDB + +For MongoDB, Prisma ORM currently uses a [normalized data model design](https://www.mongodb.com/docs/manual/data-modeling/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB documents represent a one-to-one self-relation between two users: + +```json +{ "_id": { "$oid": "60d97df70080618f000e3ca9" }, "name": "Elsa the Elder" } +``` + +```json +{ + "_id": { "$oid": "60d97df70080618f000e3caa" }, + "name": "Elsa", + "successorId": { "$oid": "60d97df70080618f000e3ca9" } +} +``` + +## One-to-many self relations + +A one-to-many self-relation looks as follows: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + teacherId Int? + teacher User? @relation("TeacherStudents", fields: [teacherId], references: [id]) + students User[] @relation("TeacherStudents") +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + teacherId String? @db.ObjectId + teacher User? @relation("TeacherStudents", fields: [teacherId], references: [id]) + students User[] @relation("TeacherStudents") +} +``` + + + + +This relation expresses the following: + +- "a user has zero or one _teachers_ " +- "a user can have zero or more _students_" + +Note that you can also require each user to have a teacher by making the `teacher` field [required](/orm/prisma-schema/data-model/models#optional-and-mandatory-fields). + +### One-to-many self-relations in the database + +### Relational databases + +In relational databases, a one-to-many self-relation is represented by the following SQL: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY, + "name" TEXT, + "teacherId" INTEGER +); + +ALTER TABLE "User" ADD CONSTRAINT fk_teacherid_user FOREIGN KEY ("teacherId") REFERENCES "User" (id); +``` + +Notice the lack of `UNIQUE` constraint on `teacherId` - multiple students can have the same teacher. + +### MongoDB + +For MongoDB, Prisma ORM currently uses a [normalized data model design](https://www.mongodb.com/docs/manual/data-modeling/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB documents represent a one-to-many self-relation between three users - one teacher and two students with the same `teacherId`: + +```json +{ + "_id": { "$oid": "60d9b9e600fe3d470079d6f9" }, + "name": "Ms. Roberts" +} +``` + +```json +{ + "_id": { "$oid": "60d9b9e600fe3d470079d6fa" }, + "name": "Student 8", + "teacherId": { "$oid": "60d9b9e600fe3d470079d6f9" } +} +``` + +```json +{ + "_id": { "$oid": "60d9b9e600fe3d470079d6fb" }, + "name": "Student 9", + "teacherId": { "$oid": "60d9b9e600fe3d470079d6f9" } +} +``` + +## Many-to-many self relations + +A many-to-many self-relation looks as follows: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + followedBy User[] @relation("UserFollows") + following User[] @relation("UserFollows") +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + followedBy User[] @relation("UserFollows", fields: [followedByIDs], references: [id]) + followedByIDs String[] @db.ObjectId + following User[] @relation("UserFollows", fields: [followingIDs], references: [id]) + followingIDs String[] @db.ObjectId +} +``` + + + + +This relation expresses the following: + +- "a user can be followed by zero or more users" +- "a user can follow zero or more users" + +Note that for relational databases, this many-to-many-relation is [implicit](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations). This means Prisma ORM maintains a [relation table](/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables) for it in the underlying database. + +If you need the relation to hold other fields, you can create an [explicit](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations) many-to-many self relation as well. The explicit version of the self relation shown previously is as follows: + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + followedBy Follows[] @relation("followedBy") + following Follows[] @relation("following") +} + +model Follows { + followedBy User @relation("followedBy", fields: [followedById], references: [id]) + followedById Int + following User @relation("following", fields: [followingId], references: [id]) + followingId Int + + @@id([followingId, followedById]) +} +``` + +### Many-to-many self-relations in the database + +### Relational databases + +In relational databases, a many-to-many self-relation (implicit) is represented by the following SQL: + +```sql +CREATE TABLE "User" ( + id integer DEFAULT nextval('"User_id_seq"'::regclass) PRIMARY KEY, + name text +); +CREATE TABLE "_UserFollows" ( + "A" integer NOT NULL REFERENCES "User"(id) ON DELETE CASCADE ON UPDATE CASCADE, + "B" integer NOT NULL REFERENCES "User"(id) ON DELETE CASCADE ON UPDATE CASCADE +); +``` + +### MongoDB + +For MongoDB, Prisma ORM currently uses a [normalized data model design](https://www.mongodb.com/docs/manual/data-modeling/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB documents represent a many-to-many self-relation between five users - two users that follow `"Bob"`, and two users that follow him: + +```json +{ + "_id": { "$oid": "60d9866f00a3e930009a6cdd" }, + "name": "Bob", + "followedByIDs": [ + { "$oid": "60d9866f00a3e930009a6cde" }, + { "$oid": "60d9867000a3e930009a6cdf" } + ], + "followingIDs": [ + { "$oid": "60d9867000a3e930009a6ce0" }, + { "$oid": "60d9867000a3e930009a6ce1" } + ] +} +``` + +```json +{ + "_id": { "$oid": "60d9866f00a3e930009a6cde" }, + "name": "Follower1", + "followingIDs": [{ "$oid": "60d9866f00a3e930009a6cdd" }] +} +``` + +```json +{ + "_id": { "$oid": "60d9867000a3e930009a6cdf" }, + "name": "Follower2", + "followingIDs": [{ "$oid": "60d9866f00a3e930009a6cdd" }] +} +``` + +```json +{ + "_id": { "$oid": "60d9867000a3e930009a6ce0" }, + "name": "CoolPerson1", + "followedByIDs": [{ "$oid": "60d9866f00a3e930009a6cdd" }] +} +``` + +```json +{ + "_id": { "$oid": "60d9867000a3e930009a6ce1" }, + "name": "CoolPerson2", + "followedByIDs": [{ "$oid": "60d9866f00a3e930009a6cdd" }] +} +``` + +## Defining multiple self-relations on the same model + +You can also define multiple self-relations on the same model at once. Taking all relations from the previous sections as example, you could define a `User` model as follows: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + teacherId Int? + teacher User? @relation("TeacherStudents", fields: [teacherId], references: [id]) + students User[] @relation("TeacherStudents") + followedBy User[] @relation("UserFollows") + following User[] @relation("UserFollows") +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + teacherId String? @db.ObjectId + teacher User? @relation("TeacherStudents", fields: [teacherId], references: [id]) + students User[] @relation("TeacherStudents") + followedBy User[] @relation("UserFollows", fields: [followedByIDs]) + followedByIDs String[] @db.ObjectId + following User[] @relation("UserFollows", fields: [followingIDs]) + followingIDs String[] @db.ObjectId +} +``` + + + diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/100-special-rules-for-referential-actions.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/100-special-rules-for-referential-actions.mdx new file mode 100644 index 0000000000..5a90ac3256 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/100-special-rules-for-referential-actions.mdx @@ -0,0 +1,255 @@ +--- +title: 'Special rules for referential actions in SQL Server and MongoDB' +metaTitle: 'Special rules for referential actions in SQL Server and MongoDB' +metaDescription: 'Circular references or multiple cascade paths can cause validation errors on Microsoft SQL Server and MongoDB. Since the database does not handle these situations out of the box, learn how to solve this problem.' +tocDepth: 3 +--- + + + +Some databases have specific requirements that you should consider if you are using referential actions. + +- Microsoft SQL Server doesn't allow cascading referential actions on a foreign key, if the relation chain causes a cycle or multiple cascade paths. If the referential actions on the foreign key are set to something other than `NO ACTION` (or `NoAction` if Prisma ORM is managing referential integrity), the server will check for cycles or multiple cascade paths and return an error when executing the SQL. + +- With MongoDB, using referential actions in Prisma ORM requires that for any data model with self-referential relations or cycles between three models, you must set the referential action of `NoAction` to prevent the referential action emulations from looping infinitely. Be aware that by default, the `relationMode = "prisma"` mode is used for MongoDB, which means that Prisma ORM manages [referential integrity](/orm/prisma-schema/data-model/relations/relation-mode). + +Given the SQL: + +```sql +CREATE TABLE [dbo].[Employee] ( + [id] INT NOT NULL IDENTITY(1,1), + [managerId] INT, + CONSTRAINT [PK__Employee__id] PRIMARY KEY ([id]) +); + +ALTER TABLE [dbo].[Employee] + ADD CONSTRAINT [FK__Employee__managerId] + FOREIGN KEY ([managerId]) REFERENCES [dbo].[Employee]([id]) + ON DELETE CASCADE ON UPDATE CASCADE; +``` + +When the SQL is run, the database would throw the following error: + +```terminal wrap +Introducing FOREIGN KEY constraint 'FK__Employee__managerId' on table 'Employee' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. +``` + +In more complicated data models, finding the cascade paths can get complex. Therefore in Prisma ORM, the data model is validated _before_ generating any SQL to be run during any migrations, highlighting relations that are part of the paths. This makes it much easier to find and break these action chains. + + + +## Self-relation (SQL Server and MongoDB) + +The following model describes a self-relation where an `Employee` can have a manager and managees, referencing entries of the same model. + +```prisma +model Employee { + id Int @id @default(autoincrement()) + manager Employee? @relation(name: "management", fields: [managerId], references: [id]) + managees Employee[] @relation(name: "management") + managerId Int? +} +``` + +This will result in the following error: + +```terminal wrap +Error parsing attribute "@relation": A self-relation must have `onDelete` and `onUpdate` referential actions set to `NoAction` in one of the @relation attributes. (Implicit default `onDelete`: `SetNull`, and `onUpdate`: `Cascade`) +``` + +By not defining any actions, Prisma ORM will use the following default values depending if the underlying [scalar fields](/orm/prisma-schema/data-model/models#scalar-fields) are set to be optional or required. + +| Clause | All of the scalar fields are optional | At least one scalar field is required | +| :--------- | :------------------------------------ | :------------------------------------ | +| `onDelete` | `SetNull` | `NoAction` | +| `onUpdate` | `Cascade` | `Cascade` | + +Since the default referential action for `onUpdate` in the above relation would be `Cascade` and for `onDelete` it would be `SetNull`, it creates a cycle and the solution is to explicitly set the `onUpdate` and `onDelete` values to `NoAction`. + +```prisma highlight=3;delete|4;add +model Employee { + id Int @id @default(autoincrement()) + //delete-next-line + manager Employee @relation(name: "management", fields: [managerId], references: [id]) + //add-next-line + manager Employee @relation(name: "management", fields: [managerId], references: [id], onDelete: NoAction, onUpdate: NoAction) + managees Employee[] @relation(name: "management") + managerId Int +} +``` + +## Cyclic relation between three tables (SQL Server and MongoDB) + +The following models describe a cyclic relation between a `Chicken`, an `Egg` and a `Fox`, where each model references the other. + +```prisma +model Chicken { + id Int @id @default(autoincrement()) + egg Egg @relation(fields: [eggId], references: [id]) + eggId Int + predators Fox[] +} + +model Egg { + id Int @id @default(autoincrement()) + predator Fox @relation(fields: [predatorId], references: [id]) + predatorId Int + parents Chicken[] +} + +model Fox { + id Int @id @default(autoincrement()) + meal Chicken @relation(fields: [mealId], references: [id]) + mealId Int + foodStore Egg[] +} +``` + +This will result in three validation errors in every relation field that is part of the cycle. + +The first one is in the relation `egg` in the `Chicken` model: + +```terminal wrap +Error parsing attribute "@relation": Reference causes a cycle. One of the @relation attributes in this cycle must have `onDelete` and `onUpdate` referential actions set to `NoAction`. Cycle path: Chicken.egg → Egg.predator → Fox.meal. (Implicit default `onUpdate`: `Cascade`) +``` + +The second one is in the relation `predator` in the `Egg` model: + +```terminal wrap +Error parsing attribute "@relation": Reference causes a cycle. One of the @relation attributes in this cycle must have `onDelete` and `onUpdate` referential actions set to `NoAction`. Cycle path: Egg.predator → Fox.meal → Chicken.egg. (Implicit default `onUpdate`: `Cascade`) +``` + +And the third one is in the relation `meal` in the `Fox` model: + +```terminal wrap +Error parsing attribute "@relation": Reference causes a cycle. One of the @relation attributes in this cycle must have `onDelete` and `onUpdate` referential actions set to `NoAction`. Cycle path: Fox.meal → Chicken.egg → Egg.predator. (Implicit default `onUpdate`: `Cascade`) +``` + +As the relation fields are required, the default referential action for `onDelete` is `NoAction` but for `onUpdate` it is `Cascade`, which causes a referential action cycle. The solution is to set the `onUpdate` value to `NoAction` in any one of the relations. + +```prisma highlight=3;delete|4;add +model Chicken { + id Int @id @default(autoincrement()) + //delete-next-line + egg Egg @relation(fields: [eggId], references: [id]) + //add-next-line + egg Egg @relation(fields: [eggId], references: [id], onUpdate: NoAction) + eggId Int + predators Fox[] +} +``` + +or + +```prisma highlight=3;delete|4;add +model Egg { + id Int @id @default(autoincrement()) + //delete-next-line + predator Fox @relation(fields: [predatorId], references: [id]) + //add-next-line + predator Fox @relation(fields: [predatorId], references: [id], onUpdate: NoAction) + predatorId Int + parents Chicken[] +} +``` + +or + +```prisma highlight=3;delete|4;add +model Fox { + id Int @id @default(autoincrement()) + //delete-next-line + meal Chicken @relation(fields: [mealId], references: [id]) + //add-next-line + meal Chicken @relation(fields: [mealId], references: [id], onUpdate: NoAction) + mealId Int + foodStore Egg[] +} +``` + +## Multiple cascade paths between two models (SQL Server only) + +The data model describes two different paths between same models, with both relations triggering cascading referential actions. + +```prisma +model User { + id Int @id @default(autoincrement()) + comments Comment[] + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + authorId Int + author User @relation(fields: [authorId], references: [id]) + comments Comment[] +} + +model Comment { + id Int @id @default(autoincrement()) + writtenById Int + postId Int + writtenBy User @relation(fields: [writtenById], references: [id]) + post Post @relation(fields: [postId], references: [id]) +} +``` + +The problem in this data model is how there are two paths from `Comment` to the `User`, and how the default `onUpdate` action in both relations is `Cascade`. This leads into two validation errors: + +The first one is in the relation `writtenBy`: + +```terminal wrap +Error parsing attribute "@relation": When any of the records in model `User` is updated or deleted, the referential actions on the relations cascade to model `Comment` through multiple paths. Please break one of these paths by setting the `onUpdate` and `onDelete` to `NoAction`. (Implicit default `onUpdate`: `Cascade`) +``` + +The second one is in the relation `post`: + +```terminal wrap +Error parsing attribute "@relation": When any of the records in model `User` is updated or deleted, the referential actions on the relations cascade to model `Comment` through multiple paths. Please break one of these paths by setting the `onUpdate` and `onDelete` to `NoAction`. (Implicit default `onUpdate`: `Cascade`) +``` + +The error means that by updating a primary key in a record in the `User` model, the update will cascade once between the `Comment` and `User` through the `writtenBy` relation, and again through the `Post` model from the `post` relation due to `Post` being related with the `Comment` model. + +The fix is to set the `onUpdate` referential action to `NoAction` in the `writtenBy` or `post` relation fields, or from the `Post` model by changing the actions in the `author` relation: + +```prisma highlight=5;delete|6;add +model Comment { + id Int @id @default(autoincrement()) + writtenById Int + postId Int + //delete-next-line + writtenBy User @relation(fields: [writtenById], references: [id]) + //add-next-line + writtenBy User @relation(fields: [writtenById], references: [id], onUpdate: NoAction) + post Post @relation(fields: [postId], references: [id]) +} +``` + +or + +```prisma highlight=6;delete|7;add +model Comment { + id Int @id @default(autoincrement()) + writtenById Int + postId Int + writtenBy User @relation(fields: [writtenById], references: [id]) + //delete-next-line + post Post @relation(fields: [postId], references: [id]) + //add-next-line + post Post @relation(fields: [postId], references: [id], onUpdate: NoAction) +} +``` + +or + +```prisma highlight=4;delete|5;add +model Post { + id Int @id @default(autoincrement()) + authorId Int + //delete-next-line + author User @relation(fields: [authorId], references: [id]) + //add-next-line + author User @relation(fields: [authorId], references: [id], onUpdate: NoAction) + comments Comment[] +} +``` diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/index.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/index.mdx new file mode 100644 index 0000000000..32b737803f --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/index.mdx @@ -0,0 +1,516 @@ +--- +title: 'Referential actions' +metaTitle: 'Referential actions' +metaDescription: 'Referential actions let you define the update and delete behavior of related models on the database level' +tocDepth: 3 +--- + + + +Referential actions determine what happens to a record when your application deletes or updates a related record. + +From version 2.26.0, you can define referential actions on the relation fields in your Prisma schema. This allows you to define referential actions like cascading deletes and cascading updates at a Prisma ORM level. + + + +**Version differences** + +- If you use version 3.0.1 or later, you can use referential actions as described on this page. +- If you use a version between 2.26.0 and 3.0.0, you can use referential actions as described on this page, but you must [enable the preview feature flag](/orm/reference/preview-features/client-preview-features#enabling-a-prisma-client-preview-feature) `referentialActions`. +- If you use version 2.25.0 or earlier, you can configure cascading deletes manually in your database. + + + +In the following example, adding `onDelete: Cascade` to the `author` field on the `Post` model means that deleting the `User` record will also delete all related `Post` records. + +```prisma file=schema.prisma highlight=4;normal showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id], onDelete: Cascade) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +If you do not specify a referential action, Prisma ORM [uses a default](#referential-action-defaults). + + + + + +If you upgrade from a version earlier than 2.26.0: +It is extremely important that you check the [upgrade paths for referential actions](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-3/referential-actions) section. Prisma ORM's support of referential actions **removes the safety net in Prisma Client that prevents cascading deletes at runtime**. If you use the feature _without upgrading your database_, the [old default action](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-3/referential-actions#prisma-orm-2x-default-referential-actions) - `ON DELETE CASCADE` - becomes active. This might result in cascading deletes that you did not expect. + + + +## What are referential actions? + +Referential actions are policies that define how a referenced record is handled by the database when you run an [`update`](/orm/prisma-client/queries/crud#update) or [`delete`](/orm/prisma-client/queries/crud#delete) query. + +
+ +Referential actions on the database level + +Referential actions are features of foreign key constraints that exist to preserve referential integrity in your database. + +When you define relationships between data models in your Prisma schema, you use [relation fields](/orm/prisma-schema/data-model/relations#relation-fields), **which do not exist on the database**, and [scalar fields](/orm/prisma-schema/data-model/models#scalar-fields), **which do exist on the database**. These foreign keys connect the models on the database level. + +Referential integrity states that these foreign keys must reference an existing primary key value in the related database table. In your Prisma schema, this is generally represented by the `id` field on the related model. + +By default a database will reject any operation that violates the referential integrity, for example, by deleting referenced records. + +
+ +### How to use referential actions + +Referential actions are defined in the [`@relation`](/orm/reference/prisma-schema-reference#relation) attribute and map to the actions on the **foreign key constraint** in the underlying database. If you do not specify a referential action, [Prisma ORM falls back to a default](#referential-action-defaults). + +The following model defines a one-to-many relation between `User` and `Post` and a many-to-many relation between `Post` and `Tag`, with explicitly defined referential actions: + +```prisma file=schema.prisma highlight=10,16-17;normal showLineNumbers +model User { + id Int @id @default(autoincrement()) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + title String + tags TagOnPosts[] + User User? @relation(fields: [userId], references: [id], onDelete: SetNull, onUpdate: Cascade) + userId Int? +} + +model TagOnPosts { + id Int @id @default(autoincrement()) + post Post? @relation(fields: [postId], references: [id], onUpdate: Cascade, onDelete: Cascade) + tag Tag? @relation(fields: [tagId], references: [id], onUpdate: Cascade, onDelete: Cascade) + postId Int? + tagId Int? +} + +model Tag { + id Int @id @default(autoincrement()) + name String @unique + posts TagOnPosts[] +} +``` + +This model explicitly defines the following referential actions: + +- If you delete a `Tag`, the corresponding tag assignment is also deleted in `TagOnPosts`, using the `Cascade` referential action +- If you delete a `User`, the author is removed from all posts by setting the field value to `Null`, because of the `SetNull` referential action. To allow this, `User` and `userId` must be optional fields in `Post`. + +Prisma ORM supports the following referential actions: + +- [`Cascade`](#cascade) +- [`Restrict`](#restrict) +- [`NoAction`](#noaction) +- [`SetNull`](#setnull) +- [`SetDefault`](#setdefault) + +### Referential action defaults + +If you do not specify a referential action, Prisma ORM uses the following defaults: + +| Clause | Optional relations | Mandatory relations | +| :--------- | :----------------- | :------------------ | +| `onDelete` | `SetNull` | `Restrict` | +| `onUpdate` | `Cascade` | `Cascade` | + +For example, in the following schema all `Post` records must be connected to a `User` via the `author` relation: + +```prisma highlight=4;normal +model Post { + id Int @id @default(autoincrement()) + title String + //highlight-next-line + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +The schema does not explicitly define referential actions on the mandatory `author` relation field, which means that the default referential actions of `Restrict` for `onDelete` and `Cascade` for `onUpdate` apply. + +## Caveats + +The following caveats apply: + +- Referential actions are **not** supported on [implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations). To use referential actions, you must define an explicit many-to-many relation and define your referential actions on the [join table](/orm/prisma-schema/data-model/relations/troubleshooting-relations#how-to-use-a-relation-table-with-a-many-to-many-relationship). +- Certain combinations of referential actions and required/optional relations are incompatible. For example, using `SetNull` on a required relation will lead to database errors when deleting referenced records because the non-nullable constraint would be violated. See [this GitHub issue](https://github.com/prisma/prisma/issues/7909) for more information. + +## Types of referential actions + +The following table shows which referential action each database supports. + +| Database | Cascade | Restrict | NoAction | SetNull | SetDefault | +| :------------ | :------ | :------- | :------- | :------ | :--------- | +| PostgreSQL | ✔️ | ✔️ | ✔️ | ✔️⌘ | ✔️ | +| MySQL/MariaDB | ✔️ | ✔️ | ✔️ | ✔️ | ❌ (✔️†) | +| SQLite | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| SQL Server | ✔️ | ❌‡ | ✔️ | ✔️ | ✔️ | +| CockroachDB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| MongoDB†† | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | + +- † See [special cases for MySQL](#mysqlmariadb). +- ⌘ See [special cases for PostgreSQL](#postgresql). +- ‡ See [special cases for SQL Server](#sql-server). +- †† Referential actions for MongoDB are available in Prisma ORM versions 3.7.0 and later. + +### Special cases for referential actions + +Referential actions are part of the ANSI SQL standard. However, there are special cases where some relational databases diverge from the standard. + +#### MySQL/MariaDB + +MySQL/MariaDB, and the underlying InnoDB storage engine, does not support `SetDefault`. The exact behavior depends on the database version: + +- In MySQL versions 8 and later, and MariaDB versions 10.5 and later, `SetDefault` effectively acts as an alias for `NoAction`. You can define tables using the `SET DEFAULT` referential action, but a foreign key constraint error is triggered at runtime. +- In MySQL versions 5.6 and later, and MariaDB versions before 10.5, attempting to create a table definition with the `SET DEFAULT` referential action fails with a syntax error. + +For this reason, when you set `mysql` as the database provider, Prisma ORM warns users to replace `SetDefault` referential actions in the Prisma schema with another action. + +#### PostgreSQL + +PostgreSQL is the only database supported by Prisma ORM that allows you to define a `SetNull` referential action that refers to a non-nullable field. However, this raises a foreign key constraint error when the action is triggered at runtime. + +For this reason, when you set `postgres` as the database provider in the (default) `foreignKeys` relation mode, Prisma ORM warns users to mark as optional any fields that are included in a `@relation` attribute with a `SetNull` referential action. For all other database providers, Prisma ORM rejects the schema with a validation error. + +#### SQL Server + +[`Restrict`](#restrict) is not available for SQL Server databases, but you can use [`NoAction`](#noaction) instead. + +### `Cascade` + +- `onDelete: Cascade` Deleting a referenced record will trigger the deletion of referencing record. +- `onUpdate: Cascade` Updates the relation scalar fields if the referenced scalar fields of the dependent record are updated. + +#### Example usage + +```prisma file=schema.prisma highlight=4;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + //add-next-line + author User @relation(fields: [authorId], references: [id], onDelete: Cascade, onUpdate: Cascade) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +##### Result of using `Cascade` + +If a `User` record is deleted, then their posts are deleted too. If the user's `id` is updated, then the corresponding `authorId` is also updated. + +##### How to use cascading deletes + +
+ +
+ +### `Restrict` + +- `onDelete: Restrict` Prevents the deletion if any referencing records exist. +- `onUpdate: Restrict` Prevents the identifier of a referenced record from being changed. + +#### Example usage + +```prisma file=schema.prisma highlight=4;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + //add-next-line + author User @relation(fields: [authorId], references: [id], onDelete: Restrict, onUpdate: Restrict) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +##### Result of using `Restrict` + +`User`s with posts **cannot** be deleted. The `User`'s `id` **cannot** be changed. + + + +The `Restrict` action is **not** available on [Microsoft SQL Server](/orm/overview/databases/sql-server) and triggers a schema validation error. Instead, you can use [`NoAction`](#noaction), which produces the same result and is compatible with SQL Server. + + + +### `NoAction` + +The `NoAction` action is similar to `Restrict`, the difference between the two is dependent on the database being used: + +- **PostgreSQL**: `NoAction` allows the check (if a referenced row on the table exists) to be deferred until later in the transaction. See [the PostgreSQL docs](https://www.postgresql.org/docs/current/ddl-constraints.html#DDL-CONSTRAINTS-FK) for more information. +- **MySQL**: `NoAction` behaves exactly the same as `Restrict`. See [the MySQL docs](https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html#foreign-key-referential-actions) for more information. +- **SQLite**: When a related primary key is modified or deleted, no action is taken. See [the SQLite docs](https://www.sqlite.org/foreignkeys.html#fk_actions) for more information. +- **SQL Server**: When a referenced record is deleted or modified, an error is raised. See [the SQL Server docs](https://learn.microsoft.com/en-us/sql/relational-databases/tables/graph-edge-constraints?view=sql-server-ver15#on-delete-referential-actions-on-edge-constraints) for more information. +- **MongoDB** (in preview from version 3.6.0): When a record is modified or deleted, nothing is done to any related records. + + + +If you are [managing relations in Prisma Client](/orm/prisma-schema/data-model/relations/relation-mode#emulate-relations-in-prisma-orm-with-the-prisma-relation-mode) rather than using foreign keys in the database, you should be aware that currently Prisma ORM only implements the referential actions. Foreign keys also create constraints, which make it impossible to manipulate data in a way that would violate these constraints: instead of executing the query, the database responds with an error. These constraints will not be created if you emulate referential integrity in Prisma Client, so if you set the referential action to `NoAction` there will be no checks to prevent you from breaking the referential integrity. + + + +#### Example usage + +```prisma file=schema.prisma highlight=4;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + //add-next-line + author User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +##### Result of using `NoAction` + +`User`'s with posts **cannot** be deleted. The `User`'s `id` **cannot** be changed. + +### `SetNull` + +- `onDelete: SetNull` The scalar field of the referencing object will be set to `NULL`. + +- `onUpdate: SetNull` When updating the identifier of a referenced object, the scalar fields of the referencing objects will be set to `NULL`. + +`SetNull` will only work on optional relations. On required relations, a runtime error will be thrown since the scalar fields cannot be null. + +```prisma file=schema.prisma highlight=4;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + //add-next-line + author User? @relation(fields: [authorId], references: [id], onDelete: SetNull, onUpdate: SetNull) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +##### Result of using `SetNull` + +When deleting a `User`, the `authorId` will be set to `NULL` for all its authored posts. + +When changing a `User`'s `id`, the `authorId` will be set to `NULL` for all its authored posts. + +### `SetDefault` + +- `onDelete: SetDefault` The scalar field of the referencing object will be set to the fields default value. + +- `onUpdate: SetDefault` The scalar field of the referencing object will be set to the fields default value. + +These require setting a default for the relation scalar field with [`@default`](/orm/reference/prisma-schema-reference#default). If no defaults are provided for any of the scalar fields, a runtime error will be thrown. + +```prisma file=schema.prisma highlight=4,5;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + //add-start + authorUsername String? @default("anonymous") + author User? @relation(fields: [authorUsername], references: [username], onDelete: SetDefault, onUpdate: SetDefault) + //add-end +} + +model User { + username String @id + posts Post[] +} +``` + +##### Result of using `SetDefault` + +When deleting a `User`, its existing posts' `authorUsername` field values will be set to 'anonymous'. + +When the `username` of a `User` changes, its existing posts' `authorUsername` field values will be set to 'anonymous'. + +### Database-specific requirements + +MongoDB and SQL Server have specific requirements for referential actions if you have [self-relations](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions#self-relation-sql-server-and-mongodb) or [cyclic relations](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions#cyclic-relation-between-three-tables-sql-server-and-mongodb) in your data model. SQL Server also has specific requirements if you have relations with [multiple cascade paths](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions#multiple-cascade-paths-between-two-models-sql-server-only). + +## Upgrade paths from versions 2.25.0 and earlier + +There are a couple of paths you can take when upgrading which will give different results depending on the desired outcome. + +If you currently use the migration workflow, you can run an introspection to check how the defaults are reflected in your schema. You can then manually update your database if you need to. + +You can also decide to skip checking the defaults and run a migration to update your database with the [new default values](#referential-action-defaults). + +The following assumes you have upgraded to 2.26.0 or newer and enabled the preview feature flag, or upgraded to 3.0.0 or newer: + +### Using Introspection + +If you [Introspect](/orm/prisma-schema/introspection) your database, the referential actions configured at the database level will be reflected in your Prisma Schema. If you have been using Prisma Migrate or `prisma db push` to manage the database schema, these are likely to be the [default values](#referential-action-defaults) from 2.25.0 and earlier. + +When you run an Introspection, Prisma ORM compares all the foreign keys in the database with the schema, if the SQL statements `ON DELETE` and `ON UPDATE` do **not** match the default values, they will be explicitly set in the schema file. + +After introspecting, you can review the non-default clauses in your schema. The most important clause to review is `onDelete`, which defaults to `Cascade` in 2.25.0 and earlier. + + + +If you are using either the [`delete()`](/orm/prisma-client/queries/crud#delete-a-single-record) or [`deleteMany()`](/orm/prisma-client/queries/crud#delete-all-records) methods, **[cascading deletes](#how-to-use-cascading-deletes) will now be performed** as the `referentialActions` preview feature **removed the safety net in Prisma Client that previously prevented cascading deletes at runtime**. Be sure to check your code and make any adjustments accordingly. + + + +Make sure you are happy with every case of `onDelete: Cascade` in your schema. If not, either: + +- Modify your Prisma schema and `db push` or `dev migrate` to change the database + +_or_ + +- Manually update the underlying database if you use an introspection-only workflow + +The following example would result in a cascading delete, if the `User` is deleted then all of their `Post`'s will be deleted too. + +#### A blog schema example + +```prisma highlight=4;add showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + //add-next-line + author User @relation(fields: [authorId], references: [id], onDelete: Cascade) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +### Using Migration + +When running a [Migration](/orm/prisma-migrate) (or the [`prisma db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) command) the [new defaults](#referential-action-defaults) will be applied to your database. + + + +Unlike when you run an Introspect for the first time, the new referential actions clause and property, will **not** automatically be added to your prisma schema by the Prisma VSCode extension. +You will have to manually add them if you wish to use anything other than the new defaults. + + + +Explicitly defining referential actions in your Prisma schema is optional. If you do not explicitly define a referential action for a relation, Prisma ORM uses the [new defaults](#referential-action-defaults). + +Note that referential actions can be added on a case by case basis. This means that you can add them to one single relation and leave the rest set to the defaults by not manually specifying anything. + +### Checking for errors + +**Before** upgrading to 2.26.0 and enabling the referential actions **preview feature**, Prisma ORM prevented the deletion of records while using `delete()` or `deleteMany()` to preserve referential integrity. A custom runtime error would be thrown by Prisma Client with the error code `P2014`. + +**After** upgrading and enabling the referential actions **preview feature**, Prisma ORM no longer performs runtime checks. You can instead specify a custom referential action to preserve the referential integrity between relations. + +When you use [`NoAction`](#noaction) or [`Restrict`](#restrict) to prevent the deletion of records, the error messages will be different post 2.26.0 compared to pre 2.26.0. This is because they are now triggered by the database and **not** Prisma Client. The new error code that can be expected is `P2003`. + +To make sure you catch these new errors you can adjust your code accordingly. + +#### Example of catching errors + +The following example uses the below blog schema with a one-to-many relationship between `Post` and `User` and sets a [`Restrict`](#restrict) referential actions on the `author` field. + +This means that if a user has a post, that user (and their posts) **cannot** be deleted. + +```prisma file=schema.prisma showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id], onDelete: Restrict) + authorId String +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +Prior to upgrading and enabling the referential actions **preview feature**, the error code you would receive when trying to delete a user which has posts would be `P2014` and it's message: + +> "The change you are trying to make would violate the required relation '\{relation_name}' between the \{model_a_name\} and \{model_b_name\} models." + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + try { + await prisma.user.delete({ + where: { + id: 'some-long-id', + }, + }) + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + if (error.code === 'P2014') { + console.log(error.message) + } + } + } +} + +main() +``` + +To make sure you are checking for the correct errors in your code, modify your check to look for `P2003`, which will deliver the message: + +> "Foreign key constraint failed on the field: \{field_name\}" + +```ts highlight=14;delete|15;add +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + try { + await prisma.user.delete({ + where: { + id: 'some-long-id' + } + }) + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + if (error.code === 'P2014') { + if (error.code === 'P2003') { + console.log(error.message) + } + } + } +} + +main() +``` diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/420-relation-mode.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/420-relation-mode.mdx new file mode 100644 index 0000000000..a054e7d778 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/420-relation-mode.mdx @@ -0,0 +1,260 @@ +--- +title: 'Relation mode' +metaTitle: 'Manage relations between records with relation modes in Prisma' +metaDescription: 'Manage relations between records with relation modes in Prisma' +tocDepth: 3 +--- + +In Prisma schema, relations between records are defined with the [`@relation`](/orm/reference/prisma-schema-reference#relation) attribute. For example, in the following schema there is a one-to-many relation between the `User` and `Post` models: + +```prisma file=schema.prisma highlight=4,5,10;normal showLineNumbers +model Post { + id Int @id @default(autoincrement()) + title String + //highlight-start + author User @relation(fields: [authorId], references: [id], onDelete: Cascade, onUpdate: Cascade) + authorId Int + //highlight-end +} + +model User { + id Int @id @default(autoincrement()) + //highlight-next-line + posts Post[] +} +``` + +Prisma ORM has two _relation modes_, `foreignKeys` and `prisma`, that specify how relations between records are enforced. + +If you use Prisma ORM with a relational database, then by default Prisma ORM uses the [`foreignKeys` relation mode](#handle-relations-in-your-relational-database-with-the-foreignkeys-relation-mode), which enforces relations between records at the database level with foreign keys. A foreign key is a column or group of columns in one table that take values based on the primary key in another table. Foreign keys allow you to: + +- set constraints that prevent you from making changes that break references +- set [referential actions](/orm/prisma-schema/data-model/relations/referential-actions) that define how changes to records are handled + +Together these constraints and referential actions guarantee the _referential integrity_ of the data. + +For the example schema above, Prisma Migrate will generate the following SQL by default if you use the PostgreSQL connector: + +```sql highlight=19-22;normal + +-- CreateTable +CREATE TABLE "Post" ( + "id" SERIAL NOT NULL, + "title" TEXT NOT NULL, + "authorId" INTEGER NOT NULL, + + CONSTRAINT "Post_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +//highlight-start +ALTER TABLE "Post" + ADD CONSTRAINT "Post_authorId_fkey" + FOREIGN KEY ("authorId") + REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; +//highlight-end +``` + +In this case, the foreign key constraint on the `authorId` column of the `Post` table references the `id` column of the `User` table, and guarantees that a post must have an author that exists. If you update or delete a user then the `ON DELETE` and `ON UPDATE` referential actions specify the `CASCADE` option, which will also delete or update all posts belonging to the user. + +Some databases, such as MongoDB or [PlanetScale](/orm/overview/databases/planetscale#differences-to-consider), do not support foreign keys. Additionally, in some cases developers may prefer not to use foreign keys in their relational database that usually does support foreign keys. For these situations, Prisma ORM offers [the `prisma` relation mode](#emulate-relations-in-prisma-orm-with-the-prisma-relation-mode), which emulates some properties of relations in relational databases. When you use Prisma Client with the `prisma` relation mode enabled, the behavior of queries is identical or similar, but referential actions and some constraints are handled by the Prisma engine rather than in the database. + + + There are performance implications to emulation of referential integrity and + referential actions in Prisma Client. In cases where the underlying database + supports foreign keys, it is usually the preferred choice. + + +## How to set the relation mode in your Prisma schema + +To set the relation mode, add the `relationMode` field in the `datasource` block: + +```prisma file=schema.prisma highlight=4,9;add showLineNumbers +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + //add-next-line + relationMode = "prisma" +} +``` + + + +The ability to set the relation mode was introduced as part of the `referentialIntegrity` preview feature in Prisma ORM version 3.1.1, and is generally available in Prisma ORM versions 4.8.0 and later.

The `relationMode` field was renamed in Prisma ORM version 4.5.0, and was previously named `referentialIntegrity`. + +
+ +For relational databases, the available options are: + +- `foreignKeys`: this handles relations in the database with foreign keys. This is the default option for all relational database connectors and is active if no `relationMode` is explicitly set in the `datasource` block. +- `prisma`: this emulates relations in Prisma Client. You should also [enable this option](/orm/overview/databases/planetscale#option-1-emulate-relations-in-prisma-client) when you use the MySQL connector with a PlanetScale database and don't have native foreign key constraints enabled in your PlanetScale database settings. + +For MongoDB, the only available option is the `prisma` relation mode. This mode is also active if no `relationMode` is explicitly set in the `datasource` block. + + + +If you switch between relation modes, Prisma ORM will add or remove foreign keys to your database next time you apply changes to your schema with Prisma Migrate or `db push`. See [Switch between relation modes](#switch-between-relation-modes) for more information. + + + +## Handle relations in your relational database with the `foreignKeys` relation mode + +The `foreignKeys` relation mode handles relations in your relational database with foreign keys. This is the default option when you use a relational database connector (PostgreSQL, MySQL, SQLite, SQL Server, CockroachDB). + +The `foreignKeys` relation mode is not available when you use the MongoDB connector. Some relational databases, [such as PlanetScale](/orm/overview/databases/planetscale#option-1-emulate-relations-in-prisma-client), also forbid the use of foreign keys. In these cases, you should instead [emulate relations in Prisma ORM with the `prisma` relation mode](#emulate-relations-in-prisma-orm-with-the-prisma-relation-mode). + +### Referential integrity + +The `foreignKeys` relation mode maintains referential integrity at the database level with foreign key constraints and referential actions. + +#### Foreign key constraints + +When you _create_ or _update_ a record with a relation to another record, the related record needs to exist. Foreign key constraints enforce this behavior in the database. If the record does not exist, the database will return an error message. + +#### Referential actions + +When you _update_ or _delete_ a record with a relation to another record, referential actions are triggered in the database. To maintain referential integrity in related records, referential actions prevent changes that would break referential integrity, cascade changes through to related records, or set the value of fields that reference the updated or deleted records to a `null` or default value. + +For more information, see the [referential actions](/orm/prisma-schema/data-model/relations/referential-actions) page. + +### Introspection + +When you introspect a relational database with the `db pull` command with the `foreignKeys` relation mode enabled, a `@relation` attribute will be added to your Prisma schema for relations where foreign keys exist. + +### Prisma Migrate and `db push` + +When you apply changes to your Prisma schema with Prisma Migrate or `db push` with the `foreignKeys` relation mode enabled, foreign keys will be created in your database for all `@relation` attributes in your schema. + +## Emulate relations in Prisma ORM with the `prisma` relation mode + +The `prisma` relation mode emulates some foreign key constraints and referential actions for each Prisma Client query to maintain referential integrity, using some additional database queries and logic. + +The `prisma` relation mode is the default option for the MongoDB connector. It should also be set if you use a relational database that does not support foreign keys. For example, [if you use PlanetScale](/orm/overview/databases/planetscale#option-1-emulate-relations-in-prisma-client) without foreign key constraints, you should use the `prisma` relation mode. + + + There are performance implications to emulation of referential integrity in + Prisma Client, because it uses additional database queries to maintain + referential integrity. In cases where the underlying database can handle + referential integrity with foreign keys, it is usually the preferred choice. + + +Emulation of relations is only available for Prisma Client queries and does not apply to raw queries. + +### Which foreign key constraints are emulated? + +When you _update_ a record, Prisma ORM will emulate foreign key constraints. This means that when you update a record with a relation to another record, the related record needs to exist. If the record does not exist, Prisma Client will return an error message. + +However, when you _create_ a record, Prisma ORM does not emulate any foreign key constraints. You will be able to create invalid data. + +### Which referential actions are emulated? + +When you _update_ or _delete_ a record with related records, Prisma ORM will emulate referential actions. + +The following table shows which emulated referential actions are available for each database connector: + +| Database | Cascade | Restrict | NoAction | SetNull | SetDefault | +| :---------- | :------ | :------- | :------- | :------ | :--------- | +| PostgreSQL | **✔️** | **✔️** | **❌**‡ | **✔️** | **❌**† | +| MySQL | **✔️** | **✔️** | **✔️** | **✔️** | **❌**† | +| SQLite | **✔️** | **✔️** | **❌**‡ | **✔️** | **❌**† | +| SQL Server | **✔️** | **✔️** | **✔️** | **✔️** | **❌**† | +| CockroachDB | **✔️** | **✔️** | **✔️** | **✔️** | **❌**† | +| MongoDB | **✔️** | **✔️** | **✔️** | **✔️** | **❌**† | + +- † The `SetDefault` referential action is not supported in the `prisma` relation mode. +- ‡ The `NoAction` referential action is not supported in the `prisma` relation mode for PostgreSQL and SQLite. Instead, use the `Restrict` action. + +### Error messages + +Error messages returned by emulated constraints and referential actions in the `prisma` relation mode are generated by Prisma Client and differ slightly from the error messages in the `foreignKeys` relation mode: + +```jsx +Example: +// foreignKeys: +... Foreign key constraint failed on the field: `ProfileOneToOne_userId_fkey (index)` +// prisma: +... The change you are trying to make would violate the required relation 'ProfileOneToOneToUserOneToOne' between the `ProfileOneToOne` and `UserOneToOne` models. +``` + +### Introspection + +When you introspect a database with the `db pull` command with the `prisma` relation mode enabled, relations will not be automatically added to your schema. You will instead need to add any relations manually with the `@relation` attribute. This only needs to be done once – next time you introspect your database, Prisma ORM will keep your added `@relation` attributes. + +### Prisma Migrate and `db push` + +When you apply changes to your Prisma schema with Prisma Migrate or `db push` with the `prisma` relation mode enabled, Prisma ORM will not use foreign keys in your database. + +### Indexes + +In relational databases that use foreign key constraints, the database usually also implicitly creates an index for the foreign key columns. For example, [MySQL will create an index on all foreign key columns](https://dev.mysql.com/doc/refman/8.0/en/constraint-foreign-key.html#:~:text=MySQL%20requires%20that%20foreign%20key%20columns%20be%20indexed%3B%20if%20you%20create%20a%20table%20with%20a%20foreign%20key%20constraint%20but%20no%20index%20on%20a%20given%20column%2C%20an%20index%20is%20created.). This is to allow foreign key checks to run fast and not require a table scan. + +The `prisma` relation mode does not use foreign keys, so no indexes are created when you use Prisma Migrate or `db push` to apply changes to your database. You instead need to manually add an index on your relation scalar fields with the [`@@index`](/orm/reference/prisma-schema-reference#index) attribute (or the [`@unique`](/orm/reference/prisma-schema-reference#unique), [`@@unique`](/orm/reference/prisma-schema-reference#unique-1) or [`@@id`](/orm/reference/prisma-schema-reference#id-1) attributes, if applicable). + +#### Index validation + +If you do not add the index manually, queries might require full table scans. This can be slow, and also expensive on database providers that bill per accessed row. To help avoid this, Prisma ORM warns you when your schema contains fields that are used in a `@relation` that does not have an index defined. For example, take the following schema with a relation between the `User` and `Post` models: + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + relationMode = "prisma" +} + +model User { + id Int @id + posts Post[] +} + +model Post { + id Int @id + userId Int + user User @relation(fields: [userId], references: [id]) +} +``` + +Prisma ORM displays the following warning when you run `prisma format` or `prisma validate`: + +```terminal wrap +With `relationMode = "prisma"`, no foreign keys are used, so relation fields will not benefit from the index usually created by the relational database under the hood. This can lead to poor performance when querying these fields. We recommend adding an index manually. +``` + +To fix this, add an index to your `Post` model: + +```prisma file=schema.prisma highlight=6;add showLineNumbers +model Post { + id Int @id + userId Int + user User @relation(fields: [userId], references: [id]) + + //add-next-line + @@index([userId]) +} +``` + +If you use the [Prisma VS Code extension](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma) (or our [language server in another editor](/orm/more/development-environment/editor-setup)), the warning is augmented with a Quick Fix that adds the required index for you: + +![The Quick Fix pop-up for adding an index on a relation scalar field in VS Code](./quick-fix-index.png) + +## Switch between relation modes + +It is only possible to switch between relation modes when you use a relational database connector (PostgreSQL, MySQL, SQLite, SQL Server, CockroachDB). + +### Switch from `foreignKeys` to `prisma` + +The default relation mode if you use a relational database and do not include the `relationMode` field in your `datasource` block is `foreignKeys`. To switch to the `prisma` relation mode, add the `relationMode` field with a value of `prisma`, or update the `relationMode` field value to `prisma` if it already exists. + +When you switch the relation mode from `foreignKeys` to `prisma`, after you first apply changes to your schema with Prisma Migrate or `db push` Prisma ORM will remove all previously created foreign keys in the next migration. + +If you keep the same database, you can then continue to work as normal. If you switch to a database that does not support foreign keys at all, your existing migration history contains SQL DDL that creates foreign keys, which might trigger errors if you ever have to rerun these migrations. In this case, we recommend that you delete the `migrations` directory. (If you use PlanetScale, which does not support foreign keys, we generally recommend that you [use `db push` rather than Prisma Migrate](/orm/overview/databases/planetscale#differences-to-consider).) + +### Switch from `prisma` to `foreignKeys` + +To switch from the `prisma` relation mode to the `foreignKeys` relation mode, update the `relationMode` field value from `prisma` to `foreignKeys`. To do this, the database must support foreign keys. When you apply changes to your schema with Prisma Migrate or `db push` for the first time after you switch relation modes, Prisma ORM will create foreign keys for all relations in the next migration. diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/500-troubleshooting-relations.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/500-troubleshooting-relations.mdx new file mode 100644 index 0000000000..ae6099e39b --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/500-troubleshooting-relations.mdx @@ -0,0 +1,283 @@ +--- +title: Troubleshooting relations +metaDescriptions: Common problems and solutions when defining relations in the Prisma schema. +--- + + + +Modelling your schema can sometimes offer up some unexpected results. This section aims to cover the most prominent of those. + + + +## Implicit many-to-many self-relations return incorrect data if order of relation fields change + +### Problem + +In the following implicit many-to-many self-relation, the lexicographic order of relation fields in `a_eats` (1) and `b_eatenBy` (2): + +```prisma highlight=4,5;normal +model Animal { + id Int @id @default(autoincrement()) + name String + //highlight-start + a_eats Animal[] @relation(name: "FoodChain") + b_eatenBy Animal[] @relation(name: "FoodChain") + //highlight-end +} +``` + +The resulting relation table in SQL looks as follows, where `A` represents prey (`a_eats`) and `B` represents predators (`b_eatenBy`): + +| A | B | +| :----------- | :--------- | +| 8 (Plankton) | 7 (Salmon) | +| 7 (Salmon) | 9 (Bear) | + +The following query returns a salmon's prey and predators: + + + + +```ts +const getAnimals = await prisma.animal.findMany({ + where: { + name: 'Salmon', + }, + include: { + b_eats: true, + a_eatenBy: true, + }, +}) +``` + + + + +```js no-copy +{ + "id": 7, + "name": "Salmon", + "b_eats": [ + { + "id": 8, + "name": "Plankton" + } + ], + "a_eatenBy": [ + { + "id": 9, + "name": "Bear" + } + ] +} +``` + + + + +Now change the order of the relation fields: + +```prisma highlight=4,5;normal +model Animal { + id Int @id @default(autoincrement()) + name String + //highlight-start + b_eats Animal[] @relation(name: "FoodChain") + a_eatenBy Animal[] @relation(name: "FoodChain") + //highlight-end +} +``` + +Migrate your changes and re-generate Prisma Client. When you run the same query with the updated field names, Prisma Client returns incorrect data (salmon now eats bears and gets eaten by plankton): + + + + +```ts +const getAnimals = await prisma.animal.findMany({ + where: { + name: 'Salmon', + }, + include: { + b_eats: true, + a_eatenBy: true, + }, +}) +``` + + + + +```js no-copy +{ + "id": 1, + "name": "Salmon", + "b_eats": [ + { + "id": 3, + "name": "Bear" + } + ], + "a_eatenBy": [ + { + "id": 2, + "name": "Plankton" + } + ] +} +``` + + + + +Although the lexicographic order of the relation fields in the Prisma schema changed, columns `A` and `B` in the database **did not change** (they were not renamed and data was not moved). Therefore, `A` now represents predators (`a_eatenBy`) and `B` represents prey (`b_eats`): + +| A | B | +| :----------- | :--------- | +| 8 (Plankton) | 7 (Salmon) | +| 7 (Salmon) | 9 (Bear) | + +### Solution + +If you rename relation fields in an implicit many-to-many self-relations, make sure that you maintain the alphabetic order of the fields - for example, by prefixing with `a_` and `_b`. + +## How to use a relation table with a many-to-many relationship + +There are a couple of ways to define a m-n relationship, implicitly or explicitly. Implicitly means letting Prisma ORM handle the relation table (JOIN table) under the hood, all you have to do is define an array/list for the non scalar types on each model, see [implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations). + +Where you might run into trouble is when creating an [explicit m-n relationship](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations), that is, to create and handle the relation table yourself. **It can be overlooked that Prisma ORM requires both sides of the relation to be present**. + +Take the following example, here a relation table is created to act as the JOIN between the `Post` and `Category` tables. This will not work however as the relation table (`PostCategories`) must form a 1-to-many relationship with the other two models respectively. + +The back relation fields are missing from the `Post` to `PostCategories` and `Category` to `PostCategories` models. + + +```prisma +// This example schema shows how NOT to define an explicit m-n relation + +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] // This should refer to PostCategories +} + +model PostCategories { + post Post @relation(fields: [postId], references: [id]) + postId Int + category Category @relation(fields: [categoryId], references: [id]) + categoryId Int + @@id([postId, categoryId]) +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] // This should refer to PostCategories +} +``` + + +To fix this the `Post` model needs to have a many relation field defined with the relation table `PostCategories`. The same applies to the `Category` model. + +This is because the relation model forms a 1-to-many relationship with the other two models its joining. + +```prisma highlight=5,21;add|4,20;delete +model Post { + id Int @id @default(autoincrement()) + title String + //delete-next-line + categories Category[] + //add-next-line + postCategories PostCategories[] +} + +model PostCategories { + post Post @relation(fields: [postId], references: [id]) + postId Int + category Category @relation(fields: [categoryId], references: [id]) + categoryId Int + + @@id([postId, categoryId]) +} + +model Category { + id Int @id @default(autoincrement()) + name String + //delete-next-line + posts Post[] + //add-next-line + postCategories PostCategories[] +} +``` + +## Using the `@relation` attribute with a many-to-many relationship + +It might seem logical to add a `@relation("Post")` annotation to a relation field on your model when composing an implicit many-to-many relationship. + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] @relation("Category") + Category Category? @relation("Post", fields: [categoryId], references: [id]) + categoryId Int? +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] @relation("Post") + Post Post? @relation("Category", fields: [postId], references: [id]) + postId Int? +} +``` + +This however tells Prisma ORM to expect **two** separate one-to-many relationships. See [disambiguating relations](/orm/prisma-schema/data-model/relations#disambiguating-relations) for more information on using the `@relation` attribute. + +The following example is the correct way to define an implicit many-to-many relationship. + +```prisma highlight=4,11;delete|5,12;add +model Post { + id Int @id @default(autoincrement()) + title String + //delete-next-line + categories Category[] @relation("Category") + //add-next-line + categories Category[] +} + +model Category { + id Int @id @default(autoincrement()) + name String + //delete-next-line + posts Post[] @relation("Post") + //add-next-line + posts Post[] +} +``` + +The `@relation` annotation can also be used to [name the underlying relation table](/orm/prisma-schema/data-model/relations/many-to-many-relations#configuring-the-name-of-the-relation-table-in-implicit-many-to-many-relations) created on a implicit many-to-many relationship. + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] @relation("CategoryPostRelation") +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] @relation("CategoryPostRelation") +} +``` + +## Using m-n relations in databases with enforced primary keys + +### Problem + +Some cloud providers enforce the existence of primary keys in all tables. However, any relation tables (JOIN tables) created by Prisma ORM (expressed via `@relation`) for many-to-many relations using implicit syntax do not have primary keys. + +### Solution + +You need to use [explicit relation syntax](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations), manually create the join model, and verify that this join model has a primary key. diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/index.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/index.mdx new file mode 100644 index 0000000000..bfd6486e6d --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/index.mdx @@ -0,0 +1,566 @@ +--- +title: 'Relations' +metaTitle: 'Relations (Reference)' +metaDescription: 'A relation is a connection between two models in the Prisma schema. This page explains how you can define one-to-one, one-to-many and many-to-many relations in Prisma.' +tocDepth: 3 +--- + + + +A relation is a _connection_ between two models in the Prisma schema. For example, there is a one-to-many relation between `User` and `Post` because one user can have many blog posts. + +The following Prisma schema defines a one-to-many relation between the `User` and `Post` models. The fields involved in defining the relation are highlighted: + + + + +```prisma highlight=3,8,9;normal +model User { + id Int @id @default(autoincrement()) + //highlight-next-line + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + //highlight-start + author User @relation(fields: [authorId], references: [id]) + authorId Int // relation scalar field (used in the `@relation` attribute above) + //highlight-end +} +``` + + + + +```prisma highlight=3,8,9;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + //highlight-next-line + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + //highlight-start + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId // relation scalar field (used in the `@relation` attribute above) + //highlight-end +} +``` + + + + +At a Prisma ORM level, the `User` / `Post` relation is made up of: + +- Two [relation fields](#relation-fields): `author` and `posts`. Relation fields define connections between models at the Prisma ORM level and **do not exist in the database**. These fields are used to generate Prisma Client. +- The scalar `authorId` field, which is referenced by the `@relation` attribute. This field **does exist in the database** - it is the foreign key that connects `Post` and `User`. + +At a Prisma ORM level, a connection between two models is **always** represented by a [relation field](#relation-fields) on **each side** of the relation. + +
+ + + +
+ +
+ +## Relations in the database + +### Relational databases + +The following entity relationship diagram defines the same one-to-many relation between the `User` and `Post` tables in a **relational database**: + +![A one-to-many relationship between a user and posts table.](./one-to-many.png) + +In SQL, you use a _foreign key_ to create a relation between two tables. Foreign keys are stored on **one side** of the relation. Our example is made up of: + +- A foreign key column in the `Post` table named `authorId`. +- A primary key column in the `User` table named `id`. The `authorId` column in the `Post` table references the `id` column in the `User` table. + +In the Prisma schema, the foreign key / primary key relationship is represented by the `@relation` attribute on the `author` field: + +```prisma +author User @relation(fields: [authorId], references: [id]) +``` + +> **Note**: Relations in the Prisma schema represent relationships that exist between tables in the database. If the relationship does not exist in the database, it does not exist in the Prisma schema. + +### MongoDB + +For MongoDB, Prisma ORM currently uses a [normalized data model design](https://www.mongodb.com/docs/manual/data-modeling/), which means that documents reference each other by ID in a similar way to relational databases. + +The following document represents a `User` (in the `User` collection): + +```json +{ "_id": { "$oid": "60d5922d00581b8f0062e3a8" }, "name": "Ella" } +``` + +The following list of `Post` documents (in the `Post` collection) each have a `authorId` field which reference the same user: + +```json +[ + { + "_id": { "$oid": "60d5922e00581b8f0062e3a9" }, + "title": "How to make sushi", + "authorId": { "$oid": "60d5922d00581b8f0062e3a8" } + }, + { + "_id": { "$oid": "60d5922e00581b8f0062e3aa" }, + "title": "How to re-install Windows", + "authorId": { "$oid": "60d5922d00581b8f0062e3a8" } + } +] +``` + +This data structure represents a one-to-many relation because multiple `Post` documents refer to the same `User` document. + +#### `@db.ObjectId` on IDs and relation scalar fields + +If your model's ID is an `ObjectId` (represented by a `String` field), you must add `@db.ObjectId` to the model's ID _and_ the relation scalar field on the other side of the relation: + +```prisma highlight=3,9;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + //highlight-next-line + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User @relation(fields: [authorId], references: [id]) + //highlight-next-line + authorId String @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} +``` + +## Relations in Prisma Client + +Prisma Client is generated from the Prisma schema. The following examples demonstrate how relations manifest when you use Prisma Client to get, create, and update records. + +### Create a record and nested records + +The following query creates a `User` record and two connected `Post` records: + +```ts +const userAndPosts = await prisma.user.create({ + data: { + posts: { + create: [ + { title: 'Prisma Day 2020' }, // Populates authorId with user's id + { title: 'How to write a Prisma schema' }, // Populates authorId with user's id + ], + }, + }, +}) +``` + +In the underlying database, this query: + +1. Creates a `User` with an auto-generated `id` (for example, `20`) +2. Creates two new `Post` records and sets the `authorId` of both records to `20` + +### Retrieve a record and include related records + +The following query retrieves a `User` by `id` and includes any related `Post` records: + +```ts +const getAuthor = await prisma.user.findUnique({ + where: { + id: "20", + }, + include: { + //highlight-next-line + posts: true, // All posts where authorId == 20 + }, +}); +``` + +In the underlying database, this query: + +1. Retrieves the `User` record with an `id` of `20` +2. Retrieves all `Post` records with an `authorId` of `20` + +### Associate an existing record to another existing record + +The following query associates an existing `Post` record with an existing `User` record: + +```ts +const updateAuthor = await prisma.user.update({ + where: { + id: 20, + }, + data: { + posts: { + connect: { + id: 4, + }, + }, + }, +}) +``` + +In the underlying database, this query uses a [nested `connect` query](/orm/reference/prisma-client-reference#connect) to link the post with an `id` of 4 to the user with an `id` of 20. The query does this with the following steps: + +- The query first looks for the user with an `id` of `20`. +- The query then sets the `authorID` foreign key to `20`. This links the post with an `id` of `4` to the user with an `id` of `20`. + +In this query, the current value of `authorID` does not matter. The query changes `authorID` to `20`, no matter its current value. + +## Types of relations + +There are three different types (or [cardinalities]()) of relations in Prisma ORM: + +- [One-to-one](/orm/prisma-schema/data-model/relations/one-to-one-relations) (also called 1-1 relations) +- [One-to-many](/orm/prisma-schema/data-model/relations/one-to-many-relations) (also called 1-n relations) +- [Many-to-many](/orm/prisma-schema/data-model/relations/many-to-many-relations) (also called m-n relations) + +The following Prisma schema includes every type of relation: + +- one-to-one: `User` ↔ `Profile` +- one-to-many: `User` ↔ `Post` +- many-to-many: `Post` ↔ `Category` + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + posts Post[] + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int @unique // relation scalar field (used in the `@relation` attribute above) +} + +model Post { + id Int @id @default(autoincrement()) + author User @relation(fields: [authorId], references: [id]) + authorId Int // relation scalar field (used in the `@relation` attribute above) + categories Category[] +} + +model Category { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId // relation scalar field (used in the `@relation` attribute above) + categories Category[] @relation(fields: [categoryIds], references: [id]) + categoryIds String[] @db.ObjectId +} + +model Category { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] @relation(fields: [postIds], references: [id]) + postIds String[] @db.ObjectId +} +``` + + + + + + +This schema is the same as the [example data model](/orm/prisma-schema/data-model/models) but has all [scalar fields](/orm/prisma-schema/data-model/models#scalar-fields) removed (except for the required [relation scalar fields](/orm/prisma-schema/data-model/relations#relation-scalar-fields)) so you can focus on the [relation fields](#relation-fields). + + + + + +This example uses [implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations). These relations do not require the `@relation` attribute unless you need to [disambiguate relations](#disambiguating-relations). + + + +Notice that the syntax is slightly different between relational databases and MongoDB - particularly for [many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations). + +For relational databases, the following entity relationship diagram represents the database that corresponds to the sample Prisma schema: + +![The sample schema as an entity relationship diagram](./sample-schema.png) + +For MongoDB, Prisma ORM uses a [normalized data model design](https://www.mongodb.com/docs/manual/data-modeling/), which means that documents reference each other by ID in a similar way to relational databases. See [the MongoDB section](#mongodb) for more details. + +### Implicit and explicit many-to-many relations + +Many-to-many relations in relational databases can be modelled in two ways: + +- [explicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations), where the relation table is represented as an explicit model in your Prisma schema +- [implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations), where Prisma ORM manages the relation table and it does not appear in the Prisma schema. + +Implicit many-to-many relations require both models to have a single `@id`. Be aware of the following: + +- You cannot use a [multi-field ID](/orm/reference/prisma-schema-reference#id-1) +- You cannot use a `@unique` in place of an `@id` + +To use either of these features, you must set up an explicit many-to-many instead. + +The implicit many-to-many relation still manifests in a relation table in the underlying database. However, Prisma ORM manages this relation table. + +If you use an implicit many-to-many relation instead of an explicit one, it makes the [Prisma Client API](/orm/prisma-client) simpler (because, for example, you have one fewer level of nesting inside of [nested writes](/orm/prisma-client/queries/relation-queries#nested-writes)). + +If you're not using Prisma Migrate but obtain your data model from [introspection](/orm/prisma-schema/introspection), you can still make use of implicit many-to-many relations by following Prisma ORM's [conventions for relation tables](/orm/prisma-schema/data-model/relations/many-to-many-relations#conventions-for-relation-tables-in-implicit-m-n-relations). + +## Relation fields + +Relation [fields](/orm/prisma-schema/data-model/models#defining-fields) are fields on a Prisma [model](/orm/prisma-schema/data-model/models#defining-models) that do _not_ have a [scalar type](/orm/prisma-schema/data-model/models#scalar-fields). Instead, their type is another model. + +Every relation must have exactly two relation fields, one on each model. In the case of one-to-one and one-to-many relations, an additional _relation scalar field_ is required which gets linked by one of the two relation fields in the `@relation` attribute. This relation scalar field is the direct representation of the _foreign key_ in the underlying database. + + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + role Role @default(USER) + posts Post[] // relation field (defined only at the Prisma ORM level) +} + +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id]) // relation field (uses the relation scalar field `authorId` below) + authorId Int // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + role Role @default(USER) + posts Post[] // relation field (defined only at the Prisma ORM level) +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + author User @relation(fields: [authorId], references: [id]) // relation field (uses the relation scalar field `authorId` below) + authorId String @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +Both `posts` and `author` are relation fields because their types are not scalar types but other models. + +Also note that the [annotated relation field](#annotated-relation-fields) `author` needs to link the relation scalar field `authorId` on the `Post` model inside the `@relation` attribute. The relation scalar field represents the foreign key in the underlying database. + +The other relation field called `posts` is defined purely on a Prisma ORM-level, it doesn't manifest in the database. + +### Annotated relation fields + +Relations that require one side of the relation to be _annotated_ with the `@relation` attribute are referred to as _annotated relation fields_. This includes: + +- one-to-one relations +- one-to-many relations +- many-to-many relations for MongoDB only + +The side of the relation which is annotated with the `@relation` attribute represents the side that **stores the foreign key in the underlying database**. The "actual" field that represents the foreign key is required on that side of the relation as well, it's called _relation scalar field_, and is referenced inside `@relation` attribute: + + + + +```prisma +author User @relation(fields: [authorId], references: [id]) +authorId Int +``` + + + + +```prisma +author User @relation(fields: [authorId], references: [id]) +authorId String @db.ObjectId +``` + + + + +A scalar field _becomes_ a relation scalar field when it's used in the `fields` of a `@relation` attribute. + +### Relation scalar fields + +#### Relation scalar field naming conventions + +Because a relation scalar field always _belongs_ to a relation field, the following naming convention is common: + +- Relation field: `author` +- Relation scalar field: `authorId` (relation field name + `Id`) + +## The `@relation` attribute + +The [`@relation`](/orm/reference/prisma-schema-reference#relation) attribute can only be applied to the [relation fields](#relation-fields), not to [scalar fields](/orm/prisma-schema/data-model/models#scalar-fields). + +The `@relation` attribute is required when: + +- you define a one-to-one or one-to-many relation, it is required on _one side_ of the relation (with the corresponding relation scalar field) +- you need to disambiguate a relation (that's e.g. the case when you have two relations between the same models) +- you define a [self-relation](/orm/prisma-schema/data-model/relations/self-relations) +- you define [a many-to-many relation for MongoDB](/orm/prisma-schema/data-model/relations/many-to-many-relations#mongodb) +- you need to control how the relation table is represented in the underlying database (e.g. use a specific name for a relation table) + +> **Note**: [Implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations) in relational databases do not require the `@relation` attribute. + +## Disambiguating relations + +When you define two relations between the same two models, you need to add the `name` argument in the `@relation` attribute to disambiguate them. As an example for why that's needed, consider the following models: + + + + +```prisma highlight=6,7,13,15;normal no-copy +// NOTE: This schema is intentionally incorrect. See below for a working solution. + +model User { + id Int @id @default(autoincrement()) + name String? + //highlight-start + writtenPosts Post[] + pinnedPost Post? + //highlight-end +} + +model Post { + id Int @id @default(autoincrement()) + title String? + //highlight-next-line + author User @relation(fields: [authorId], references: [id]) + authorId Int + //highlight-next-line + pinnedBy User? @relation(fields: [pinnedById], references: [id]) + pinnedById Int? +} +``` + + + + +```prisma highlight=6,7,13,15;normal no-copy +// NOTE: This schema is intentionally incorrect. See below for a working solution. + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + //highlight-start + writtenPosts Post[] + pinnedPost Post? + //highlight-end +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String? + //highlight-next-line + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + //highlight-next-line + pinnedBy User? @relation(fields: [pinnedById], references: [id]) + pinnedById String? @db.ObjectId +} +``` + + + + +In that case, the relations are ambiguous, there are four different ways to interpret them: + +- `User.writtenPosts` ↔ `Post.author` + `Post.authorId` +- `User.writtenPosts` ↔ `Post.pinnedBy` + `Post.pinnedById` +- `User.pinnedPost` ↔ `Post.author` + `Post.authorId` +- `User.pinnedPost` ↔ `Post.pinnedBy` + `Post.pinnedById` + +To disambiguate these relations, you need to annotate the relation fields with the `@relation` attribute and provide the `name` argument. You can set any `name` (except for the empty string `""`), but it must be the same on both sides of the relation: + + + + +```prisma highlight=4,5,11,13;normal +model User { + id Int @id @default(autoincrement()) + name String? + //highlight-start + writtenPosts Post[] @relation("WrittenPosts") + pinnedPost Post? @relation("PinnedPost") + //highlight-end +} + +model Post { + id Int @id @default(autoincrement()) + title String? + //highlight-next-line + author User @relation("WrittenPosts", fields: [authorId], references: [id]) + authorId Int + //highlight-next-line + pinnedBy User? @relation("PinnedPost", fields: [pinnedById], references: [id]) + pinnedById Int? @unique +} +``` + + + + +```prisma highlight=4,5,11,13;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + //highlight-start + writtenPosts Post[] @relation("WrittenPosts") + pinnedPost Post? @relation("PinnedPost") + //highlight-end +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String? + //highlight-next-line + author User @relation("WrittenPosts", fields: [authorId], references: [id]) + authorId String @db.ObjectId + //highlight-next-line + pinnedBy User? @relation("PinnedPost", fields: [pinnedById], references: [id]) + pinnedById String? @unique @db.ObjectId +} +``` + + + + diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/one-to-many.png b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/one-to-many.png new file mode 100644 index 0000000000000000000000000000000000000000..e0f44cd37a9e3a9e064e08d309a35130260fcca6 GIT binary patch literal 41597 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�gQTl@-aF=ECII!#S?@E}|z?PRO4BkpKfS(w%_+ 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/relations-intro.png b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/relations-intro.png new file mode 100644 index 0000000000000000000000000000000000000000..47bb895580ea3e96bbbd7919d5b3ea192f9c0266 GIT binary patch literal 36481 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/sample-schema.png b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/sample-schema.png new file mode 100644 index 0000000000000000000000000000000000000000..c669b197211cc676910173d38adb23b6071f1d89 GIT binary patch literal 130861 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

r=oq$)fcx_L6{fFIKjPn$^cHClT!!&G zh0fbIym+!P)Up}QDf~te__}jsiaXW&YqeyyZRYaa1woZj#d?|n2u07c7O2}?^CaCQ z^WJUh&CQlh9dwaSfnSRAZRzpKr%v$XhBh6~-o(cPsQQC9!e$l3j%0t z$M>2B8FS+Y#=CNh7YB7uoL}DUXxACX6Y_X@EN*hM>kMV|V+ZD$8|zXA^DxHE+6Sp0 z#0%vJKZHyL_v=4{83cT*JGs%XPi z((_KftCXF0*G@oP12Sp%f4Y@PVa%NF`hV}k?{CnGpSbh>x?7oDqLt1J+5ZEA+3bHk zxLn8g=c#D*XQdOtwd(8l)pJO_lkd7-%J;yGFi6+`HSm`V5a9-W&Y# zJ3nu&(HG~~xHtX#yTjOLovLm(oBG(gr}(D+>9=cdo7mn9{Qs%y=CoZs>)t($S^K;& zvVWKC<9%AsKUL@~J{#EnV*MR+Z^y4I{Qs`CtiJ_`#Q(aB>pzL#Upwp8r>#a78{+R+ zvn)Clo@pk0|ELtZ>LbzG-#dHW-4WO$(bOWi)|r!TXZ{x&>Uaz9(i zige?v*E$)Vtea&U_C>T_#%*v-6t_+GukFQffwkD_Ao z+ZZnX(=dp*C*3$v>#att=mg6ZzGs_%|Tv#%ap zxb(BrZhceC;(Zx%ChV&c@`BgT%jsf>zI*=h)Xc*%mI+ q6 + +Prisma ORM allows configuration of database indexes, unique constraints and primary key constraints. This is in General Availability in versions `4.0.0` and later. You can enable this with the `extendedIndexes` Preview feature in versions `3.5.0` and later. + +Version `3.6.0` also introduces support for introspection and migration of full text indexes in MySQL and MongoDB through a new `@@fulltext` attribute, available through the `fullTextIndex` Preview feature. + + + +If you are upgrading from a version earlier than 4.0.0, these changes to index configuration and full text indexes might be **breaking changes** if you have a database that already uses these features. See [Upgrading from previous versions](#upgrading-from-previous-versions) for more information on how to upgrade. + + + + + +## Index configuration + +You can configure indexes, unique constraints, and primary key constraints with the following attribute arguments: + +- The [`length` argument](#configuring-the-length-of-indexes-with-length-mysql) allows you to specify a maximum length for the subpart of the value to be indexed on `String` and `Bytes` types + + - Available on the `@id`, `@@id`, `@unique`, `@@unique` and `@@index` attributes + - MySQL only + +- The [`sort` argument](#configuring-the-index-sort-order-with-sort) allows you to specify the order that the entries of the constraint or index are stored in the database + + - Available on the `@unique`, `@@unique` and `@@index` attributes in all databases, and on the `@id` and `@@id` attributes in SQL Server + +- The [`type` argument](#configuring-the-access-type-of-indexes-with-type-postgresql) allows you to support index access methods other than PostgreSQL's default `BTree` access method + + - Available on the `@@index` attribute + - PostgreSQL only + - Supported index access methods: `Hash`, `Gist`, `Gin`, `SpGist` and `Brin` + +- The [`clustered` argument](#configuring-if-indexes-are-clustered-or-non-clustered-with-clustered-sql-server) allows you to configure whether a constraint or index is clustered or non-clustered + - Available on the `@id`, `@@id`, `@unique`, `@@unique` and `@@index` attributes + - SQL Server only + +See the linked sections for details of which version each feature was first introduced in. + +### Configuring the length of indexes with `length` (MySQL) + +The `length` argument is specific to MySQL and allows you to define indexes and constraints on columns of `String` and `Byte` types. For these types, MySQL requires you to specify a maximum length for the subpart of the value to be indexed in cases where the full value would exceed MySQL's limits for index sizes. See [the MySQL documentation](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html) for more details. + +The `length` argument is available on the `@id`, `@@id`, `@unique`, `@@unique` and `@@index` attributes. It is generally available in versions 4.0.0 and later, and available as part of the `extendedIndexes` preview feature in versions 3.5.0 and later. + +As an example, the following data model declares an `id` field with a maximum length of 3000 characters: + +```prisma file=schema.prisma showLineNumbers +model Id { + id String @id @db.VarChar(3000) +} +``` + +This is not valid in MySQL because it exceeds MySQL's index storage limit and therefore Prisma ORM rejects the data model. The generated SQL would be rejected by the database. + +```sql +CREATE TABLE `Id` ( + `id` VARCHAR(3000) PRIMARY KEY +) +``` + +The `length` argument allows you to specify that only a subpart of the `id` value represents the primary key. In the example below, the first 100 characters are used: + +```prisma file=schema.prisma showLineNumbers +model Id { + id String @id(length: 100) @db.VarChar(3000) +} +``` + +Prisma Migrate is able to create constraints and indexes with the `length` argument if specified in your data model. This means that you can create indexes and constraints on values of Prisma schema type `Byte` and `String`. If you don't specify the argument the index is treated as covering the full value as before. + +Introspection will fetch these limits where they are present in your existing database. This allows Prisma ORM to support indexes and constraints that were previously suppressed and results in better support of MySQL databases utilizing this feature. + +The `length` argument can also be used on compound primary keys, using the `@@id` attribute, as in the example below: + +```prisma file=schema.prisma showLineNumbers +model CompoundId { + id_1 String @db.VarChar(3000) + id_2 String @db.VarChar(3000) + + @@id([id_1(length: 100), id_2(length: 10)]) +} +``` + +A similar syntax can be used for the `@@unique` and `@@index` attributes. + +### Configuring the index sort order with `sort` + +The `sort` argument is available for all databases supported by Prisma ORM. It allows you to specify the order that the entries of the index or constraint are stored in the database. This can have an effect on whether the database is able to use an index for specific queries. + +The `sort` argument is available for all databases on `@unique`, `@@unique` and `@@index`. Additionally, SQL Server also allows it on `@id` and `@@id`. It is generally available in versions 4.0.0 and later, and available as part of the `extendedIndexes` preview feature in versions 3.5.0 and later. + +As an example, the following table + +```sql +CREATE TABLE `Unique` ( + `unique` INT, + CONSTRAINT `Unique_unique_key` UNIQUE (`unique` DESC) +) +``` + +is now introspected as + +```prisma file=schema.prisma showLineNumbers +model Unique { + unique Int @unique(sort: Desc) +} +``` + +The `sort` argument can also be used on compound indexes: + +```prisma file=schema.prisma showLineNumbers +model CompoundUnique { + unique_1 Int + unique_2 Int + + @@unique([unique_1(sort: Desc), unique_2]) +} +``` + +### Example: using `sort` and `length` together + +The following example demonstrates the use of the `sort` and `length` arguments to configure indexes and constraints for a `Post` model: + +```prisma file=schema.prisma showLineNumbers +model Post { + title String @db.VarChar(300) + abstract String @db.VarChar(3000) + slug String @unique(sort: Desc, length: 42) @db.VarChar(3000) + author String + created_at DateTime + + @@id([title(length: 100, sort: Desc), abstract(length: 10)]) + @@index([author, created_at(sort: Desc)]) +} +``` + +### Configuring the access type of indexes with `type` (PostgreSQL) + +The `type` argument is available for configuring the index type in PostgreSQL with the `@@index` attribute. The index access methods available are `Hash`, `Gist`, `Gin`, `SpGist` and `Brin`, as well as the default `BTree` index access method. The `type` argument is generally available in versions 4.0.0 and later. The `Hash` index access method is available as part of the `extendedIndexes` preview feature in versions 3.6.0 and later, and the `Gist`, `Gin`, `SpGist` and `Brin` index access methods are available in preview in versions 3.14.0 and later. + +#### Hash + +The `Hash` type will store the index data in a format that is much faster to search and insert, and that will use less disk space. However, only the `=` and `<>` comparisons can use the index, so other comparison operators such as `<` and `>` will be much slower with `Hash` than when using the default `BTree` type. + +As an example, the following model adds an index with a `type` of `Hash` to the `value` field: + +```prisma file=schema.prisma showLineNumbers +model Example { + id Int @id + value Int + + @@index([value], type: Hash) +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value INT NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING HASH (value); +``` + +#### Generalized Inverted Index (GIN) + +The GIN index stores composite values, such as arrays or `JsonB` data. This is useful for speeding up querying whether one object is part of another object. It is commonly used for full-text searches. + +An indexed field can define the operator class, which defines the operators handled by the index. + + + +Indexes using a function (such as `to_tsvector`) to determine the indexed value are not yet supported by Prisma ORM. Indexes defined in this way will not be visible with `prisma db pull`. + + + +As an example, the following model adds a `Gin` index to the `value` field, with `JsonbPathOps` as the class of operators allowed to use the index: + +```prisma file=schema.prisma showLineNumbers +model Example { + id Int @id + value Json + // ^ field type matching the operator class + // ^ operator class ^ index type + + @@index([value(ops: JsonbPathOps)], type: Gin) +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value JSONB NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING GIN (value jsonb_path_ops); +``` + +As part of the `JsonbPathOps` the `@>` operator is handled by the index, speeding up queries such as `value @> '{"foo": 2}'`. + +##### Supported Operator Classes for GIN + +Prisma ORM generally supports operator classes provided by PostgreSQL in versions 10 and later. If the operator class requires the field type to be of a type Prisma ORM does not yet support, using the `raw` function with a string input allows you to use these operator classes without validation. + +The default operator class (marked with ✅) can be omitted from the index definition. + +| Operator class | Allowed field type (native types) | Default | Other | +| -------------- | --------------------------------- | ------- | ----------------------------- | +| `ArrayOps` | Any array | ✅ | Also available in CockroachDB | +| `JsonbOps` | `Json` (`@db.JsonB`) | ✅ | Also available in CockroachDB | +| `JsonbPathOps` | `Json` (`@db.JsonB`) | | | +| `raw("other")` | | | | + +Read more about built-in operator classes in the [official PostgreSQL documentation](https://www.postgresql.org/docs/14/gin-builtin-opclasses.html). + +##### CockroachDB + +GIN and BTree are the only index types supported by CockroachDB. The operator classes marked to work with CockroachDB are the only ones allowed on that database and supported by Prisma ORM. The operator class cannot be defined in the Prisma Schema Language: the `ops` argument is not necessary or allowed on CockroachDB. + +#### Generalized Search Tree (GiST) + +The GiST index type is used for implementing indexing schemes for user-defined types. By default there are not many direct uses for GiST indexes, but for example the B-Tree index type is built using a GiST index. + +As an example, the following model adds a `Gist` index to the `value` field with `InetOps` as the operators that will be using the index: + +```prisma file=schema.prisma showLineNumbers +model Example { + id Int @id + value String @db.Inet + // ^ native type matching the operator class + // ^ index type + // ^ operator class + + @@index([value(ops: InetOps)], type: Gist) +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value INET NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING GIST (value inet_ops); +``` + +Queries comparing IP addresses, such as `value > '10.0.0.2'`, will use the index. + +##### Supported Operator Classes for GiST + +Prisma ORM generally supports operator classes provided by PostgreSQL in versions 10 and later. If the operator class requires the field type to be of a type Prisma ORM does not yet support, using the `raw` function with a string input allows you to use these operator classes without validation. + +| Operator class | Allowed field type (allowed native types) | +| -------------- | ----------------------------------------- | +| `InetOps` | `String` (`@db.Inet`) | +| `raw("other")` | | + +Read more about built-in operator classes in the [official PostgreSQL documentation](https://www.postgresql.org/docs/14/gist-builtin-opclasses.html). + +#### Space-Partitioned GiST (SP-GiST) + +The SP-GiST index is a good choice for many different non-balanced data structures. If the query matches the partitioning rule, it can be very fast. + +As with GiST, SP-GiST is important as a building block for user-defined types, allowing implementation of custom search operators directly with the database. + +As an example, the following model adds a `SpGist` index to the `value` field with `TextOps` as the operators using the index: + +```prisma file=schema.prisma showLineNumbers +model Example { + id Int @id + value String + // ^ field type matching the operator class + + @@index([value], type: SpGist) + // ^ index type + // ^ using the default ops: TextOps +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value TEXT NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING SPGIST (value); +``` + +Queries such as `value LIKE 'something%'` will be sped up by the index. + +##### Supported Operator Classes for SP-GiST + +Prisma ORM generally supports operator classes provided by PostgreSQL in versions 10 and later. If the operator class requires the field type to be of a type Prisma ORM does not yet support, using the `raw` function with a string input allows you to use these operator classes without validation. + +The default operator class (marked with ✅) can be omitted from the index definition. + +| Operator class | Allowed field type (native types) | Default | Supported PostgreSQL versions | +| -------------- | ------------------------------------ | ------- | ----------------------------- | +| `InetOps` | `String` (`@db.Inet`) | ✅ | 10+ | +| `TextOps` | `String` (`@db.Text`, `@db.VarChar`) | ✅ | | +| `raw("other")` | | | | + +Read more about built-in operator classes from [official PostgreSQL documentation](https://www.postgresql.org/docs/14/spgist-builtin-opclasses.html). + +#### Block Range Index (BRIN) + +The BRIN index type is useful if you have lots of data that does not change after it is inserted, such as date and time values. If your data is a good fit for the index, it can store large datasets in a minimal space. + +As an example, the following model adds a `Brin` index to the `value` field with `Int4BloomOps` as the operators that will be using the index: + +```prisma file=schema.prisma showLineNumbers +model Example { + id Int @id + value Int + // ^ field type matching the operator class + // ^ operator class ^ index type + + @@index([value(ops: Int4BloomOps)], type: Brin) +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value INT4 NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING BRIN (value int4_bloom_ops); +``` + +Queries like `value = 2` will now use the index, which uses a fraction of the space used by the `BTree` or `Hash` indexes. + +##### Supported Operator Classes for BRIN + +Prisma ORM generally supports operator classes provided by PostgreSQL in versions 10 and later, and some supported operators are only available from PostgreSQL versions 14 and later. If the operator class requires the field type to be of a type Prisma ORM does not yet support, using the `raw` function with a string input allows you to use these operator classes without validation. + +The default operator class (marked with ✅) can be omitted from the index definition. + +| Operator class | Allowed field type (native types) | Default | Supported PostgreSQL versions | +| --------------------------- | ------------------------------------ | ------- | ----------------------------- | +| `BitMinMaxOps` | `String` (`@db.Bit`) | ✅ | | +| `VarBitMinMaxOps` | `String` (`@db.VarBit`) | ✅ | | +| `BpcharBloomOps` | `String` (`@db.Char`) | | 14+ | +| `BpcharMinMaxOps` | `String` (`@db.Char`) | ✅ | | +| `ByteaBloomOps` | `Bytes` (`@db.Bytea`) | | 14+ | +| `ByteaMinMaxOps` | `Bytes` (`@db.Bytea`) | ✅ | | +| `DateBloomOps` | `DateTime` (`@db.Date`) | | 14+ | +| `DateMinMaxOps` | `DateTime` (`@db.Date`) | ✅ | | +| `DateMinMaxMultiOps` | `DateTime` (`@db.Date`) | | 14+ | +| `Float4BloomOps` | `Float` (`@db.Real`) | | 14+ | +| `Float4MinMaxOps` | `Float` (`@db.Real`) | ✅ | | +| `Float4MinMaxMultiOps` | `Float` (`@db.Real`) | | 14+ | +| `Float8BloomOps` | `Float` (`@db.DoublePrecision`) | | 14+ | +| `Float8MinMaxOps` | `Float` (`@db.DoublePrecision`) | ✅ | | +| `Float8MinMaxMultiOps` | `Float` (`@db.DoublePrecision`) | | 14+ | +| `InetInclusionOps` | `String` (`@db.Inet`) | ✅ | 14+ | +| `InetBloomOps` | `String` (`@db.Inet`) | | 14+ | +| `InetMinMaxOps` | `String` (`@db.Inet`) | | | +| `InetMinMaxMultiOps` | `String` (`@db.Inet`) | | 14+ | +| `Int2BloomOps` | `Int` (`@db.SmallInt`) | | 14+ | +| `Int2MinMaxOps` | `Int` (`@db.SmallInt`) | ✅ | | +| `Int2MinMaxMultiOps` | `Int` (`@db.SmallInt`) | | 14+ | +| `Int4BloomOps` | `Int` (`@db.Integer`) | | 14+ | +| `Int4MinMaxOps` | `Int` (`@db.Integer`) | ✅ | | +| `Int4MinMaxMultiOps` | `Int` (`@db.Integer`) | | 14+ | +| `Int8BloomOps` | `BigInt` (`@db.BigInt`) | | 14+ | +| `Int8MinMaxOps` | `BigInt` (`@db.BigInt`) | ✅ | | +| `Int8MinMaxMultiOps` | `BigInt` (`@db.BigInt`) | | 14+ | +| `NumericBloomOps` | `Decimal` (`@db.Decimal`) | | 14+ | +| `NumericMinMaxOps` | `Decimal` (`@db.Decimal`) | ✅ | | +| `NumericMinMaxMultiOps` | `Decimal` (`@db.Decimal`) | | 14+ | +| `OidBloomOps` | `Int` (`@db.Oid`) | | 14+ | +| `OidMinMaxOps` | `Int` (`@db.Oid`) | ✅ | | +| `OidMinMaxMultiOps` | `Int` (`@db.Oid`) | | 14+ | +| `TextBloomOps` | `String` (`@db.Text`, `@db.VarChar`) | | 14+ | +| `TextMinMaxOps` | `String` (`@db.Text`, `@db.VarChar`) | ✅ | | +| `TextMinMaxMultiOps` | `String` (`@db.Text`, `@db.VarChar`) | | 14+ | +| `TimestampBloomOps` | `DateTime` (`@db.Timestamp`) | | 14+ | +| `TimestampMinMaxOps` | `DateTime` (`@db.Timestamp`) | ✅ | | +| `TimestampMinMaxMultiOps` | `DateTime` (`@db.Timestamp`) | | 14+ | +| `TimestampTzBloomOps` | `DateTime` (`@db.Timestamptz`) | | 14+ | +| `TimestampTzMinMaxOps` | `DateTime` (`@db.Timestamptz`) | ✅ | | +| `TimestampTzMinMaxMultiOps` | `DateTime` (`@db.Timestamptz`) | | 14+ | +| `TimeBloomOps` | `DateTime` (`@db.Time`) | | 14+ | +| `TimeMinMaxOps` | `DateTime` (`@db.Time`) | ✅ | | +| `TimeMinMaxMultiOps` | `DateTime` (`@db.Time`) | | 14+ | +| `TimeTzBloomOps` | `DateTime` (`@db.Timetz`) | | 14+ | +| `TimeTzMinMaxOps` | `DateTime` (`@db.Timetz`) | ✅ | | +| `TimeTzMinMaxMultiOps` | `DateTime` (`@db.Timetz`) | | 14+ | +| `UuidBloomOps` | `String` (`@db.Uuid`) | | 14+ | +| `UuidMinMaxOps` | `String` (`@db.Uuid`) | ✅ | | +| `UuidMinMaxMultiOps` | `String` (`@db.Uuid`) | | 14+ | +| `raw("other")` | | | | + +Read more about built-in operator classes in the [official PostgreSQL documentation](https://www.postgresql.org/docs/14/brin-builtin-opclasses.html). + +### Configuring if indexes are clustered or non-clustered with `clustered` (SQL Server) + +The `clustered` argument is available to configure (non)clustered indexes in SQL Server. It can be used on the `@id`, `@@id`, `@unique`, `@@unique` and `@@index` attributes. It is generally available in versions 4.0.0 and later, and available as part of the `extendedIndexes` preview feature in versions 3.13.0 and later. + +As an example, the following model configures the `@id` to be non-clustered (instead of the clustered default): + +```prisma file=schema.prisma showLineNumbers +model Example { + id Int @id(clustered: false) + value Int +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE [Example] ( + id INT NOT NULL, + value INT, + CONSTRAINT [Example_pkey] PRIMARY KEY NONCLUSTERED (id) +) +``` + +The default value of `clustered` for each attribute is as follows: + +| Attribute | Value | +| ---------- | ------- | +| `@id` | `true` | +| `@@id` | `true` | +| `@unique` | `false` | +| `@@unique` | `false` | +| `@@index` | `false` | + +A table can have at most one clustered index. + +### Upgrading from previous versions + + + +These index configuration changes can be **breaking changes** when activating the functionality for certain, existing Prisma schemas for existing databases. After enabling the preview features required to use them, run `prisma db pull` to introspect the existing database to update your Prisma schema before using Prisma Migrate again. + + + +A breaking change can occur in the following situations: + +- **Existing sort constraints and indexes:** earlier versions of Prisma ORM will assume that the desired sort order is _ascending_ if no order is specified explicitly. This means that this is a breaking change if you have existing constraints or indexes that are using descending sort order and migrate your database without first specifying this in your data model. +- **Existing length constraints and indexes:** in earlier versions of Prisma ORM, indexes and constraints that were length constrained in MySQL could not be represented in the Prisma schema. Therefore `prisma db pull` was not fetching these and you could not manually specify them. When you ran `prisma db push` or `prisma migrate dev` they were ignored if already present in your database. Since you are now able to specify these, migrate commands will now drop them if they are missing from your data model but present in the database. +- **Existing indexes other than `BTree` (PostgreSQL):** earlier versions of Prisma ORM only supported the default `BTree` index type. Other supported indexes (`Hash`, `Gist`, `Gin`, `SpGist` and `Brin`) need to be added before migrating your database. +- **Existing (non-)clustered indexes (SQL Server):** earlier versions of Prisma ORM did not support configuring an index as clustered or non-clustered. For indexes that do not use the default, these need to be added before migrating your database. + +In each of the cases above unwanted changes to your database can be prevented by properly specifying these properties in your data model where necessary. **The easiest way to do this is to use `prisma db pull` to retrieve any existing constraints or configuration.** Alternatively, you could also add these arguments manually. This should be done before using `prisma db push` or `prisma migrate dev` the first time after the upgrade. + +## Full text indexes (MySQL and MongoDB) + +The `fullTextIndex` preview feature provides support for introspection and migration of full text indexes in MySQL and MongoDB in version 3.6.0 and later. This can be configured using the `@@fulltext` attribute. Existing full text indexes in the database are added to your Prisma schema after introspecting with `db pull`, and new full text indexes added in the Prisma schema are created in the database when using Prisma Migrate. This also prevents validation errors in some database schemas that were not working before. + + + +For now we do not enable the full text search commands in Prisma Client for MongoDB; the progress can be followed in the [MongoDB](https://github.com/prisma/prisma/issues/9413) issue. + + + +### Enabling the `fullTextIndex` preview feature + +To enable the `fullTextIndex` preview feature, add the `fullTextIndex` feature flag to the `generator` block of the `schema.prisma` file: + +```prisma file=schema.prisma showLineNumbers +generator client { + provider = "prisma-client-js" + previewFeatures = ["fullTextIndex"] +} +``` + +### Examples + +The following example demonstrates adding a `@@fulltext` index to the `title` and `content` fields of a `Post` model: + +```prisma file=schema.prisma showLineNumbers +model Post { + id Int @id + title String @db.VarChar(255) + content String @db.Text + + @@fulltext([title, content]) +} +``` + +On MongoDB, you can use the `@@fulltext` index attribute (via the `fullTextIndex` preview feature) with the `sort` argument to add fields to your full-text index in ascending or descending order. The following example adds a `@@fulltext` index to the `title` and `content` fields of the `Post` model, and sorts the `title` field in descending order: + +```prisma file=schema.prisma showLineNumbers +generator js { + provider = "prisma-client-js" + previewFeatures = ["fullTextIndex"] +} + +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +model Post { + id String @id @map("_id") @db.ObjectId + title String + content String + + @@fulltext([title(sort: Desc), content]) +} +``` + +### Upgrading from previous versions + + + +This can be a **breaking change** when activating the functionality for certain, existing Prisma schemas for existing databases. After enabling the preview features required to use them, run `prisma db pull` to introspect the existing database to update your Prisma schema before using Prisma Migrate again. + + + +Earlier versions of Prisma ORM converted full text indexes using the `@@index` attribute rather than the `@@fulltext` attribute. After enabling the `fullTextIndex` preview feature, run `prisma db pull` to convert these indexes to `@@fulltext` before migrating again with Prisma Migrate. If you do not do this, the existing indexes will be dropped instead and normal indexes will be created in their place. diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/40-views.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/40-views.mdx new file mode 100644 index 0000000000..f78802b4ef --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/40-views.mdx @@ -0,0 +1,371 @@ +--- +title: 'Views' +metaTitle: 'How to include views in your Prisma schema' +metaDescription: 'How to include views in your Prisma schema' +hidePage: false +sidebar_class_name: preview-badge +tocDepth: 3 +--- + + + + + +Support for views is currently a very early [Preview](/orm/more/releases#preview) feature. You can add a view to your Prisma schema with the `view` keyword or introspect the views in your database schema with `db pull`. You cannot yet apply views in your schema to your database with Prisma Migrate and `db push` unless the changes are added manually to your migration file using the `--create-only` flag.

For updates on progress with this feature, follow [our GitHub issue](https://github.com/prisma/prisma/issues/17335). + +
+ +Database views allow you to name and store queries. In relational databases, views are [stored SQL queries](https://www.postgresql.org/docs/current/sql-createview.html) that might include columns in multiple tables, or calculated values such as aggregates. In MongoDB, views are queryable objects where the contents are defined by an [aggregation pipeline](https://www.mongodb.com/docs/manual/core/aggregation-pipeline) on other collections. + +The `views` preview feature allows you to represent views in your Prisma schema with the `view` keyword. To use views in Prisma ORM, follow these steps: + +- [Enable the `views` preview feature](#enable-the-views-preview-feature) +- [Create a view in the underlying database](#create-a-view-in-the-underlying-database), either directly or as a [manual addition to a Prisma Migrate migration file](#use-views-with-prisma-migrate-and-db-push), or use an existing view +- [Represent the view in your Prisma schema](#add-views-to-your-prisma-schema) +- [Query the view in Prisma Client](#query-views-in-prisma-client) + +
+ +## Enable the `views` preview feature + +Support for views is currently in an early preview. To enable the `views` preview feature, add the `views` feature flag to the `previewFeatures` field of the `generator` block in your Prisma Schema: + +```prisma file=schema.prisma highlight=3;add showLineNumbers +generator client { + provider = "prisma-client-js" + //add-next-line + previewFeatures = ["views"] +} +``` + +Please leave feedback about this preview feature in our dedicated [preview feature feedback issue for `views`](https://github.com/prisma/prisma/issues/17335). + +## Create a view in the underlying database + +Currently, you cannot apply views that you define in your Prisma schema to your database with Prisma Migrate and `db push`. Instead, you must first create the view in the underlying database, either manually or [as part of a migration](#use-views-with-prisma-migrate-and-db-push). + +For example, take the following Prisma schema with a `User` model and a related `Profile` model: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + bio String + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + bio String + User User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId +} +``` + + + + +Next, take a `UserInfo` view in the underlying database that combines the `email` and `name` fields from the `User` model and the `bio` field from the `Profile` model. + +For a relational database, the SQL statement to create this view is: + +```sql +CREATE VIEW "UserInfo" AS + SELECT u.id, email, name, bio + FROM "User" u + LEFT JOIN "Profile" p ON u.id = p."userId"; +``` + +For MongoDB, you can [create a view](https://www.mongodb.com/docs/manual/core/views/join-collections-with-view/) with the following command: + +```ts +db.createView('UserInfo', 'User', [ + { + $lookup: { + from: 'Profile', + localField: '_id', + foreignField: 'userId', + as: 'ProfileData', + }, + }, + { + $project: { + _id: 1, + email: 1, + name: 1, + bio: '$ProfileData.bio', + }, + }, + { $unwind: '$bio' }, +]) +``` + +## Use views with Prisma Migrate and `db push` + +If you apply changes to your Prisma schema with Prisma Migrate or `db push`, Prisma ORM does not create or run any SQL related to views. + +To include views in a migration, run `migrate dev --create-only` and then manually add the SQL for views to your migration file. Alternatively, you can create views manually in the database. + +## Add views to your Prisma schema + +To add a view to your Prisma schema, use the `view` keyword. + +You can represent the `UserInfo` view from the example above in your Prisma schema as follows: + + + + +```prisma +view UserInfo { + id Int @unique + email String + name String + bio String +} +``` + + + + +```prisma +view UserInfo { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + name String + bio String +} +``` + + + + +### Write by hand + +A `view` block is comprised of two main pieces: + +- The `view` block definition +- The view's field definitions + +These two pieces allow you to define the name of your view in the generated Prisma Client and the columns present in your view's query results. + +#### Define a `view` block + +To define the `UserInfo` view from the example above, begin by using the `view` keyword to define a `view` block in your schema named `UserInfo`: + +```prisma +view UserInfo { + // Fields +} +``` + +#### Define fields + +The properties of a view are called _fields_, which consist of: + +- A field name +- A field type + +The fields of the `UserInfo` example view can be defined as follows: + + + + +```prisma highlight=2-5;normal +view UserInfo { + //highlight-start + id Int @unique + email String + name String + bio String + //highlight-end +} +``` + + + + +```prisma highlight=2-5;normal +view UserInfo { + //highlight-start + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + name String + bio String + //highlight-end +} +``` + + + + +Each _field_ of a `view` block represents a column in the query results of the view in the underlying database. + +### Use introspection + + + Currently only available for PostgreSQL, MySQL, SQL Server and CockroachDB. + + +If you have an existing view or views defined in your database, [introspection](/orm/prisma-schema/introspection) will automatically generate `view` blocks in your Prisma schema that represent those views. + +Assuming the example `UserInfo` view exists in your underlying database, running the following command will generate a `view` block in your Prisma schema representing that view: + +```terminal copy +npx prisma db pull +``` + +The resulting `view` block will be defined as follows: + +```prisma +/// The underlying view does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client. +view UserInfo { + id Int? + email String? + name String? + bio String? + + @@ignore +} +``` + +The `view` block is generated initially with a `@@ignore` attribute because [there is no unique identifier defined](#unique-identifier) (which is currently a [limitation](#unique-identifier) of the views preview feature). + + + +Please note for now `db pull` will only introspect views in your schema when using PostgreSQL, MySQL, SQL Server or CockroachDB. Support for this workflow will be extended to other database providers. + + + +#### Adding a unique identifier to an introspected view + +To be able to use the introspected view in Prisma Client, you will need to select and define one or multiple of the fields as the unique identifier. + +In the above view's case, the `id` column refers to a uniquely identifiable field in the underlying `User` table so that field can also be used as the uniquely identifiable field in the `view` block. + +In order to make this `view` block valid you will need to: + +- Remove the _optional_ flag `?` from the `id` field +- Add the `@unique` attribute to the `id` field +- Remove the `@@ignore` attribute +- Remove the generated comment warning about an invalid view + + +```prisma highlight=4;add|1,3,8,9;delete +//delete-next-line +/// The underlying view does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client. +view UserInfo { + //delete-next-line + id Int? + //add-next-line + id Int @unique + email String? + name String? + bio String? + //delete-start + + @@ignore + //delete-end +} +``` + +When re-introspecting your database, any custom changes to your view definitions will be preserved. + +#### The `views` directory + +Introspection of a database with one or more existing views will also create a new `views` directory within your `prisma` directory (starting with Prisma version 4.12.0). This directory will contain a subdirectory named after your database's schema which contains a `.sql` file for each view that was introspected in that schema. Each file will be named after an individual view and will contain the query the related view defines. + +For example, after introspecting a database with the default `public` schema using the model used above you will find a `prisma/views/public/UserInfo.sql` file was created with the following contents: + +```sql +SELECT + u.id, + u.email, + u.name, + p.bio +FROM + ( + "User" u + LEFT JOIN "Profile" p ON ((u.id = p."userId")) + ); +``` + +### Limitations + +#### Unique Identifier + +Currently, Prisma ORM treats views in the same way as models. This means that a view needs to have at least one _unique identifier_, which can be represented by any of the following: + +- A unique constraint denoted with [`@unique`](/orm/prisma-schema/data-model/models#defining-a-unique-field) +- A composite unique constraint denoted with [`@@unique`](/orm/prisma-schema/data-model/models#defining-a-unique-field) +- An [`@id`](/orm/prisma-schema/data-model/models#defining-an-id-field) field +- A composite identifier denoted with [`@@id`](/orm/prisma-schema/data-model/models#composite-ids) + +In relational databases, a view's unique identifier can be defined as a `@unique` attribute on one field, or a `@@unique` attribute on multiple fields. When possible, it is preferable to use a `@unique` or `@@unique` constraint over an `@id` or `@@id` field. + +In MongoDB, however, the unique identifier must be an `@id` attribute that maps to the `_id` field in the underlying database with `@map("_id")`. + +In the example above, the `id` field has a `@unique` attribute. If another column in the underlying `User` table had been defined as uniquely identifiable and made available in the view's query results, that column could have been used as the unique identifier instead. + +#### Introspection + +Currently, introspection of views is only available for PostgreSQL, MySQL, SQL Server and CockroachDB. If you are using another database provider, your views must be added manually. + +This is a temporary limitation and support for introspection will be extended to the other supported datasource providers. + +## Query views in Prisma Client + +You can query views in Prisma Client in the same way that you query models. For example, the following query finds all users with a `name` of `'Alice'` in the `UserInfo` view defined above. + +```ts +const userinfo = await prisma.userInfo.findMany({ + where: { + name: 'Alice', + }, +}) +``` + +Currently, Prisma Client allows you to update a view if the underlying database allows it, without any additional validation. + +## Special types of views + +This section describes how to use Prisma ORM with updatable and materialized views in your database. + +### Updatable views + +Some databases support updatable views (e.g. [PostgreSQL](https://www.postgresql.org/docs/current/sql-createview.html#SQL-CREATEVIEW-UPDATABLE-VIEWS), [MySQL](https://dev.mysql.com/doc/refman/8.0/en/view-updatability.html) and [SQL Server](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql?view=sql-server-ver16#updatable-views)). Updatable views allow you to create, update or delete entries. + +Currently Prisma ORM treats all `view`s as updatable views. If the underlying database supports this functionality for the view, the operation should succeed. If the view is not marked as updatable, the database will return an error, and Prisma Client will then throw this error. + +In the future, Prisma Client might support marking individual views as updatable or not updatable. Please comment on our [`views` feedback issue](https://github.com/prisma/prisma/issues/17335) with your use case. + +### Materialized views + +Some databases support materialized views, e.g. [PostgreSQL](https://www.postgresql.org/docs/current/rules-materializedviews.html), [CockroachDB](https://www.cockroachlabs.com/docs/stable/views.html#materialized-views), [MongoDB](https://www.mongodb.com/docs/manual/core/materialized-views/), and [SQL Server](https://learn.microsoft.com/en-us/sql/relational-databases/views/create-indexed-views?view=sql-server-ver16) (where they're called "indexed views"). + +Materialized views persist the result of the view query for faster access and only update it on demand. + +Currently, Prisma ORM does not support materialized views. However, when you [manually create a view](#create-a-view-in-the-underlying-database), you can also create a materialized view with the corresponding command in the underlying database. You can then use Prisma Client's [TypedSQL functionality](/orm/prisma-client/using-raw-sql) to execute the command and refresh the view manually. + +In the future Prisma Client might support marking individual views as materialized and add a Prisma Client method to refresh the materialized view. Please comment on our [`views` feedback issue](https://github.com/prisma/prisma/issues/17335) with your use case. diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/50-database-mapping.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/50-database-mapping.mdx new file mode 100644 index 0000000000..7ace185004 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/50-database-mapping.mdx @@ -0,0 +1,234 @@ +--- +title: 'Database mapping' +metaTitle: 'Database mapping' +metaDescription: 'Database mapping in Prisma schema' +tocDepth: 3 +--- + + + +The [Prisma schema](/orm/prisma-schema) includes mechanisms that allow you to define names of certain database objects. You can: + +- [Map model and field names to different collection/table and field/column names](#mapping-collectiontable-and-fieldcolumn-names) +- [Define constraint and index names](#constraint-and-index-names) + + + +## Mapping collection/table and field/column names + +Sometimes the names used to describe entities in your database might not match the names you would prefer in your generated API. Mapping names in the Prisma schema allows you to influence the naming in your Client API without having to change the underlying database names. + +A common approach for naming tables/collections in databases for example is to use plural form and [snake_case](https://en.wikipedia.org/wiki/Snake_case) notation. However, we recommended a different [naming convention (singular form, PascalCase)](/orm/reference/prisma-schema-reference#naming-conventions). + +`@map` and `@@map` allow you to [tune the shape of your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) by decoupling model and field names from table and column names in the underlying database. + +### Map collection / table names + +As an example, when you [introspect](/orm/prisma-schema/introspection) a database with a table named `comments`, the resulting Prisma model will look like this: + +```prisma +model comments { + // Fields +} +``` + +However, you can still choose `Comment` as the name of the model (e.g. to follow the naming convention) without renaming the underlying `comments` table in the database by using the [`@@map`](/orm/reference/prisma-schema-reference#map-1) attribute: + +```prisma highlight=4;normal +model Comment { + // Fields + + //highlight-next-line + @@map("comments") +} +``` + +With this modified model definition, Prisma Client automatically maps the `Comment` model to the `comments` table in the underlying database. + +### Map field / column names + +You can also [`@map`](/orm/reference/prisma-schema-reference#map) a column/field name: + +```prisma highlight=2-4;normal +model Comment { + //highlight-start + content String @map("comment_text") + email String @map("commenter_email") + type Enum @map("comment_type") + //highlight-end + + @@map("comments") +} +``` + +This way the `comment_text` column is not available under `prisma.comment.comment_text` in the Prisma Client API, but can be accessed via `prisma.comment.content`. + +### Map enum names and values + +You can also `@map` an enum value, or `@@map` an enum: + +```prisma highlight=3,5;normal +enum Type { + Blog, + //highlight-next-line + Twitter @map("comment_twitter") + + //highlight-next-line + @@map("comment_source_enum") +} +``` + +## Constraint and index names + +You can optionally use the `map` argument to explicitly define the **underlying constraint and index names** in the Prisma schema for the attributes [`@id`](/orm/reference/prisma-schema-reference#id), [`@@id`](/orm/reference/prisma-schema-reference#id-1), [`@unique`](/orm/reference/prisma-schema-reference#unique), [`@@unique`](/orm/reference/prisma-schema-reference#unique-1), [`@@index`](/orm/reference/prisma-schema-reference#index) and [`@relation`](/orm/reference/prisma-schema-reference#relation). (This is available in Prisma ORM version [2.29.0](https://github.com/prisma/prisma/releases/tag/2.29.0) and later.) + +When introspecting a database, the `map` argument will _only_ be rendered in the schema if the name _differs_ from Prisma ORM's [default constraint naming convention for indexes and constraints](#prisma-orms-default-naming-conventions-for-indexes-and-constraints). + + + +If you use Prisma Migrate in a version earlier than 2.29.0 and want to maintain your existing constraint and index names after upgrading to a newer version, **do not** immediately run `prisma migrate` or `prisma db push`. This will **change any underlying constraint name that does not follow Prisma ORM's convention**. Follow the [upgrade path that allows you to maintain existing constraint and index names](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-3/named-constraints#option-1-i-want-to-maintain-my-existing-constraint-and-index-names). + + + +### Use cases for named constraints + +Some use cases for explicitly named constraints include: + +- Company policy +- Conventions of other tools + +### Prisma ORM's default naming conventions for indexes and constraints + +Prisma ORM naming convention was chosen to align with PostgreSQL since it is deterministic. It also helps to maximize the amount of times where names do not need to be rendered because many databases out there they already align with the convention. + +Prisma ORM always uses the database names of entities when generating the default index and constraint names. If a model is remapped to a different name in the data model via `@@map` or `@map`, the default name generation will still take the name of the _table_ in the database as input. The same is true for fields and _columns_. + +| Entity | Convention | Example | +| ----------------- | --------------------------------- | ------------------------------ | +| Primary Key | \{tablename}\_pkey | `User_pkey` | +| Unique Constraint | \{tablename}\_\{column_names}\_key | `User_firstName_last_Name_key` | +| Non-Unique Index | \{tablename}\_\{column_names}\_idx | `User_age_idx` | +| Foreign Key | \{tablename}\_\{column_names}\_fkey | `User_childName_fkey` | + +Since most databases have a length limit for entity names, the names will be trimmed if necessary to not violate the database limits. We will shorten the part before the `_suffix` as necessary so that the full name is at most the maximum length permitted. + +### Using default constraint names + +When no explicit names are provided via `map` arguments Prisma ORM will generate index and constraint names following the [default naming convention](#prisma-orms-default-naming-conventions-for-indexes-and-constraints). + +If you introspect a database the names for indexes and constraints will be added to your schema unless they follow Prisma ORM's naming convention. If they do, the names are not rendered to keep the schema more readable. When you migrate such a schema Prisma will infer the default names and persist them in the database. + +#### Example + +The following schema defines three constraints (`@id`, `@unique`, and `@relation`) and one index (`@@index`): + +```prisma highlight=2,8,11,13;normal +model User { + //highlight-next-line + id Int @id @default(autoincrement()) + name String @unique + posts Post[] +} + +model Post { + //highlight-next-line + id Int @id @default(autoincrement()) + title String + authorName String @default("Anonymous") + //highlight-next-line + author User? @relation(fields: [authorName], references: [name]) + + //highlight-next-line + @@index([title, authorName]) +} +``` + +Since no explicit names are provided via `map` arguments Prisma will assume they follow our default naming convention. + +The following table lists the name of each constraint and index in the underlying database: +| Constraint or index | Follows convention | Underlying constraint or index names | +| ---------------------------------- | ------------------ | ------------------------------------ | +| `@id` (on `User` > `id` field) | Yes | `User_pk` | +| `@@index` (on `Post`) | Yes | `Post_title_authorName_idx` | +| `@id` (on `Post` > `id` field) | Yes | `Post_pk` | +| `@relation` (on `Post` > `author`) | Yes | `Post_authorName_fkey` | + +### Using custom constraint / index names + +You can use the `map` argument to define **custom constraint and index names** in the underlying database. + +#### Example + +The following example adds custom names to one `@id` and the `@@index`: + +```prisma highlight=2,13;normal +model User { + //highlight-next-line + id Int @id(map: "Custom_Primary_Key_Constraint_Name") @default(autoincrement()) + name String @unique + posts Post[] +} + +model Post { + //highlight-next-line + id Int @id @default(autoincrement()) + title String + authorName String @default("Anonymous") + //highlight-next-line + author User? @relation(fields: [authorName], references: [name]) + + //highlight-next-line + @@index([title, authorName], map: "My_Custom_Index_Name") +} +``` + +The following table lists the name of each constraint and index in the underlying database: + +| Constraint or index | Follows convention | Underlying constraint or index names | +| ---------------------------------- | ------------------ | ------------------------------------ | +| `@id` (on `User` > `id` field) | No | `Custom_Primary_Key_Constraint_Name` | +| `@@index` (on `Post`) | No | `My_Custom_Index_Name` | +| `@id` (on `Post` > `id` field) | Yes | `Post_pk` | +| `@relation` (on `Post` > `author`) | Yes | `Post_authorName_fkey` | + +### Related: Naming indexes and primary keys for Prisma Client + +Additionally to `map`, the `@@id` and `@@unique` attributes take an optional `name` argument that allows you to customize your Prisma Client API. + +On a model like: + +```prisma +model User { + firstName String + lastName String + + @@id([firstName, lastName]) +} +``` + +the default API for selecting on that primary key uses a generated combination of the fields: + +```ts +const user = await prisma.user.findUnique({ + where: { + firstName_lastName: { + firstName: 'Paul', + lastName: 'Panther', + }, + }, +}) +``` + +Specifying `@@id([firstName, lastName], name: "fullName")` will change the Prisma Client API to this instead: + +```ts highlight=3;edit +const user = await prisma.user.findUnique({ + where: { + //edit-next-line + fullName: { + firstName: 'Paul', + lastName: 'Panther', + }, + }, +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/60-multi-schema.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/60-multi-schema.mdx new file mode 100644 index 0000000000..af8c523fcc --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/60-multi-schema.mdx @@ -0,0 +1,197 @@ +--- +title: How to use Prisma ORM with multiple database schemas +metaTitle: How to use Prisma ORM with multiple database schemas +metaDescription: How to use Prisma ORM with multiple database schemas +tocDepth: 3 +--- + + + + + +Multiple database schema support is currently available with the PostgreSQL, CockroachDB, and SQL Server connectors. + + + +Many database providers allow you to organize database tables into named groups. You can use this to make the logical structure of the data model easier to understand, or to avoid naming collisions between tables. + +In PostgreSQL, CockroachDB, and SQL Server, these groups are known as schemas. We will refer to them as _database schemas_ to distinguish them from Prisma ORM's own schema. + +This guide explains how to: + +- include multiple database schemas in your Prisma schema +- apply your schema changes to your database with Prisma Migrate and `db push` +- introspect an existing database with multiple database schemas +- query across multiple database schemas with Prisma Client + + + +## How to enable the `multiSchema` preview feature + +Multi-schema support is currently in preview. To enable the `multiSchema` preview feature, add the `multiSchema` feature flag to the `previewFeatures` field of the `generator` block in your Prisma Schema: + +```prisma file=schema.prisma highlight=3;add showLineNumbers +generator client { + provider = "prisma-client-js" + //add-next-line + previewFeatures = ["multiSchema"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +## How to include multiple database schemas in your Prisma schema + +To use multiple database schemas in your Prisma schema file, add the names of your database schemas to an array in the `schemas` field, in the `datasource` block. The following example adds a `"base"` and a `"transactional"` schema: + +```prisma file=schema.prisma highlight=9;add showLineNumbers +generator client { + provider = "prisma-client-js" + previewFeatures = ["multiSchema"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + //add-next-line + schemas = ["base", "transactional"] +} +``` + +You do not need to change your connection string. The `schema` value of your connection string is the default database schema that Prisma Client connects to and uses for raw queries. All other Prisma Client queries use the schema of the model or enum that you are querying. + +To designate that a model or enum belongs to a specific database schema, add the `@@schema` attribute with the name of the database schema as a parameter. In the following example, the `User` model is part of the `"base"` schema, and the `Order` model and `Size` enum are part of the `"transactional"` schema: + +```prisma file=schema.prisma highlight=5,13;add showLineNumbers +model User { + id Int @id + orders Order[] + + //add-next-line + @@schema("base") +} + +model Order { + id Int @id + user User @relation(fields: [id], references: [id]) + user_id Int + + //add-next-line + @@schema("transactional") +} + +enum Size { + Small + Medium + Large + + @@schema("transactional") +} +``` + +### Tables with the same name in different database schemas + +If you have tables with the same name in different database schemas, you will need to map the table names to unique model names in your Prisma schema. This avoids name conflicts when you query models in Prisma Client. + +For example, consider a situation where the `config` table in the `base` database schema has the same name as the `config` table in the `users` database schema. To avoid name conflicts, give the models in your Prisma schema unique names (`BaseConfig` and `UserConfig`) and use the `@@map` attribute to map each model to the corresponding table name: + +```prisma file=schema.prisma showLineNumbers +model BaseConfig { + id Int @id + + @@map("config") + @@schema("base") +} + +model UserConfig { + id Int @id + + @@map("config") + @@schema("users") +} +``` + +## How to apply your schema changes with Prisma Migrate and `db push` + +You can use Prisma Migrate or `db push` to apply changes to a Prisma schema with multiple database schemas. + +As an example, add a `Profile` model to the `base` schema of the blog post model above: + +```prisma file=schema.prisma highlight=4,9-16;add showLineNumbers +model User { + id Int @id + orders Order[] + //add-next-line + profile Profile? + + @@schema("base") +} + +//add-start +model Profile { + id Int @id @default(autoincrement()) + bio String + user User @relation(fields: [userId], references: [id]) + userId Int @unique + + @@schema("base") +} +//add-end + +model Order { + id Int @id + user User @relation(fields: [id], references: [id]) + user_id Int + + @@schema("transactional") +} + +enum Size { + Small + Medium + Large + + @@schema("transactional") +} +``` + +You can then apply this schema change to your database. For example, you can use `migrate dev` to create and apply your schema changes as a migration: + +```terminal +npx prisma migrate dev --name add_profile +``` + +Note that if you move a model or enum from one schema to another, Prisma ORM deletes the model or enum from the source schema and creates a new one in the target schema. + +## How to introspect an existing database with multiple database schemas + +You can introspect an existing database that has multiple database schemas in the same way that you introspect a database that has a single database schema, using `db pull`: + +```terminal +npx prisma db pull +``` + +This updates your Prisma schema to match the current state of the database. + +If you have tables with the same name in different database schemas, Prisma ORM shows a validation error pointing out the conflict. To fix this, [rename the introspected models with the `@map` attribute](#tables-with-the-same-name-in-different-database-schemas). + +## How to query across multiple database schemas with Prisma Client + +You can query models in multiple database schemas without any change to your Prisma Client query syntax. For example, the following query finds all orders for a given user, using the Prisma schema above: + +```ts +const orders = await prisma.order.findMany({ + where: { + user: { + id: 1, + }, + }, +}) +``` + +## Learn more about the `multiSchema` preview feature + +To learn more about future plans for the `multiSchema` preview feature, or to give feedback, refer to [our Github issue](https://github.com/prisma/prisma/issues/1122). diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/70-unsupported-database-features.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/70-unsupported-database-features.mdx new file mode 100644 index 0000000000..a620d29f68 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/70-unsupported-database-features.mdx @@ -0,0 +1,104 @@ +--- +title: 'Unsupported database features' +metaTitle: 'Prisma schema: Unsupported database features' +metaDescription: 'How to support database features that do not have an equivalent syntax in Prisma Schema Language.' +tocDepth: 2 +toc_max_heading_level: 2 +--- + + + +Not all database functions and features of Prisma ORM's supported databases have a Prisma Schema Language equivalent. Refer to the [database features matrix](/orm/reference/database-features) for a complete list of supported features. + + + +## Native database functions + +Prisma Schema Language supports several [functions](/orm/reference/prisma-schema-reference#attribute-functions) that you can use to set the default value of a field. The following example uses the Prisma ORM-level `uuid()` function to set the value of the `id` field: + +```prisma +model Post { + id String @id @default(uuid()) +} +``` + +However, you can also use **native database functions** to define default values with [`dbgenerated(...)`](/orm/reference/prisma-schema-reference#dbgenerated) on relational databases (MongoDB does not have the concept of database-level functions). The following example uses the PostgreSQL `gen_random_uuid()` function to populate the `id` field: + +```prisma +model User { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid +} +``` + +### When to use a database-level function + +There are two reasons to use a database-level function: + +- There is no equivalent Prisma ORM function (for example, `gen_random_bytes` in PostgreSQL). +- You cannot or do not want to rely on functions such `uuid()` and `cuid()`, which are only implemented at a Prisma ORM level and do not manifest in the database. + + Consider the following example, which sets the `id` field to a randomly generated `UUID`: + + ```prisma + model Post { + id String @id @default(uuid()) + } + ``` + + The UUID is _only_ generated if you use Prisma Client to create the `Post`. If you create posts in any other way, such as a bulk import script written in plain SQL, you must generate the UUID yourself. + +### Enable PostgreSQL extensions for native database functions + +In PostgreSQL, some native database functions are part of an extension. For example, in PostgreSQL versions 12.13 and earlier, the `gen_random_uuid()` function is part of the [`pgcrypto`](https://www.postgresql.org/docs/10/pgcrypto.html) extension. + +To use a PostgreSQL extension, you must first install it on the file system of your database server. + +In Prisma ORM versions 4.5.0 and later, you can then activate the extension by declaring it in your Prisma schema with the [`postgresqlExtensions` preview feature](/orm/prisma-schema/postgresql-extensions): + +```prisma file=schema.prisma highlight=3,9;add showLineNumbers +generator client { + provider = "prisma-client-js" + //add-next-line + previewFeatures = ["postgresqlExtensions"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + //add-next-line + extensions = [pgcrypto] +} +``` + +In earlier versions of Prisma ORM, you must instead run a SQL command to activate the extension: + +```sql +CREATE EXTENSION IF NOT EXISTS pgcrypto; +``` + +If your project uses [Prisma Migrate](/orm/prisma-migrate), you must [install the extension as part of a migration](/orm/prisma-migrate/workflows/native-database-functions) . Do not install the extension manually, because it is also required by the shadow database. + +Prisma Migrate returns the following error if the extension is not available: + +``` +Migration `20210221102106_failed_migration` failed to apply cleanly to a temporary database. +Database error: Error querying the database: db error: ERROR: type "pgcrypto" does not exist +``` + +## Unsupported field types + +Some database types of relational databases, such as `polygon` or `geometry`, do not have a Prisma Schema Language equivalent. Use the [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) field type to represent the field in your Prisma schema: + +```prisma highlight=3;normal +model Star { + id Int @id @default(autoincrement()) + //highlight-next-line + position Unsupported("circle")? @default(dbgenerated("'<(10,4),11>'::circle")) +} +``` + +The `prisma migrate dev` and `prisma db push` command will both create a `position` field of type `circle` in the database. However, the field will not be available in the generated Prisma Client. + +## Unsupported database features + +Some features, like SQL views or partial indexes, cannot be represented in the Prisma schema. If your project uses [Prisma Migrate](/orm/prisma-migrate), you must [include unsupported features as part of a migration](/orm/prisma-migrate/workflows/unsupported-database-features) . diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/80-table-inheritance.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/80-table-inheritance.mdx new file mode 100644 index 0000000000..5824300c6b --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/80-table-inheritance.mdx @@ -0,0 +1,328 @@ +--- +title: Table inheritance +metaTitle: Table inheritance +metaDescription: Learn about the use cases and patterns for table inheritance in Prisma ORM that enable usage of union types or polymorphic structures in your application. +tocDepth: 3 +--- + +## Overview + +Table inheritance is a software design pattern that allows the modeling of hierarchical relationships between entities. Using table inheritance on the database level can also enable the use of union types in your JavaScript/TypeScript application or share a set of common properties across multiple models. + +This page introduces two approaches to table inheritance and explains how to use them with Prisma ORM. + +A common use case for table inheritance may be when an application needs to display a _feed_ of some kind of _content activities_. A content activity in this case, could be a _video_ or an _article_. As an example, let's assume that: + +- a content activity always has an `id` and a `url` +- in addition to `id` and a `url`, a video also has a `duration` (modeled as an `Int`) +- in addition to `id` and a `url`, an article also a `body` (modeled as a `String`) + +### Use cases + +#### Union types + +Union types are a convenient feature in TypeScript that allows developers to work more flexibly with the types in their data model. + +In TypeScript, union types look as follows: + +```ts no-copy +type Activity = Video | Article +``` + +While [it's currently not possible to model union types in the Prisma schema](https://github.com/prisma/prisma/issues/2505), you can use them with Prisma ORM by using table inheritance and some additional type definitions. + +#### Sharing properties across multiple models + +If you have a use case where multiple models should share a particular set of properties, you can model this using table inheritance as well. + +For example, if both the `Video` and `Article` models from above should have a shared `title` property, you can achieve this with table inheritance as well. + +### Example + +In a simple Prisma schema, this would look as follows. Note that we're adding a `User` model as well to illustrate how this can work with relations: + +```prisma file=schema.prisma showLineNumbers +model Video { + id Int @id + url String @unique + duration Int + + user User @relation(fields: [userId], references: [id]) + userId Int +} + +model Article { + id Int @id + url String @unique + body String + + user User @relation(fields: [userId], references: [id]) + userId Int +} + +model User { + id Int @id + name String + videos Video[] + articles Article[] +} +``` + +Let's investigate how we can model this using table inheritance. + +### Single-table vs multi-table inheritance + +Here is a quick comparison of the two main approaches for table inheritance: + +- **Single-table inheritance (STI)**: Uses a _single_ table to store data of _all_ the different entities in one location. In our example, there'd be a single `Activity` table with the `id`, `url` as well as the `duration` and `body` column. It also uses a `type` column that indicates whether an _activity_ is a _video_ or an _article_. +- **Multi-table inheritance (MTI)**: Uses _multiple_ tables to store the data of the different entities separately and links them via foreign keys. In our example, there'd be an `Activity` table with the `id`, `url` column, a `Video` table with the `duration` and a foreign key to `Activity` as well as an `Article` table with the `body` and a foreign key. There is also a `type` column that acts as a discriminator and indicates whether an _activity_ is a _video_ or an _article_. Note that multi-table inheritance is also sometimes called _delegated types_. + +You can learn about the tradeoffs of both approaches [below](#tradeoffs-between-sti-and-mti). + +## Single-table inheritance (STI) + +### Data model + +Using STI, the above scenario can be modeled as follows: + +```prisma +model Activity { + id Int @id // shared + url String @unique // shared + duration Int? // video-only + body String? // article-only + type ActivityType // discriminator + + owner User @relation(fields: [ownerId], references: [id]) + ownerId Int +} + +enum ActivityType { + Video + Article +} + +model User { + id Int @id @default(autoincrement()) + name String? + activities Activity[] +} +``` + +A few things to note: + +- The model-specific properties `duration` and `body` must be marked as optional (i.e., with `?`). That's because a record in the `Activity` table that represents a _video_ must not have a value for `body`. Conversely, an `Activity` record representing an _article_ can never have a `duration` set. +- The `type` discriminator column indicates whether each record represents a _video_ or an _article_ item. + +### Prisma Client API + +Due to how Prisma ORM generates types and an API for the data model, there will only to be an `Activity` type and the CRUD queries that belong to it (`create`, `update`, `delete`, ...) available to you. + +#### Querying for videos and articles + +You can now query for only _videos_ or _articles_ by filtering on the `type` column. For example: + +```ts +// Query all videos +const videos = await prisma.activity.findMany({ + where: { type: 'Video' }, +}) + +// Query all articles +const articles = await prisma.activity.findMany({ + where: { type: 'Article' }, +}) +``` + +#### Defining dedicated types + +When querying for videos and articles like that, TypeScript will still only recognize an `Activity` type. That can be annoying because even the objects in `videos` will have (optional) `body` and the objects in `articles` will have (optional) `duration` fields. + +If you want to have type safety for these objects, you need to define dedicated types for them. You can do this, for example, by using the generated `Activity` type and the TypeScript `Omit` utility type to remove properties from it: + +```ts +import { Activity } from '@prisma/client' + +type Video = Omit +type Article = Omit +``` + +In addition, it will be helpful to create mapping functions that convert an object of type `Activity` to the `Video` and `Article` types: + +```ts +function activityToVideo(activity: Activity): Video { + return { + url: activity.url, + duration: activity.duration ? activity.duration : -1, + ownerId: activity.ownerId, + } as Video +} + +function activityToArticle(activity: Activity): Article { + return { + url: activity.url, + body: activity.body ? activity.body : '', + ownerId: activity.ownerId, + } as Article +} +``` + +Now you can turn an `Activity` into a more specific type (i.e., `Article` or `Video`) after querying: + +```ts +const videoActivities = await prisma.activity.findMany({ + where: { type: 'Video' }, +}) +const videos: Video[] = videoActivities.map(activityToVideo) +``` + +#### Using Prisma Client extension for a more convenient API + +You can use [Prisma Client extensions](/orm/prisma-client/client-extensions) to create a more convenient API for the table structures in your database. + +## Multi-table inheritance (MTI) + +### Data model + +Using MTI, the above scenario can be modeled as follows: + +```prisma +model Activity { + id Int @id @default(autoincrement()) + url String // shared + type ActivityType // discriminator + + video Video? // model-specific 1-1 relation + article Article? // model-specific 1-1 relation + + owner User @relation(fields: [ownerId], references: [id]) + ownerId Int +} + +model Video { + id Int @id @default(autoincrement()) + duration Int // video-only + activityId Int @unique + activity Activity @relation(fields: [activityId], references: [id]) +} + +model Article { + id Int @id @default(autoincrement()) + body String // article-only + activityId Int @unique + activity Activity @relation(fields: [activityId], references: [id]) +} + +enum ActivityType { + Video + Article +} + +model User { + id Int @id @default(autoincrement()) + name String? + activities Activity[] +} +``` + +A few things to note: + +- A 1-1 relation is needed between `Activity` and `Video` as well as `Activity` and `Article`. This relationship is used to fetch the specific information about a record when needed. +- The model-specific properties `duration` and `body` can be made _required_ with this approach. +- The `type` discriminator column indicates whether each record represents a _video_ or an _article_ item. + +### Prisma Client API + +This time, you can query for videos and articles directly via the `video` and `article` properties on your `PrismaClient` instance. + +#### Querying for videos and articles + +If you want to access the shared properties, you need to use `include` to fetch the relation to `Activity`. + +```ts +// Query all videos +const videos = await prisma.video.findMany({ + include: { activity: true }, +}) + +// Query all articles +const articles = await prisma.article.findMany({ + include: { activity: true }, +}) +``` + +Depending on your needs, you may also query the other way around by filtering on the `type` discriminator column: + +```ts +// Query all videos +const videoActivities = await prisma.activity.findMany({ + where: { type: 'Video' } + include: { video: true } +}) +``` + +#### Defining dedicated types + +While a bit more convenient in terms of types compared to STI, the generated typings likely still won't fit all your needs. + +Here's how you can define `Video` and `Article` types by combining Prisma ORM's generated `Video` and `Article` types with the `Activity` type. These combinations create a new type with the desired properties. Note that we're also omitting the `type` discriminator column because that's not needed anymore on the specific types: + +```ts +import { + Video as VideoDB, + Article as ArticleDB, + Activity, +} from '@prisma/client' + +type Video = Omit +type Article = Omit +``` + +Once these types are defined, you can define mapping functions to convert the types you receive from the queries above into the desired `Video` and `Article` types. Here's the example for the `Video` type: + +```ts +import { Prisma, Video as VideoDB, Activity } from '@prisma/client' + +type Video = Omit + +// Create `VideoWithActivity` typings for the objects returned above +const videoWithActivity = Prisma.validator()({ + include: { activity: true }, +}) +type VideoWithActivity = Prisma.VideoGetPayload + +// Map to `Video` type +function toVideo(a: VideoWithActivity): Video { + return { + id: a.id, + url: a.activity.url, + ownerId: a.activity.ownerId, + duration: a.duration, + activityId: a.activity.id, + } +} +``` + +Now you can take the objects returned by the queries above and transform them using `toVideo`: + +```ts +const videoWithActivities = await prisma.video.findMany({ + include: { activity: true }, +}) +const videos: Video[] = videoWithActivities.map(toVideo) +``` + +#### Using Prisma Client extension for a more convenient API + +You can use [Prisma Client extensions](/orm/prisma-client/client-extensions) to create a more convenient API for the table structures in your database. + +## Tradeoffs between STI and MTI + +- **Data model**: The data model may feel more clean with MTI. With STI, you may end up with very wide rows and lots of columns that have `NULL` values in them. +- **Performance**: MTI may come with a performance cost because you need to join the parent and child tables to access _all_ properties relevant for a model. +- **Typings**: With Prisma ORM, MTI gives you proper typings for the specific models (i.e., `Article` and `Video` in the examples above) already, while you need to create these from scratch with STI. +- **IDs / Primary keys**: With MTI, records have two IDs (one on the parent and another on the child table) that may not match. You need to consider this in the business logic of your application. + +## Third-party solutions + +While Prisma ORM doesn't natively support union types or polymorphism at the moment, you can check out [Zenstack](https://github.com/zenstackhq/zenstack) which is adding an extra layer of features to the Prisma schema. Read their [blog post about polymorphism in Prisma ORM](https://zenstack.dev/blog/polymorphism) to learn more. diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/index.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/index.mdx new file mode 100644 index 0000000000..ba1ec9f4d5 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/index.mdx @@ -0,0 +1,10 @@ +--- +title: 'Data model' +metaTitle: 'Data model' +metaDescription: 'Learn everything you need about the Prisma schema data model.' +hide_table_of_contents: true +--- + +## In this section + + diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/50-introspection.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/50-introspection.mdx new file mode 100644 index 0000000000..0e76630d80 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/50-introspection.mdx @@ -0,0 +1,397 @@ +--- +title: 'Introspection' +metaTitle: 'What is introspection? (Reference)' +metaDescription: 'Learn how you can introspect your database to generate a data model into your Prisma schema.' +--- + + + +You can introspect your database using the Prisma CLI in order to generate the [data model](/orm/prisma-schema/data-model) in your [Prisma schema](/orm/prisma-schema). The data model is needed to [generate Prisma Client](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Introspection is often used to generate an _initial_ version of the data model when [adding Prisma ORM to an existing project](/getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-postgresql). + +However, it can also be [used _repeatedly_ in an application](#introspection-with-an-existing-schema). This is most commonly the case when you're _not_ using [Prisma Migrate](/orm/prisma-migrate) but perform schema migrations using plain SQL or another migration tool. In that case, you also need to re-introspect your database and subsequently re-generate Prisma Client to reflect the schema changes in your [Prisma Client API](/orm/prisma-client). + + + +## What does introspection do? + +Introspection has one main function: Populate your Prisma schema with a data model that reflects the current database schema. + +![Introspect your database with Prisma](/img/orm/prisma-db-pull-generate-schema.png) + +Here's an overview of its main functions on SQL databases: + +- Map _tables_ in the database to [Prisma models](/orm/prisma-schema/data-model/models#defining-models) +- Map _columns_ in the database to the [fields](/orm/prisma-schema/data-model/models#defining-fields) of Prisma models +- Map _indexes_ in the database to [indexes](/orm/prisma-schema/data-model/models#defining-an-index) in the Prisma schema +- Map _database constraints_ to [attributes](/orm/prisma-schema/data-model/models#defining-attributes) or [type modifiers](/orm/prisma-schema/data-model/models#type-modifiers) in the Prisma schema + +On MongoDB, the main functions are the following: + +- Map _collections_ in the database to [Prisma models](/orm/prisma-schema/data-model/models#defining-models). Because a _collection_ in MongoDB doesn't have a predefined structure, Prisma ORM _samples_ the _documents_ in the collection and derives the model structure accordingly (i.e. it maps the fields of the _document_ to the [fields](/orm/prisma-schema/data-model/models#defining-fields) of the Prisma model). If _embedded types_ are detected in a collection, these will be mapped to [composite types](/orm/prisma-schema/data-model/models#defining-composite-types) in the Prisma schema. +- Map _indexes_ in the database to [indexes](/orm/prisma-schema/data-model/models#defining-an-index) in the Prisma schema, if the collection contains at least one document contains a field included in the index + +You can learn more about how Prisma ORM maps types from the database to the types available in the Prisma schema on the respective docs page for the data source connector: + +- [PostgreSQL](/orm/overview/databases/postgresql#type-mapping-between-postgresql-and-prisma-schema) +- [MySQL](/orm/overview/databases/mysql#type-mapping-between-mysql-to-prisma-schema) +- [SQLite](/orm/overview/databases/sqlite#type-mapping-between-sqlite-to-prisma-schema) +- [Microsoft SQL Server](/orm/overview/databases/sql-server#type-mapping-between-microsoft-sql-server-to-prisma-schema) + +## The `prisma db pull` command + +You can introspect your database using the `prisma db pull` command of the [Prisma CLI](/orm/tools/prisma-cli#installation). Note that using this command requires your [connection URL](/orm/reference/connection-urls) to be set in your Prisma schema [`datasource`](/orm/prisma-schema/overview/data-sources). + +Here's a high-level overview of the steps that `prisma db pull` performs internally: + +1. Read the [connection URL](/orm/reference/connection-urls) from the `datasource` configuration in the Prisma schema +1. Open a connection to the database +1. Introspect database schema (i.e. read tables, columns and other structures ...) +1. Transform database schema into Prisma schema data model +1. Write data model into Prisma schema or [update existing schema](#introspection-with-an-existing-schema) + +## Introspection workflow + +The typical workflow for projects that are not using Prisma Migrate, but instead use plain SQL or another migration tool looks as follows: + +1. Change the database schema (e.g. using plain SQL) +1. Run `prisma db pull` to update the Prisma schema +1. Run `prisma generate` to update Prisma Client +1. Use the updated Prisma Client in your application + +Note that as you evolve the application, [this process can be repeated for an indefinite number of times](#introspection-with-an-existing-schema). + +![Introspect workflow](/img/orm/prisma-evolve-app-workflow.png) + +## Rules and conventions + +Prisma ORM employs a number of conventions for translating a database schema into a data model in the Prisma schema: + +### Model, field and enum names + +Field, model and enum names (identifiers) must start with a letter and generally must only contain underscores, letters and digits. You can find the naming rules and conventions for each of these identifiers on the respective docs page: + +- [Naming models](/orm/reference/prisma-schema-reference#naming-conventions) +- [Naming fields](/orm/reference/prisma-schema-reference#naming-conventions-1) +- [Naming enums](/orm/reference/prisma-schema-reference#naming-conventions-2) + +The general rule for identifiers is that they need to adhere to this regular expression: + +``` +[A-Za-z][A-Za-z0-9_]* +``` + +#### Sanitization of invalid characters + +**Invalid characters** are being sanitized during introspection: + +- If they appear _before_ a letter in an identifier, they get dropped. +- If they appear _after_ the first letter, they get replaced by an underscore. + +Additionally, the transformed name is mapped to the database using `@map` or `@@map` to retain the original name. + +Consider the following table as an example: + +```sql +CREATE TABLE "42User" ( + _id SERIAL PRIMARY KEY, + _name VARCHAR(255), + two$two INTEGER +); +``` + +Because the leading `42` in the table name as well as the leading underscores and the `$` on the columns are forbidden in Prisma ORM, introspection adds the `@map` and `@@map` attributes so that these names adhere to Prisma ORM's naming conventions: + +```prisma +model User { + id Int @id @default(autoincrement()) @map("_id") + name String? @map("_name") + two_two Int? @map("two$two") + + @@map("42User") +} +``` + +#### Duplicate Identifiers after Sanitization + +If sanitization results in duplicate identifiers, no immediate error handling is in place. You get the error later and can manually fix it. + +Consider the case of the following two tables: + +```sql +CREATE TABLE "42User" ( + _id SERIAL PRIMARY KEY +); + +CREATE TABLE "24User" ( + _id SERIAL PRIMARY KEY +); +``` + +This would result in the following introspection result: + +```prisma +model User { + id Int @id @default(autoincrement()) @map("_id") + + @@map("42User") +} + +model User { + id Int @id @default(autoincrement()) @map("_id") + + @@map("24User") +} +``` + +Trying to generate your Prisma Client with `prisma generate` you would get the following error: + + + + + +``` +npx prisma generate +``` + + + + + +```code no-copy +$ npx prisma generate +Error: Schema parsing +error: The model "User" cannot be defined because a model with that name already exists. + --> schema.prisma:17 + | +16 | } +17 | model User { + | + +Validation Error Count: 1 +``` + + + + + +In this case, you must manually change the name of one of the two generated `User` models because duplicate model names are not allowed in the Prisma schema. + +### Order of fields + +Introspection lists model fields in the same order as the corresponding table columns in the database. + +### Order of attributes + +Introspection adds attributes in the following order (this order is mirrored by `prisma format`): + +- Block level: `@@id`, `@@unique`, `@@index`, `@@map` +- Field level : `@id`, `@unique`, `@default`, `@updatedAt`, `@map`, `@relation` + +### Relations + +Prisma ORM translates foreign keys that are defined on your database tables into [relations](/orm/prisma-schema/data-model/relations). + +#### One-to-one relations + +Prisma ORM adds a [one-to-one](/orm/prisma-schema/data-model/relations/one-to-one-relations) relation to your data model when the foreign key on a table has a `UNIQUE` constraint, e.g.: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Profile" ( + id SERIAL PRIMARY KEY, + "user" integer NOT NULL UNIQUE, + FOREIGN KEY ("user") REFERENCES "User"(id) +); +``` + +Prisma ORM translates this into the following data model: + +```prisma +model User { + id Int @id @default(autoincrement()) + Profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user Int @unique + User User @relation(fields: [user], references: [id]) +} +``` + +#### One-to-many relations + +By default, Prisma ORM adds a [one-to-many](/orm/prisma-schema/data-model/relations/one-to-many-relations) relation to your data model for a foreign key it finds in your database schema: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + "author" integer NOT NULL, + FOREIGN KEY ("author") REFERENCES "User"(id) +); +``` + +These tables are transformed into the following models: + +```prisma +model User { + id Int @id @default(autoincrement()) + Post Post[] +} + +model Post { + id Int @id @default(autoincrement()) + author Int + User User @relation(fields: [author], references: [id]) +} +``` + +#### Many-to-many relations + +[Many-to-many](/orm/prisma-schema/data-model/relations/many-to-many-relations) relations are commonly represented as [relation tables](/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables) in relational databases. + +Prisma ORM supports two ways for defining many-to-many relations in the Prisma schema: + +- [Implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations) (Prisma ORM manages the relation table under the hood) +- [Explicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations) (the relation table is present as a [model](/orm/prisma-schema/data-model/models#defining-models)) + +_Implicit_ many-to-many relations are recognized if they adhere to Prisma ORM's [conventions for relation tables](/orm/prisma-schema/data-model/relations/many-to-many-relations#conventions-for-relation-tables-in-implicit-m-n-relations). Otherwise the relation table is rendered in the Prisma schema as a model (therefore making it an _explicit_ many-to-many relation). + +This topic is covered extensively on the docs page about [Relations](/orm/prisma-schema/data-model/relations). + +#### Disambiguating relations + +Prisma ORM generally omits the `name` argument on the [`@relation`](/orm/prisma-schema/data-model/relations#the-relation-attribute) attribute if it's not needed. Consider the `User` ↔ `Post` example from the previous section. The `@relation` attribute only has the `references` argument, `name` is omitted because it's not needed in this case: + +```prisma +model Post { + id Int @id @default(autoincrement()) + author Int + User User @relation(fields: [author], references: [id]) +} +``` + +It would be needed if there were _two_ foreign keys defined on the `Post` table: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + "author" integer NOT NULL, + "favoritedBy" INTEGER, + FOREIGN KEY ("author") REFERENCES "User"(id), + FOREIGN KEY ("favoritedBy") REFERENCES "User"(id) +); +``` + +In this case, Prisma ORM needs to [disambiguate the relation](/orm/prisma-schema/data-model/relations#disambiguating-relations) using a dedicated relation name: + +```prisma +model Post { + id Int @id @default(autoincrement()) + author Int + favoritedBy Int? + User_Post_authorToUser User @relation("Post_authorToUser", fields: [author], references: [id]) + User_Post_favoritedByToUser User? @relation("Post_favoritedByToUser", fields: [favoritedBy], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + Post_Post_authorToUser Post[] @relation("Post_authorToUser") + Post_Post_favoritedByToUser Post[] @relation("Post_favoritedByToUser") +} +``` + +Note that you can rename the [Prisma-ORM level](/orm/prisma-schema/data-model/relations#relation-fields) relation field to anything you like so that it looks friendlier in the generated Prisma Client API. + +## Introspection with an existing schema + +Running `prisma db pull` for relational databases with an existing Prisma Schema merges manual changes made to the schema, with changes made in the database. (This functionality has been added for the first time with version 2.6.0.) For MongoDB, Introspection for now is meant to be done only once for the initial data model. Running it repeatedly will lead to loss of custom changes, as the ones listed below. + +Introspection for relational databases maintains the following manual changes: + +- Order of `model` blocks +- Order of `enum` blocks +- Comments +- `@map` and `@@map` attributes +- `@updatedAt` +- `@default(cuid())` (`cuid()` is a Prisma-ORM level function) +- `@default(uuid())` (`uuid()` is a Prisma-ORM level function) +- Custom `@relation` names + +> **Note**: Only relations between models on the database level will be picked up. This means that there **must be a foreign key set**. + +The following properties of the schema are determined by the database: + +- Order of fields within `model` blocks +- Order of values within `enum` blocks + +> **Note**: All `enum` blocks are listed below `model` blocks. + +### Force overwrite + +To overwrite manual changes, and generate a schema based solely on the introspected database and ignore any existing Prisma Schema, add the `--force` flag to the `db pull` command: + +```terminal +npx prisma db pull --force +``` + +Use cases include: + +- You want to start from scratch with a schema generated from the underlying database +- You have an invalid schema and must use `--force` to make introspection succeed + +## Introspecting only a subset of your database schema + +Introspecting only a subset of your database schema is [not yet officially supported](https://github.com/prisma/prisma/issues/807) by Prisma ORM. + +However, you can achieve this by creating a new database user that only has access to the tables which you'd like to see represented in your Prisma schema, and then perform the introspection using that user. The introspection will then only include the tables the new user has access to. + +If your goal is to exclude certain models from the [Prisma Client generation](/orm/prisma-client/setup-and-configuration/generating-prisma-client), you can add the [`@@ignore` attribute](/orm/reference/prisma-schema-reference#ignore-1) to the model definition in your Prisma schema. Ignored models are excluded from the generated Prisma Client. + +## Introspection warnings for unsupported features + +The Prisma Schema Language (PSL) can express a majority of the database features of the [target databases](/orm/reference/supported-databases) Prisma ORM supports. However, there are features and functionality the Prisma Schema Language still needs to express. + +For these features, the Prisma CLI will surface detect usage of the feature in your database and return a warning. The Prisma CLI will also add a comment in the models and fields the features are in use in the Prisma schema. The warnings will also contain a workaround suggestion. + +The `prisma db pull` command will surface the following unsupported features: + +- From version [4.13.0](https://github.com/prisma/prisma/releases/tag/4.13.0): + - [Partitioned tables](https://github.com/prisma/prisma/issues/1708) + - [PostgreSQL Row Level Security](https://github.com/prisma/prisma/issues/12735) + - [Index sort order, `NULLS FIRST` / `NULLS LAST`](https://github.com/prisma/prisma/issues/15466) + - [CockroachDB row-level TTL](https://github.com/prisma/prisma/issues/13982) + - [Comments](https://github.com/prisma/prisma/issues/8703) + - [PostgreSQL deferred constraints](https://github.com/prisma/prisma/issues/8807) +- From version [4.14.0](https://github.com/prisma/prisma/releases/tag/4.14.0): + - [Check Constraints](https://github.com/prisma/prisma/issues/3388) (MySQL + PostgreSQL) + - [Exclusion Constraints](https://github.com/prisma/prisma/issues/17514) + - [MongoDB $jsonSchema](https://github.com/prisma/prisma/issues/8135) +- From version [4.16.0](https://github.com/prisma/prisma/releases/tag/4.16.0): + - [Expression indexes](https://github.com/prisma/prisma/issues/2504) + +You can find the list of features we intend to support on [GitHub (labeled with `topic:database-functionality`)](https://github.com/prisma/prisma/issues?q=is%3Aopen+label%3A%22topic%3A+database-functionality%22+label%3Ateam%2Fschema+sort%3Aupdated-desc+). + +### Workaround for introspection warnings for unsupported features + +If you are using a relational database and either one of the above features listed in the previous section: + +1. Create a draft migration: + ```terminal + npx prisma migrate dev --create-only + ``` +2. Add the SQL that adds the feature surfaced in the warnings. +3. Apply the draft migration to your database: + ```terminal + npx prisma migrate dev + ``` diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/80-postgresql-extensions.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/80-postgresql-extensions.mdx new file mode 100644 index 0000000000..56fb3cf0b1 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/80-postgresql-extensions.mdx @@ -0,0 +1,113 @@ +--- +title: 'PostgreSQL extensions' +metaTitle: 'How to represent PostgreSQL extensions in your Prisma schema' +metaDescription: 'How to represent PostgreSQL extensions in your Prisma scheme, introspect extensions in your database, and apply changes to extensions with Prisma Migrate' +sidebar_class_name: preview-badge +tocDepth: 3 +--- + +This page introduces PostgreSQL extensions and describes how to represent extensions in your Prisma schema, how to introspect existing extensions in your database, and how to apply changes to your extensions to your database with Prisma Migrate. + + + +Support for declaring PostgreSQL extensions in your schema is available in preview for the PostgreSQL connector only in Prisma versions 4.5.0 and later. + + + +## What are PostgreSQL extensions? + +PostgreSQL allows you to extend your database functionality by installing and activating packages known as _extensions_. For example, the `citext` extension adds a case-insensitive string data type. Some extensions, such as `citext`, are supplied directly by PostgreSQL, while other extensions are developed externally. For more information on extensions, see [the PostgreSQL documentation](https://www.postgresql.org/docs/current/sql-createextension.html). + +To use an extension, it must first be _installed_ on the local file system of your database server. You then need to _activate_ the extension, which runs a script file that adds the new functionality. + + + +Note that PostgreSQL's documentation uses the term 'install' to refer to what we call activating an extension. We have used separate terms here to make it clear that these are two different steps. + + + +Prisma's `postgresqlExtensions` preview feature allows you to represent PostgreSQL extensions in your Prisma schema. Note that specific extensions may add functionality that is not currently supported by Prisma. For example, an extension may add a type or index that is not supported by Prisma. This functionality must be implemented on a case-by-case basis and is not provided by this preview feature. + +## How to enable the `postgresqlExtensions` preview feature + +Representing PostgreSQL extensions in your Prisma Schema is currently a preview feature. To enable the `postgresqlExtensions` preview feature, you will need to add the `postgresqlExtensions` feature flag to the `previewFeatures` field of the `generator` block in your Prisma schema: + +```prisma file=schema.prisma highlight=3;add showLineNumbers +generator client { + provider = "prisma-client-js" + //add-next-line + previewFeatures = ["postgresqlExtensions"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +## How to represent PostgreSQL extensions in your Prisma schema + +To represent PostgreSQL extensions in your Prisma schema, add the `extensions` field to the `datasource` block of your `schema.prisma` file with an array of the extensions that you require. For example, the following schema lists the `hstore`, `pg_trgm` and `postgis` extensions: + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + extensions = [hstore(schema: "myHstoreSchema"), pg_trgm, postgis(version: "2.1")] +} +``` + +Each extension name in the Prisma schema can take the following optional arguments: + +- `schema`: the name of the schema in which to activate the extension's objects. If this argument is not specified, the current default object creation schema is used. +- `version`: the version of the extension to activate. If this argument is not specified, the value given in the extension's control file is used. +- `map`: the database name of the extension. If this argument is not specified, the name of the extension in the Prisma schema must match the database name. + +In the example above, the `hstore` extension uses the `myHstoreSchema` schema, and the `postgis` extension is activated with version 2.1 of the extension. + +The `map` argument is useful when the PostgreSQL extension that you want to activate has a name that is not a valid identifier in the Prisma schema. For example, the `uuid-ossp` PostgreSQL extension name is an invalid identifier because it contains a hyphen. In the following example, the extension is mapped to the valid name `uuidOssp` in the Prisma schema: + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + extensions = [uuidOssp(map: "uuid-ossp")] +} +``` + +## How to introspect PostgreSQL extensions + +To [introspect](/orm/prisma-schema/introspection) PostgreSQL extensions currently activated in your database and add relevant extensions to your Prisma schema, run `npx prisma db pull`. + +Many PostgreSQL extensions are not relevant to the Prisma schema. For example, some extensions are intended for database administration tasks that do not change the schema. If all these extensions were included, the list of extensions would be very long. To avoid this, Prisma maintains an allowlist of known relevant extensions. The current allowlist is the following: + +- [`citext`](https://www.postgresql.org/docs/current/citext.html): provides a case-insensitive character string type, `citext` +- [`pgcrypto`](https://www.postgresql.org/docs/current/pgcrypto.html): provides cryptographic functions, like `gen_random_uuid()`, to generate universally unique identifiers (UUIDs v4) +- [`uuid-ossp`](https://www.postgresql.org/docs/current/uuid-ossp.html): provides functions, like `uuid_generate_v4()`, to generate universally unique identifiers (UUIDs v4) +- [`postgis`](https://postgis.net/): adds GIS (Geographic Information Systems) support + +**Note**: Since PostgreSQL v13, `gen_random_uuid()` can be used without an extension to generate universally unique identifiers (UUIDs v4). + +Extensions are introspected as follows: + +- The first time you introspect, all database extensions that are on the allowlist are added to your Prisma schema +- When you re-introspect, the behavior depends on whether the extension is on the allowlist or not. + - Extensions on the allowlist: + - are **added** to your Prisma schema if they are in the database but not in the Prisma schema + - are **kept** in your Prisma schema if they are in the Prisma schema and in the database + - are **removed** from your Prisma schema if they are in the Prisma schema but not the database + - Extensions not on the allowlist: + - are **kept** in your Prisma schema if they are in the Prisma schema and in the database + - are **removed** from your Prisma schema if they are in the Prisma schema but not the database + +The `version` argument will not be added to the Prisma schema when you introspect. + +## How to migrate PostgreSQL extensions + +You can update your list of PostgreSQL extensions in your Prisma schema and apply the changes to your database with [Prisma Migrate](/orm/prisma-migrate). + +This works in a similar way to migration of other elements of your Prisma schema, such as models or fields. However, there are the following differences: + +- If you remove an extension from your schema but it is still activated on your database, Prisma Migrate will not deactivate it from the database. +- If you add a new extension to your schema, it will only be activated if it does not already exist in the database, because the extension may already have been created manually. +- If you remove the `version` or `schema` arguments from the extension definition, it has no effect to the extensions in the database in the following migrations. diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/_category_.json b/versioned_docs/version-legacy/200-orm/100-prisma-schema/_category_.json new file mode 100644 index 0000000000..9ecbba8efe --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Prisma Schema", + "collapsible": false, + "collapsed": false +} diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/index.mdx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/index.mdx new file mode 100644 index 0000000000..045a1f3687 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/100-prisma-schema/index.mdx @@ -0,0 +1,11 @@ +--- +title: 'Prisma schema' +metaTitle: 'Prisma schema' +metaDescription: 'Learn everything you need to know about the Prisma schema.' +staticLink: true +hide_table_of_contents: true +--- + +## In this section + + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/005-introduction.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/005-introduction.mdx new file mode 100644 index 0000000000..93d211cbd4 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/005-introduction.mdx @@ -0,0 +1,181 @@ +--- +title: 'Introduction' +metaTitle: 'Introduction to Prisma Client' +metaDescription: 'Learn how to set up Prisma Client.' +--- + +import { + Icon +} from '@site/src/components/Icon'; + + + +Prisma Client is an auto-generated and type-safe query builder that's _tailored_ to your data. The easiest way to get started with Prisma Client is by following the **[Quickstart](/getting-started/quickstart-sqlite)**. + + + + Quickstart (5 min) + + +The setup instructions [below](#set-up) provide a high-level overview of the steps needed to set up Prisma Client. If you want to get started using Prisma Client with your own database, follow one of these guides: + + + + Set up a new project from scratch + +
+
+ + + Add Prisma to an existing project + + +
+ +## Set up + +### 1. Prerequisites + +In order to set up Prisma Client, you need a [Prisma schema file](/orm/prisma-schema) with your database connection, the Prisma Client generator, and at least one model: + +```prisma file=schema.prisma showLineNumbers +datasource db { + url = env("DATABASE_URL") + provider = "postgresql" +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + email String @unique + name String? +} +``` + +Also make sure to [install the Prisma CLI](/orm/tools/prisma-cli#installation): + +``` +npm install prisma --save-dev +npx prisma +``` + +### 2. Installation + +Install Prisma Client in your project with the following command: + +``` +npm install @prisma/client +``` + +This command also runs the `prisma generate` command, which generates Prisma Client into the [`node_modules/.prisma/client`](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) directory. + +### 3. Importing Prisma Client + +There are multiple ways to import Prisma Client in your project depending on your use case: + + + + + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() +// use `prisma` in your application to read and write data in your DB +``` + + + + + +```js +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() +// use `prisma` in your application to read and write data in your DB +``` + + + + + +For edge environments, you can import Prisma Client as follows: + + + + + +```ts +import { PrismaClient } from '@prisma/client/edge' + +const prisma = new PrismaClient() +// use `prisma` in your application to read and write data in your DB +``` + + + + + +```js +const { PrismaClient } = require('@prisma/client/edge') + +const prisma = new PrismaClient() +// use `prisma` in your application to read and write data in your DB +``` + + + + + +> **Note**: If you're using [driver adapters](/orm/overview/databases/database-drivers#driver-adapters), you can import from `@prisma/client` directly. No need to import from `@prisma/client/edge`. + +For Deno, you can import Prisma Client as follows: + +```ts file=lib/prisma.ts +import { PrismaClient } from './generated/client/deno/edge.ts' + +const prisma = new PrismaClient() +// use `prisma` in your application to read and write data in your DB +``` + +The import path will depend on the custom `output` specified in Prisma Client's [`generator`](/orm/reference/prisma-schema-reference#fields-1) block in your Prisma schema. + +### 4. Use Prisma Client to send queries to your database + +Once you have instantiated `PrismaClient`, you can start sending queries in your code: + +```ts +// run inside `async` function +const newUser = await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + }, +}) + +const users = await prisma.user.findMany() +``` + + + +All Prisma Client methods return an instance of [`PrismaPromise`](/orm/reference/prisma-client-reference#prismapromise-behavior) which only executes when you call `await` or `.then()` or `.catch()`. + + + +### 5. Evolving your application + +Whenever you make changes to your database that are reflected in the Prisma schema, you need to manually re-generate Prisma Client to update the generated code in the `node_modules/.prisma/client` directory: + +``` +prisma generate +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/010-generating-prisma-client.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/010-generating-prisma-client.mdx new file mode 100644 index 0000000000..e8eba9580b --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/010-generating-prisma-client.mdx @@ -0,0 +1,162 @@ +--- +title: 'Generating Prisma Client' +metaTitle: 'Generating Prisma Client' +metaDescription: 'This page explains how to generate Prisma Client. It also provides additional context on the generated client, typical workflows and Node.js configuration.' +--- + + + +Prisma Client is an auto-generated database client that's tailored to your database schema. By default, Prisma Client is generated into the `node_modules/.prisma/client` folder, but [you can specify a custom location](#using-a-custom-output-path). + +To generate and instantiate Prisma Client: + +1. Ensure that you have [Prisma CLI installed on your machine](/orm/tools/prisma-cli#installation). + +1. Add the following `generator` definition to your Prisma schema: + + ```prisma + generator client { + provider = "prisma-client-js" + } + ``` + +1. Install the `@prisma/client` npm package: + + ```terminal + npm install @prisma/client + ``` + + + + We recommend that you keep **both** the `prisma` and `@prisma/client` packages in sync to avoid any unexpected errors or behaviors. + + + +1. Generate Prisma Client with the following command: + + ```terminal + prisma generate + ``` + +1. You can now [instantiate Prisma Client](/orm/prisma-client/setup-and-configuration/instantiate-prisma-client) in your code: + + + + + + ```ts + import { PrismaClient } from '@prisma/client' + const prisma = new PrismaClient() + // use `prisma` in your application to read and write data in your DB + ``` + + + + + + ```js + const { PrismaClient } = require('@prisma/client') + const prisma = new PrismaClient() + // use `prisma` in your application to read and write data in your DB + ``` + + + + + +> **Important**: You need to re-run the `prisma generate` command after every change that's made to your Prisma schema to update the generated Prisma Client code. + +Here is a graphical illustration of the typical workflow for generation of Prisma Client: + +![Graphical illustration of the typical workflow for generation of Prisma Client](./prisma-client-generation-workflow.png) + +Note also that `prisma generate` is _automatically_ invoked when you're installing the `@prisma/client` npm package. So, when you're initially setting up Prisma Client, you can typically save the third step from the list above. + + + +## The `@prisma/client` npm package + +The `@prisma/client` npm package consists of two key parts: + +- The `@prisma/client` module itself, which only changes when you re-install the package +- The `.prisma/client` folder, which is the [default location](#using-a-custom-output-path) for the unique Prisma Client generated from your schema + +`@prisma/client/index.d.ts` exports `.prisma/client`: + +```ts +export * from '.prisma/client' +``` + +This means that you still import `@prisma/client` in your own `.ts` files: + +```ts +import { PrismaClient } from '@prisma/client' +``` + +Prisma Client is generated from your Prisma schema and is unique to your project. Each time you change the schema (for example, by performing a [schema migration](/orm/prisma-migrate)) and run `prisma generate`, Prisma Client's code changes: + +![The .prisma and @prisma folders](./prisma-client-node-module.png) + +The `.prisma` folder is unaffected by [pruning](https://docs.npmjs.com/cli/prune.html) in Node.js package managers. + +## The location of Prisma Client + +If you do not specify a custom `output` in the `generator` block, Prisma Client is generated into the `./node_modules/.prisma/client` folder by default. There are [some advantages to maintaining the default location](#why-is-prisma-client-generated-into-node_modulesprismaclient-by-default). + +### Using a custom `output` path + +You can also specify a custom `output` path on the `generator` configuration, for example (assuming your `schema.prisma` file is located at the default `prisma` subfolder): + +```prisma +generator client { + provider = "prisma-client-js" + output = "../src/generated/client" +} +``` + +After running `prisma generate` for that schema file, the Prisma Client package will be located in: + +``` +./src/generated/client +``` + +To import the `PrismaClient` from a custom location (for example, from a file named `./src/script.ts`): + +```ts +import { PrismaClient } from './generated/client' +``` + +### Why is Prisma Client generated into `node_modules/.prisma/client` by default? + +#### Importing Prisma Client + +By generating Prisma Client into `node_modules/.prisma/client` and exporting it from `@prisma/client`, you can import it and instantiate Prisma Client in your code as follows: + +```js +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +// use `prisma` in your application to read and write data in your DB +``` + +or + +```js +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +// use `prisma` in your application to read and write data in your DB +``` + +#### Keeping the query engine out of version control by default + +Prisma Client uses a [_query engine_](/orm/more/under-the-hood/engines) to run queries against the database. This query engine is downloaded when `prisma generate` is invoked and stored in the `output` path together with the generated Client. + +By generating Prisma Client into `node_modules`, the query engine is usually kept out of version control by default since `node_modules` is typically ignored for version control. +When using a custom `output` path for the generated Prisma Client, it is advised to exclude it from your version control. For Git, this means adding the `output` path to your `.gitignore` file. + +## Generating Prisma Client in the `postinstall` hook of `@prisma/client` + +The `@prisma/client` package defines its own `postinstall` hook that's being executed whenever the package is being installed. This hook invokes the `prisma generate` command which in turn generates the Prisma Client code into the default location `node_modules/.prisma/client`. Notice that this requires the `prisma` CLI to be available, either as local dependency or as a global installation. It is recommended to always install the `prisma` package as a development dependency, using `npm install prisma --save-dev`, to avoid versioning conflicts. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/015-instantiate-prisma-client.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/015-instantiate-prisma-client.mdx new file mode 100644 index 0000000000..5b913ccb38 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/015-instantiate-prisma-client.mdx @@ -0,0 +1,59 @@ +--- +title: 'Instantiating Prisma Client' +metaTitle: 'Instantiating Prisma Client' +metaDescription: 'How to create and use an instance of PrismaClient in your app.' +tocDepth: 3 +--- + +The following example demonstrates how to import and instantiate your [generated client](/orm/prisma-client/setup-and-configuration/generating-prisma-client) from the [default path](/orm/prisma-client/setup-and-configuration/generating-prisma-client#using-a-custom-output-path): + + + + + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() +``` + + + + + +```js +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() +``` + + + + + +:::tip + +You can further customize `PrismaClient` with [constructor parameters](/orm/reference/prisma-client-reference#prismaclient) — for example, set [logging levels](/orm/prisma-client/observability-and-logging/logging), [transaction options](/orm/prisma-client/queries/transactions#transaction-options) or customize [error formatting](/orm/prisma-client/setup-and-configuration/error-formatting). + +::: + +## The number of `PrismaClient` instances matters + +Your application should generally only create **one instance** of `PrismaClient`. How to achieve this depends on whether you are using Prisma ORM in a [long-running application](/orm/prisma-client/setup-and-configuration/databases-connections#prismaclient-in-long-running-applications) or in a [serverless environment](/orm/prisma-client/setup-and-configuration/databases-connections#prismaclient-in-serverless-environments) . + +The reason for this is that each instance of `PrismaClient` manages a connection pool, which means that a large number of clients can **exhaust the database connection limit**. This applies to all database connectors. + +If you use the **MongoDB connector**, connections are managed by the MongoDB driver connection pool. If you use a **relational database connector**, connections are managed by Prisma ORM's [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool). Each instance of `PrismaClient` creates its own pool. + +1. Each client creates its own instance of the [query engine](/orm/more/under-the-hood/engines). +1. Each query engine creates a [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool) with a default pool size of: + + - `num_physical_cpus * 2 + 1` for relational databases + - [`100` for MongoDB](https://www.mongodb.com/docs/manual/reference/connection-string-options/#mongodb-urioption-urioption.maxPoolSize) + +1. Too many connections may start to **slow down your database** and eventually lead to errors such as: + + ``` + Error in connector: Error querying the database: db error: FATAL: sorry, too many clients already + at PrismaClientFetcher.request + ``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/100-connection-management.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/100-connection-management.mdx new file mode 100644 index 0000000000..023aba982d --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/100-connection-management.mdx @@ -0,0 +1,108 @@ +--- +title: 'Connection management' +metaTitle: 'Connection management' +metaDescription: 'This page explains how database connections are handled with Prisma Client and how to manually connect and disconnect your database.' +tocDepth: 3 +--- + + + +`PrismaClient` connects and disconnects from your data source using the following two methods: + +- [`$connect()`](/orm/reference/prisma-client-reference#connect-1) +- [`$disconnect()`](/orm/reference/prisma-client-reference#disconnect-1) + +In most cases, you **do not need to explicitly call these methods**. `PrismaClient` automatically connects when you run your first query, creates a [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool), and disconnects when the Node.js process ends. + +See the [connection management guide](/orm/prisma-client/setup-and-configuration/databases-connections) for information about managing connections for different deployment paradigms (long-running processes and serverless functions). + + + +## `$connect()` + +It is not necessary to call [`$connect()`](/orm/reference/prisma-client-reference#connect-1) thanks to the _lazy connect_ behavior: The `PrismaClient` instance connects lazily when the first request is made to the API (`$connect()` is called for you under the hood). + +### Calling `$connect()` explicitly + +If you need the first request to respond instantly and cannot wait for a lazy connection to be established, you can explicitly call `prisma.$connect()` to establish a connection to the data source: + +```ts +const prisma = new PrismaClient() + +// run inside `async` function +await prisma.$connect() +``` + +## `$disconnect()` + +When you call [`$disconnect()`](/orm/reference/prisma-client-reference#disconnect-1) , Prisma Client: + +1. Runs the [`beforeExit` hook](#exit-hooks) +2. Ends the Query Engine child process and closes all connections + +In a long-running application such as a GraphQL API, which constantly serves requests, it does not make sense to `$disconnect()` after each request - it takes time to establish a connection, and doing so as part of each request will slow down your application. + +:::tip + +To avoid too _many_ connections in a long-running application, we recommend that you [use a single instance of `PrismaClient` across your application](/orm/prisma-client/setup-and-configuration/instantiate-prisma-client#the-number-of-prismaclient-instances-matters). + +::: + +### Calling `$disconnect()` explicitly + +One scenario where you should call `$disconnect()` explicitly is where a script: + +1. Runs **infrequently** (for example, a scheduled job to send emails each night), which means it does not benefit from a long-running connection to the database _and_ +2. Exists in the context of a **long-running application**, such as a background service. If the application never shuts down, Prisma Client never disconnects. + +The following script creates a new instance of `PrismaClient`, performs a task, and then disconnects - which closes the connection pool: + +```ts highlight=19;normal +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() +const emailService = new EmailService() + +async function main() { + const allUsers = await prisma.user.findMany() + const emails = allUsers.map((x) => x.email) + + await emailService.send(emails, 'Hello!') +} + +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) +``` + +If the above script runs multiple times in the context of a long-running application _without_ calling `$disconnect()`, a new connection pool is created with each new instance of `PrismaClient`. + +## Exit hooks + + + +From Prisma ORM 5.0.0, the `beforeExit` hook only applies to the [binary Query Engine](/orm/more/under-the-hood/engines#configuring-the-query-engine). + + + +The `beforeExit` hook runs when Prisma ORM is triggered externally (e.g. via a `SIGINT` signal) to shut down, and allows you to run code _before_ Prisma Client disconnects - for example, to issue queries as part of a graceful shutdown of a service: + +```ts +const prisma = new PrismaClient() + +prisma.$on('beforeExit', async () => { + console.log('beforeExit hook') + // PrismaClient still available + await prisma.message.create({ + data: { + message: 'Shutting down server', + }, + }) +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/115-connection-pool.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/115-connection-pool.mdx new file mode 100644 index 0000000000..20b898ee0c --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/115-connection-pool.mdx @@ -0,0 +1,218 @@ +--- +title: Connection pool +metaDescription: Prisma ORM's query engine creates a connection pool to store and manage database connections. +tocDepth: 4 +toc_max_heading_level: 4 +--- + + + +The query engine manages a **connection pool** of database connections. The pool is created when Prisma Client opens the _first_ connection to the database, which can happen in one of two ways: + +- By [explicitly calling `$connect()`](/orm/prisma-client/setup-and-configuration/databases-connections/connection-management#connect) _or_ +- By running the first query, which calls `$connect()` under the hood + +Relational database connectors use Prisma ORM's own connection pool, and the MongoDB connectors uses the [MongoDB driver connection pool](https://github.com/mongodb/specifications/blob/master/source/connection-monitoring-and-pooling/connection-monitoring-and-pooling.rst). + + + +## Relational databases + +The relational database connectors use Prisma ORM's connection pool. The connection pool has a **connection limit** and a **pool timeout**, which are controlled by connection URL parameters. + +### How the connection pool works + +The following steps describe how the query engine uses the connection pool: + +1. The query engine instantiates a connection pool with a [configurable pool size](#setting-the-connection-pool-size) and [pool timeout](#setting-the-connection-pool-timeout). +1. The query engine creates one connection and adds it to the connection pool. +1. When a query comes in, the query engine reserves a connection from the pool to process query. +1. If there are no idle connections available in the connection pool, the query engine opens additional database connections and adds them to the connection pool until the number of database connections reaches the limit defined by `connection_limit`. +1. If the query engine cannot reserve a connection from the pool, queries are added to a FIFO (First In First Out) queue in memory. FIFO means that queries are processed in the order they enter the queue. +1. If the query engine cannot process a query in the queue for **before the [time limit](#default-pool-timeout)**, it throws an exception with error code `P2024` for that query and moves on to the next one in the queue. + +If you consistently experience pool timeout errors, you need to [optimize the connection pool](/orm/prisma-client/setup-and-configuration/databases-connections#optimizing-the-connection-pool) . + +### Connection pool size + +#### Default connection pool size + +The default number of connections (pool size) is calculated with the following formula: + +```bash +num_physical_cpus * 2 + 1 +``` + +`num_physical_cpus` represents the number of physical CPUs on the machine your application is running on. If your machine has **four** physical CPUs, your connection pool will contain **nine** connections (`4 * 2 + 1 = 9`). + +Although the formula represents a good starting point, the [recommended connection limit](/orm/prisma-client/setup-and-configuration/databases-connections#recommended-connection-pool-size) also depends on your deployment paradigm - particularly if you are using serverless. + +#### Setting the connection pool size + +You can specify the number of connections by explicitly setting the `connection_limit` parameter in your database connection URL. For example, with the following `datasource` configuration in your [Prisma schema](/orm/prisma-schema) the connection pool will have exactly five connections: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?connection_limit=5" +} +``` + +#### Viewing the connection pool size + +The number of connections Prisma Client uses can be viewed using [logging](/orm/prisma-client/observability-and-logging/logging) and [metrics](/orm/prisma-client/observability-and-logging/metrics). + +Using the `info` [logging level](/orm/reference/prisma-client-reference#log-levels), you can log the number of connections in a connection pool that are opened when Prisma Client is instantiated. + +For example, consider the following Prisma Client instance and invocation: + + + + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient({ + log: ['info'], +}) + +async function main() { + await prisma.user.findMany() +} + +main() +``` + + + + +```text no-copy +prisma:info Starting a postgresql pool with 21 connections. +``` + + + + +When the `PrismaClient` class was instantiated, the logging notified `stdout` that a connection pool with 21 connections was started. + + + +Note that the output generated by `log: ['info']` can change in any release without notice. Be aware of this in case you are relying on the output in your application or a tool that you're building. + + + +If you need even more insights into the size of your connection pool and the amount of in-use and idle connection, you can use the [metrics](/orm/prisma-client/observability-and-logging/metrics) feature (which is currently in Preview). + +Consider the following example: + + + + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + await Promise.all([prisma.user.findMany(), prisma.post.findMany()]) + + const metrics = await prisma.$metrics.json() + console.dir(metrics, { depth: Infinity }) +} + +main() +``` + + + + +```json no-copy +{ + "counters": [ + // ... + { + "key": "prisma_pool_connections_open", + "labels": {}, + "value": 2, + "description": "Number of currently open Pool Connections" + } + ], + "gauges": [ + // ... + { + "key": "prisma_pool_connections_busy", + "labels": {}, + "value": 0, + "description": "Number of currently busy Pool Connections (executing a datasource query)" + }, + { + "key": "prisma_pool_connections_idle", + "labels": {}, + "value": 21, + "description": "Number of currently unused Pool Connections (waiting for the next datasource query to run)" + }, + { + "key": "prisma_pool_connections_opened_total", + "labels": {}, + "value": 2, + "description": "Total number of Pool Connections opened" + } + ], + "histograms": [ + /** ... **/ + ] +} +``` + + + + + + +For more details on what is available in the metrics output, see the [About metrics](/orm/prisma-client/observability-and-logging/metrics#about-metrics) section. + + + +### Connection pool timeout + +#### Default pool timeout + +The default connection pool timeout is 10 seconds. If the Query Engine does not get a connection from the database connection pool within that time, it throws an exception and moves on to the next query in the queue. + +#### Setting the connection pool timeout + +You can specify the pool timeout by explicitly setting the `pool_timeout` parameter in your database connection URL. In the following example, the pool times out after `2` seconds: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?connection_limit=5&pool_timeout=2" +} +``` + +#### Disabling the connection pool timeout + +You disable the connection pool timeout by setting the `pool_timeout` parameter to `0`: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?connection_limit=5&pool_timeout=0" +} +``` + +You can choose to [disable the connection pool timeout if queries **must** remain in the queue](/orm/prisma-client/setup-and-configuration/databases-connections#disabling-the-pool-timeout) - for example, if you are importing a large number of records in parallel and are confident that the queue will not use up all available RAM before the job is complete. + +## MongoDB + +The MongoDB connector does not use the Prisma ORM connection pool. The connection pool is managed internally by the MongoDB driver and [configured via connection string parameters](https://www.mongodb.com/docs/manual/reference/connection-string-options/#connection-pool-options). + +## External connection poolers + +You cannot increase the `connection_limit` beyond what the underlying database can support. This is a particular challenge in serverless environments, where each function manages an instance of `PrismaClient` - and its own connection pool. + +Consider introducing [an external connection pooler like PgBouncer](/orm/prisma-client/setup-and-configuration/databases-connections#pgbouncer) to prevent your application or functions from exhausting the database connection limit. + +## Manual database connection handling + +When using Prisma ORM, the database connections are handled on an [engine](https://github.com/prisma/prisma-engines)-level. This means they're not exposed to the developer and it's not possible to manually access them. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/200-pgbouncer.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/200-pgbouncer.mdx new file mode 100644 index 0000000000..ec68d67ff1 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/200-pgbouncer.mdx @@ -0,0 +1,89 @@ +--- +title: Configure Prisma Client with PgBouncer +metaTitle: Configure Prisma Client with PgBouncer +--- + +An external connection pooler like PgBouncer holds a connection pool to the database, and proxies incoming client connections by sitting between Prisma Client and the database. This reduces the number of processes a database has to handle at any given time. + +Usually, this works transparently, but some connection poolers only support a limited set of functionality. One common feature that external connection poolers do not support are named prepared statements, which Prisma ORM uses. For these cases, Prisma ORM can be configured to behave differently. + +:::info + +Looking for an easy, infrastructure-free solution? Try [Prisma Accelerate](https://www.prisma.io/accelerate?utm_source=docs&utm_campaign=pgbouncer-help)! It requires little to no setup and works seamlessly with all databases supported by Prisma ORM. + +Ready to begin? Get started with Prisma Accelerate by clicking [here](https://console.prisma.io?utm_source=docs&utm_campaign=pgbouncer-help). +::: + +## PgBouncer + +### Set PgBouncer to transaction mode + +For Prisma Client to work reliably, PgBouncer must run in [**Transaction mode**](https://www.pgbouncer.org/features.html). + +Transaction mode offers a connection for every transaction – a requirement for the Prisma Client to work with PgBouncer. + +### Add `pgbouncer=true` for PgBouncer versions below `1.21.0` + +:::warning +We recommend **not** setting `pgbouncer=true` in the database connection string if you're using [PgBouncer `1.21.0`](https://github.com/prisma/prisma/issues/21531#issuecomment-1919059472) or later. +::: + +To use Prisma Client with PgBouncer, add the `?pgbouncer=true` flag to the PostgreSQL connection URL: + +```shell +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?pgbouncer=true +``` + +:::info +`PORT` specified for PgBouncer pooling is sometimes different from the default `5432` port. Check your database provider docs for the correct port number. +::: + +### Configure `max_prepared_statements` in PgBouncer to be greater than zero + +Prisma uses prepared statements, and setting [`max_prepared_statements`](https://www.pgbouncer.org/config.html) to a value greater than `0` enables PgBouncer to use those prepared statements. + +:::info +`PORT` specified for PgBouncer pooling is sometimes different from the default `5432` port. Check your database provider docs for the correct port number. +::: + +### Prisma Migrate and PgBouncer workaround + +Prisma Migrate uses **database transactions** to check out the current state of the database and the migrations table. However, the Schema Engine is designed to use a **single connection to the database**, and does not support connection pooling with PgBouncer. If you attempt to run Prisma Migrate commands in any environment that uses PgBouncer for connection pooling, you might see the following error: + +```bash +Error: undefined: Database error +Error querying the database: db error: ERROR: prepared statement "s0" already exists +``` + +To work around this issue, you must connect directly to the database rather than going through PgBouncer. To achieve this, you can use the [`directUrl`](/orm/reference/prisma-schema-reference#fields) field in your [`datasource`](/orm/reference/prisma-schema-reference#datasource) block. + +For example, consider the following `datasource` block: + +```prisma +datasource db { + provider = "postgresql" + url = "postgres://USER:PASSWORD@HOST:PORT/DATABASE?pgbouncer=true" + directUrl = "postgres://USER:PASSWORD@HOST:PORT/DATABASE" +} +``` + +The block above uses a PgBouncer connection string as the primary URL using `url`, allowing Prisma Client to take advantage of the PgBouncer connection pooler. + +It also provides a connection string directly to the database, without PgBouncer, using the `directUrl` field. This connection string will be used when commands that require a single connection to the database, such as `prisma migrate dev` or `prisma db push`, are invoked. + +### PgBouncer with different database providers + +There are sometimes minor differences in how to connect directly to a Postgres database that depend on the provider hosting the database. + +Below are links to information on how to set up these connections with providers who have setup steps not covered here in our documentation: + +- [Connecting directly to a PostgreSQL database hosted on Digital Ocean](https://github.com/prisma/prisma/issues/6157) +- [Connecting directly to a PostgreSQL database hosted on ScaleGrid](https://github.com/prisma/prisma/issues/6701#issuecomment-824387959) + +## Supabase Supavisor + +Supabase's Supavisor behaves similarly to [PgBouncer](#pgbouncer). You can add `?pgbouncer=true` to your connection pooled connection string available via your [Supabase database settings](https://supabase.com/dashboard/project/_/settings/database). + +## Other external connection poolers + +Although Prisma ORM does not have explicit support for other connection poolers, if the limitations are similar to the ones of [PgBouncer](#pgbouncer) you can usually also use `pgbouncer=true` in your connection string to put Prisma ORM in a mode that works with them as well. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/index.mdx new file mode 100644 index 0000000000..0b417174c8 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/index.mdx @@ -0,0 +1,339 @@ +--- +title: Database connections +metaTitle: Database connections +metaDescription: 'Databases connections' +tocDepth: 3 +--- + + + +Databases can handle a limited number of concurrent connections. Each connection requires RAM, which means that simply increasing the database connection limit without scaling available resources: + +- ✔ might allow more processes to connect _but_ +- ✘ significantly affects **database performance**, and can result in the database being **shut down** due to an out of memory error + +The way your application **manages connections** also impacts performance. This guide describes how to approach connection management in [serverless environments](#serverless-environments-faas) and [long-running processes](#long-running-processes). + + + +This guide focuses on **relational databases** and how to configure and tune the Prisma ORM connection pool (MongoDB uses the MongoDB driver connection pool). + + + + + +## Long-running processes + +Examples of long-running processes include Node.js applications hosted on a service like Heroku or a virtual machine. Use the following checklist as a guide to connection management in long-running environments: + +- Start with the [recommended pool size (`connection_limit`)](#recommended-connection-pool-size) and [tune it](#optimizing-the-connection-pool) +- Make sure you have [**one** global instance of `PrismaClient`](#prismaclient-in-long-running-applications) + +### Recommended connection pool size + +The recommended connection pool size (`connection_limit`) to [start with](#optimizing-the-connection-pool) for long-running processes is the **default pool size** (`num_physical_cpus * 2 + 1`) ÷ **number of application instances**. + + + +`num_physical_cpus` refers to the the number of CPUs of the machine your application is running on. + + + +If you have **one** application instances: + +- The default pool size applies by default (`num_physical_cpus * 2 + 1`) - you do not need to set the `connection_limit` parameter. +- You can optionally [tune the pool size](#optimizing-the-connection-pool). + +If you have **multiple** application instances: + +- You must **manually** [set the `connection_limit` parameter](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool#setting-the-connection-pool-size) . For example, if your calculated pool size is _10_ and you have _2_ instances of your app, the `connection_limit` parameter should be **no more than _5_**. +- You can optionally [tune the pool size](#optimizing-the-connection-pool). + +### `PrismaClient` in long-running applications + +In **long-running** applications, we recommend that you: + +- ✔ Create **one** instance of `PrismaClient` and re-use it across your application +- ✔ Assign `PrismaClient` to a global variable _in dev environments only_ to [prevent hot reloading from creating new instances](#prevent-hot-reloading-from-creating-new-instances-of-prismaclient) + +#### Re-using a single `PrismaClient` instance + +To re-use a single instance, create a module that exports a `PrismaClient` object: + +```ts file=client.ts +import { PrismaClient } from '@prisma/client' + +let prisma = new PrismaClient() + +export default prisma +``` + +The object is [cached](https://nodejs.org/api/modules.html#modules_caching) the first time the module is imported. Subsequent requests return the cached object rather than creating a new `PrismaClient`: + +```ts file=app.ts +import prisma from './client' + +async function main() { + const allUsers = await prisma.user.findMany() +} + +main() +``` + +You do not have to replicate the example above exactly - the goal is to make sure `PrismaClient` is cached. For example, you can [instantiate `PrismaClient` in the `context` object](https://github.com/prisma/prisma-examples/blob/9f1a6b9e7c25b9e1851bd59b273046158d748995/typescript/graphql-express/src/context.ts#L9) that you [pass into an Express app](https://github.com/prisma/prisma-examples/blob/9f1a6b9e7c25b9e1851bd59b273046158d748995/typescript/graphql-express/src/server.ts#L12). + +#### Do not explicitly `$disconnect()` + +You [do not need to explicitly `$disconnect()`](/orm/prisma-client/setup-and-configuration/databases-connections/connection-management#calling-disconnect-explicitly) in the context of a long-running application that is continuously serving requests. Opening a new connection takes time and can slow down your application if you disconnect after each query. + +#### Prevent hot reloading from creating new instances of `PrismaClient` + +Frameworks like [Next.js](https://nextjs.org/) support hot reloading of changed files, which enables you to see changes to your application without restarting. However, if the framework refreshes the module responsible for exporting `PrismaClient`, this can result in **additional, unwanted instances of `PrismaClient` in a development environment**. + +As a workaround, you can store `PrismaClient` as a global variable in development environments only, as global variables are not reloaded: + +```ts file=client.ts +import { PrismaClient } from '@prisma/client' + +const globalForPrisma = globalThis as unknown as { prisma: PrismaClient } + +export const prisma = + globalForPrisma.prisma || new PrismaClient() + +if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma +``` + +The way that you import and use Prisma Client does not change: + +```ts file=app.ts +import { prisma } from './client' + +async function main() { + const allUsers = await prisma.user.findMany() +} + +main() +``` + +## Serverless environments (FaaS) + +Examples of serverless environments include Node.js functions hosted on AWS Lambda, Vercel or Netlify Functions. Use the following checklist as a guide to connection management in serverless environments: + +- Familiarize yourself with the [serverless connection management challenge](#the-serverless-challenge) +- [Set pool size (`connection_limit`)](#recommended-connection-pool-size-1) based on whether you have an external connection pooler, and optionally [tune the pool size](#optimizing-the-connection-pool) +- [Instantiate `PrismaClient` outside the handler](#instantiate-prismaclient-outside-the-handler) and do not explicitly `$disconnect()` +- Configure [function concurrency](#concurrency-limits) and handle [idle connections](#zombie-connections) + +### The serverless challenge + +In a serverless environment, each function creates **its own instance** of `PrismaClient`, and each client instance has its own connection pool. + +Consider the following example, where a single AWS Lambda function uses `PrismaClient` to connect to a database. The `connection_limit` is **3**: + +![An AWS Lambda function connecting to a database.](./serverless-connections.png) + +A traffic spike causes AWS Lambda to spawn two additional lambdas to handle the increased load. Each lambda creates an instance of `PrismaClient`, each with a `connection_limit` of **3**, which results in a maximum of **9** connections to the database: + +![Three AWS Lambda function connecting to a database.](./serverless-connections-2.png) + +200 _concurrent functions_ (and therefore 600 possible connections) responding to a traffic spike 📈 can exhaust the database connection limit very quickly. Furthermore, any functions that are **paused** keep their connections open by default and block them from being used by another function. + +1. Start by [setting the `connection_limit` to `1`](#recommended-connection-pool-size-1) +2. If a smaller pool size is not enough, consider using an [external connection pooler like PgBouncer](#external-connection-poolers) + +### Recommended connection pool size + +The recommended pool size (`connection_limit`) in serverless environments depends on: + +- Whether you are using an [external connection pooler](#external-connection-poolers) +- Whether your functions are [designed to send queries in parallel](#optimizing-for-parallel-requests) + +#### Without an external connection pooler + +If you are **not** using an external connection pooler, _start_ by setting the pool size (`connection_limit`) to **1**, then [optimize](#optimizing-for-parallel-requests). Each incoming request starts a short-lived Node.js process, and many concurrent functions with a high `connection_limit` can quickly **exhaust the _database_ connection limit** during a traffic spike. + +The following example demonstrates how to set the `connection_limit` to 1 in your connection URL: + + + + +``` +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public&connection_limit=1 +``` + + + + +``` +mysql://USER:PASSWORD@HOST:PORT/DATABASE?connection_limit=1 +``` + + + + +:::tip + +If you are using AWS Lambda and _not_ configuring a `connection_limit`, refer to the following GitHub issue for information about the expected default pool size: https://github.com/prisma/docs/issues/667 + +::: + +#### With an external connection pooler + +If you are using an external connection pooler, use the default pool size (`num_physical_cpus * 2 + 1`) as a starting point and then [tune the pool size](#optimizing-the-connection-pool). The external connection pooler should prevent a traffic spike from overwhelming the database. + +#### Optimizing for parallel requests + +If you rarely or never exceed the database connection limit with the pool size set to 1, you can further optimize the connection pool size. Consider a function that sends queries in parallel: + +```ts +Promise.all() { + query1, + query2, + query3 + query4, + ... +} +``` + +If the `connection_limit` is 1, this function is forced to send queries **serially** (one after the other) rather than **in parallel**. This slows down the function's ability to process requests, and may result in pool timeout errors. Tune the `connection_limit` parameter until a traffic spike: + +- Does not exhaust the database connection limit +- Does not result in pool timeout errors + +### `PrismaClient` in serverless environments + +#### Instantiate `PrismaClient` outside the handler + +Instantiate `PrismaClient` [outside the scope of the function handler](https://github.com/prisma/e2e-tests/blob/5d1041d3f19245d3d237d959eca94d1d796e3a52/platforms/serverless-lambda/index.ts#L3) to increase the chances of reuse. As long as the handler remains 'warm' (in use), the connection is potentially reusable: + +```ts highlight=3;normal +import { PrismaClient } from '@prisma/client' + +const client = new PrismaClient() + +export async function handler() { + /* ... */ +} +``` + +#### Do not explicitly `$disconnect()` + +You [do not need to explicitly `$disconnect()`](/orm/prisma-client/setup-and-configuration/databases-connections/connection-management#calling-disconnect-explicitly) at the end of a function, as there is a possibility that the container might be reused. Opening a new connection takes time and slows down your function's ability to process requests. + +### Other serverless considerations + +#### Container reuse + +There is no guarantee that subsequent nearby invocations of a function will hit the same container - for example, AWS can choose to create a new container at any time. + +Code should assume the container to be stateless and create a connection only if it does not exist - Prisma Client JS already implements this logic. + +#### Zombie connections + +Containers that are marked "to be removed" and are not being reused still **keep a connection open** and can stay in that state for some time (unknown and not documented from AWS). This can lead to sub-optimal utilization of the database connections. + +A potential solution is to **clean up idle connections** ([`serverless-mysql`](https://github.com/jeremydaly/serverless-mysql) implements this idea, but cannot be used with Prisma ORM). + +#### Concurrency limits + +Depending on your serverless concurrency limit (the number of serverless functions running in parallel), you might still exhaust your database's connection limit. This can happen when too many functions are invoked concurrently, each with its own connection pool, which eventually exhausts the database connection limit. To prevent this, you can [set your serverless concurrency limit](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html) to a number lower than the maximum connection limit of your database divided by the number of connections used by each function invocation (as you might want to be able to connect from another client for other purposes). + +## Optimizing the connection pool + +If the query engine cannot [process a query in the queue before the time limit](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool#how-the-connection-pool-works) , you will see connection pool timeout exceptions in your log. A connection pool timeout can occur if: + +- Many users are accessing your app simultaneously +- You send a large number of queries in parallel (for example, using `await Promise.all()`) + +If you consistently experience connection pool timeouts after configuring the recommended pool size, you can further tune the `connection_limit` and `pool_timeout` parameters. + +### Increasing the pool size + +Increasing the pool size allows the query engine to process a larger number of queries in parallel. Be aware that your database must be able to support the increased number of concurrent connections, otherwise you will **exhaust the database connection limit**. + +To increase the pool size, manually set the `connection_limit` to a higher number: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public&connection_limit=40" +} +``` + +> **Note**: Setting the `connection_limit` to 1 in serverless environments is a recommended starting point, but [this value can also be tuned](#optimizing-for-parallel-requests). + +### Increasing the pool timeout + +Increasing the pool timeout gives the query engine more time to process queries in the queue. You might consider this approach in the following scenario: + +- You have already increased the `connection_limit`. +- You are confident that the queue will not grow beyond a certain size, otherwise **you will eventually run out of RAM**. + +To increase the pool timeout, set the `pool_timeout` parameter to a value larger than the default (10 seconds): + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?connection_limit=5&pool_timeout=20" +} +``` + +### Disabling the pool timeout + +Disabling the pool timeout prevents the query engine from throwing an exception after x seconds of waiting for a connection and allows the queue to build up. You might consider this approach in the following scenario: + +- You are submitting a large number of queries for a limited time - for example, as part of a job to import or update every customer in your database. +- You have already increased the `connection_limit`. +- You are confident that the queue will not grow beyond a certain size, otherwise **you will eventually run out of RAM**. + +To disable the pool timeout, set the `pool_timeout` parameter to `0`: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?connection_limit=5&pool_timeout=0" +} +``` + +## External connection poolers + +Connection poolers like [Prisma Accelerate](/accelerate) and PgBouncer prevent your application from exhausting the database's connection limit. + +If you would like to use the Prisma CLI in order to perform other actions on your database ,e.g. migrations and introspection, you will need to add an environment variable that provides a direct connection to your database in the `datasource.directUrl` property in your Prisma schema: + +```env file=.env highlight=4,5;add showLineNumbers +# Connection URL to your database using PgBouncer. +DATABASE_URL="postgres://root:password@127.0.0.1:54321/postgres?pgbouncer=true" + +//add-start +# Direct connection URL to the database used for migrations +DIRECT_URL="postgres://root:password@127.0.0.1:5432/postgres" +//add-end +``` + +You can then update your `schema.prisma` to use the new direct URL: + +```prisma file=schema.prisma highlight=4;add showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + //add-next-line + directUrl = env("DIRECT_URL") +} +``` + +More information about the `directUrl` field can be found [here](/orm/reference/prisma-schema-reference#fields). + +### Prisma Accelerate + +[Prisma Accelerate](/accelerate) is a managed external connection pooler built by Prisma that is integrated in the [Prisma Data Platform](/platform) and handles connection pooling for you. + +### PgBouncer + +PostgreSQL only supports a certain amount of concurrent connections, and this limit can be reached quite fast when the service usage goes up – especially in [serverless environments](#serverless-environments-faas). + +[PgBouncer](https://www.pgbouncer.org/) holds a connection pool to the database and proxies incoming client connections by sitting between Prisma Client and the database. This reduces the number of processes a database has to handle at any given time. PgBouncer passes on a limited number of connections to the database and queues additional connections for delivery when connections becomes available. To use PgBouncer, see [Configure Prisma Client with PgBouncer](/orm/prisma-client/setup-and-configuration/databases-connections/pgbouncer). + +### AWS RDS Proxy + +Due to the way AWS RDS Proxy pins connections, [it does not provide any connection pooling benefits](/orm/prisma-client/deployment/caveats-when-deploying-to-aws-platforms#aws-rds-proxy) when used together with Prisma Client. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/serverless-connections-2.png b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/serverless-connections-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a933db13413c9cfbe517ce4caee792864c875d2a GIT binary patch literal 44932 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 MUO}oBD_aNu2Y%tC5&!@I literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/serverless-connections.png b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/serverless-connections.png new file mode 100644 index 0000000000000000000000000000000000000000..6c4b56ea9b2d5529e1a1b326c317633bb198d4de GIT binary patch literal 18742 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/100-custom-model-and-field-names.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/100-custom-model-and-field-names.mdx new file mode 100644 index 0000000000..e5b707ffb9 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/100-custom-model-and-field-names.mdx @@ -0,0 +1,319 @@ +--- +title: 'Custom model and field names' +metaTitle: 'Custom model and field names' +metaDescription: 'Learn how you can decouple the naming of Prisma models from database tables to improve the ergonomics of the generated Prisma Client API.' +--- + + + +The Prisma Client API is generated based on the models in your [Prisma schema](/orm/prisma-schema). Models are _typically_ 1:1 mappings of your database tables. + +In some cases, especially when using [introspection](/orm/prisma-schema/introspection), it might be useful to _decouple_ the naming of database tables and columns from the names that are used in your Prisma Client API. This can be done via the [`@map` and `@@map`](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections) attributes in your Prisma schema. + +You can use `@map` and `@@map` to rename MongoDB fields and collections respectively. This page uses a relational database example. + + + +## Example: Relational database + +Assume you have a PostgreSQL relational database schema looking similar to this: + +```sql +CREATE TABLE users ( + user_id SERIAL PRIMARY KEY NOT NULL, + name VARCHAR(256), + email VARCHAR(256) UNIQUE NOT NULL +); +CREATE TABLE posts ( + post_id SERIAL PRIMARY KEY NOT NULL, + created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, + title VARCHAR(256) NOT NULL, + content TEXT, + author_id INTEGER REFERENCES users(user_id) +); +CREATE TABLE profiles ( + profile_id SERIAL PRIMARY KEY NOT NULL, + bio TEXT, + user_id INTEGER NOT NULL UNIQUE REFERENCES users(user_id) +); +CREATE TABLE categories ( + category_id SERIAL PRIMARY KEY NOT NULL, + name VARCHAR(256) +); +CREATE TABLE post_in_categories ( + post_id INTEGER NOT NULL REFERENCES posts(post_id), + category_id INTEGER NOT NULL REFERENCES categories(category_id) +); +CREATE UNIQUE INDEX post_id_category_id_unique ON post_in_categories(post_id int4_ops,category_id int4_ops); +``` + +When introspecting a database with that schema, you'll get a Prisma schema looking similar to this: + +```prisma +model categories { + category_id Int @id @default(autoincrement()) + name String? @db.VarChar(256) + post_in_categories post_in_categories[] +} + +model post_in_categories { + post_id Int + category_id Int + categories categories @relation(fields: [category_id], references: [category_id], onDelete: NoAction, onUpdate: NoAction) + posts posts @relation(fields: [post_id], references: [post_id], onDelete: NoAction, onUpdate: NoAction) + + @@unique([post_id, category_id], map: "post_id_category_id_unique") +} + +model posts { + post_id Int @id @default(autoincrement()) + created_at DateTime? @default(now()) @db.Timestamptz(6) + title String @db.VarChar(256) + content String? + author_id Int? + users users? @relation(fields: [author_id], references: [user_id], onDelete: NoAction, onUpdate: NoAction) + post_in_categories post_in_categories[] +} + +model profiles { + profile_id Int @id @default(autoincrement()) + bio String? + user_id Int @unique + users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction, onUpdate: NoAction) +} + +model users { + user_id Int @id @default(autoincrement()) + name String? @db.VarChar(256) + email String @unique @db.VarChar(256) + posts posts[] + profiles profiles? +} +``` + +There are a few "issues" with this Prisma schema when the Prisma Client API is generated: + +**Adhering to Prisma ORM's naming conventions** + +Prisma ORM has a [naming convention](/orm/reference/prisma-schema-reference#naming-conventions) of **camelCasing** and using the **singular form** for Prisma models. If these naming conventions are not met, the Prisma schema can become harder to interpret and the generated Prisma Client API will feel less natural. Consider the following, generated model: + +```prisma +model users { + user_id Int @id @default(autoincrement()) + name String? @db.VarChar(256) + email String @unique @db.VarChar(256) + posts posts[] + profiles profiles? +} +``` + +Although `profiles` refers to a 1:1 relation, its type is currently called `profiles` in plural, suggesting that there might be many `profiles` in this relation. With Prisma ORM conventions, the models and fields were _ideally_ named as follows: + +```prisma +model User { + user_id Int @id @default(autoincrement()) + name String? @db.VarChar(256) + email String @unique @db.VarChar(256) + posts Post[] + profile Profile? +} +``` + +Because these fields are "Prisma ORM-level" [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) that do not manifest you can manually rename them in your Prisma schema. + +**Naming of annotated relation fields** + +Foreign keys are represented as a combination of a [annotated relation fields](/orm/prisma-schema/data-model/relations#relation-fields) and its corresponding relation scalar field in the Prisma schema. Here's how all the relations from the SQL schema are currently represented: + +```prisma +model categories { + category_id Int @id @default(autoincrement()) + name String? @db.VarChar(256) + post_in_categories post_in_categories[] // virtual relation field +} + +model post_in_categories { + post_id Int // relation scalar field + category_id Int // relation scalar field + categories categories @relation(fields: [category_id], references: [category_id], onDelete: NoAction, onUpdate: NoAction) // virtual relation field + posts posts @relation(fields: [post_id], references: [post_id], onDelete: NoAction, onUpdate: NoAction) + + @@unique([post_id, category_id], map: "post_id_category_id_unique") +} + +model posts { + post_id Int @id @default(autoincrement()) + created_at DateTime? @default(now()) @db.Timestamptz(6) + title String @db.VarChar(256) + content String? + author_id Int? + users users? @relation(fields: [author_id], references: [user_id], onDelete: NoAction, onUpdate: NoAction) + post_in_categories post_in_categories[] +} + +model profiles { + profile_id Int @id @default(autoincrement()) + bio String? + user_id Int @unique + users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction, onUpdate: NoAction) +} + +model users { + user_id Int @id @default(autoincrement()) + name String? @db.VarChar(256) + email String @unique @db.VarChar(256) + posts posts[] + profiles profiles? +} +``` + +## Using `@map` and `@@map` to rename fields and models in the Prisma Client API + +You can "rename" fields and models that are used in Prisma Client by mapping them to the "original" names in the database using the `@map` and `@@map` attributes. For the example above, you could e.g. annotate your models as follows. + +_After_ you introspected your database with `prisma db pull`, you can manually adjust the resulting Prisma schema as follows: + +```prisma +model Category { + id Int @id @default(autoincrement()) @map("category_id") + name String? @db.VarChar(256) + post_in_categories PostInCategories[] + + @@map("categories") +} + +model PostInCategories { + post_id Int + category_id Int + categories Category @relation(fields: [category_id], references: [id], onDelete: NoAction, onUpdate: NoAction) + posts Post @relation(fields: [post_id], references: [id], onDelete: NoAction, onUpdate: NoAction) + + @@unique([post_id, category_id], map: "post_id_category_id_unique") + @@map("post_in_categories") +} + +model Post { + id Int @id @default(autoincrement()) @map("post_id") + created_at DateTime? @default(now()) @db.Timestamptz(6) + title String @db.VarChar(256) + content String? + author_id Int? + users User? @relation(fields: [author_id], references: [id], onDelete: NoAction, onUpdate: NoAction) + post_in_categories PostInCategories[] + + @@map("posts") +} + +model Profile { + id Int @id @default(autoincrement()) @map("profile_id") + bio String? + user_id Int @unique + users User @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction) + + @@map("profiles") +} + +model User { + id Int @id @default(autoincrement()) @map("user_id") + name String? @db.VarChar(256) + email String @unique @db.VarChar(256) + posts Post[] + profiles Profile? + + @@map("users") +} +``` + +With these changes, you're now adhering to Prisma ORM's naming conventions and the generated Prisma Client API feels more "natural": + +```ts +// Nested writes +const profile = await prisma.profile.create({ + data: { + bio: 'Hello World', + users: { + create: { + name: 'Alice', + email: 'alice@prisma.io', + }, + }, + }, +}) + +// Fluent API +const userByProfile = await prisma.profile + .findUnique({ + where: { id: 1 }, + }) + .users() +``` + + + +`prisma db pull` preserves the custom names you defined via `@map` and `@@map` in your Prisma schema on re-introspecting your database. + + + + +## Renaming relation fields + +Prisma ORM-level [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) (sometimes referred to as "virtual relation fields") only exist in the Prisma schema, but do not actually manifest in the underlying database. You can therefore name these fields whatever you want. + +Consider the following example of an ambiguous relation in a SQL database: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + "author" integer NOT NULL, + "favoritedBy" INTEGER, + FOREIGN KEY ("author") REFERENCES "User"(id), + FOREIGN KEY ("favoritedBy") REFERENCES "User"(id) +); +``` + +Prisma ORM's introspection will output the following Prisma schema: + +```prisma +model Post { + id Int @id @default(autoincrement()) + author Int + favoritedBy Int? + User_Post_authorToUser User @relation("Post_authorToUser", fields: [author], references: [id], onDelete: NoAction, onUpdate: NoAction) + User_Post_favoritedByToUser User? @relation("Post_favoritedByToUser", fields: [favoritedBy], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id Int @id @default(autoincrement()) + Post_Post_authorToUser Post[] @relation("Post_authorToUser") + Post_Post_favoritedByToUser Post[] @relation("Post_favoritedByToUser") +} +``` + +Because the names of the virtual relation fields `Post_Post_authorToUser` and `Post_Post_favoritedByToUser` are based on the generated relation names, they don't look very friendly in the Prisma Client API. In that case, you can rename the relation fields. For example: + +```prisma highlight=11-12;edit +model Post { + id Int @id @default(autoincrement()) + author Int + favoritedBy Int? + User_Post_authorToUser User @relation("Post_authorToUser", fields: [author], references: [id], onDelete: NoAction, onUpdate: NoAction) + User_Post_favoritedByToUser User? @relation("Post_favoritedByToUser", fields: [favoritedBy], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model User { + id Int @id @default(autoincrement()) + //edit-start + writtenPosts Post[] @relation("Post_authorToUser") + favoritedPosts Post[] @relation("Post_favoritedByToUser") + //edit-end +} +``` + + + +`prisma db pull` preserves custom relation fields defined in your Prisma schema on re-introspecting your database. + + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/150-error-formatting.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/150-error-formatting.mdx new file mode 100644 index 0000000000..c880444b25 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/150-error-formatting.mdx @@ -0,0 +1,41 @@ +--- +title: 'Configuring error formatting' +metaTitle: 'Configuring error formatting (Concepts)' +metaDescription: 'This page explains how to configure the formatting of errors when using Prisma Client.' +--- + + + +By default, Prisma Client uses [ANSI escape characters](https://en.wikipedia.org/wiki/ANSI_escape_code) to pretty print the error stack and give recommendations on how to fix a problem. While this is very useful when using Prisma Client from the terminal, in contexts like a GraphQL API, you only want the minimal error without any additional formatting. + +This page explains how error formatting can be configured with Prisma Client. + + + +## Formatting levels + +There are 3 error formatting levels: + +1. **Pretty Error** (default): Includes a full stack trace with colors, syntax highlighting of the code and extended error message with a possible solution for the problem. +2. **Colorless Error**: Same as pretty errors, just without colors. +3. **Minimal Error**: The raw error message. + +In order to configure these different error formatting levels, there are two options: + +- Setting the config options via environment variables +- Providing the config options to the `PrismaClient` constructor + +## Formatting via environment variables + +- [`NO_COLOR`](/orm/reference/environment-variables-reference#no_color): If this env var is provided, colors are stripped from the error messages. Therefore you end up with a **colorless error**. The `NO_COLOR` environment variable is a standard described [here](https://no-color.org/). +- `NODE_ENV=production`: If the env var `NODE_ENV` is set to `production`, only the **minimal error** will be printed. This allows for easier digestion of logs in production environments. + +### Formatting via the `PrismaClient` constructor + +Alternatively, use the `PrismaClient` [`errorFormat`](/orm/reference/prisma-client-reference#errorformat) parameter to set the error format: + +```ts +const prisma = new PrismaClient({ + errorFormat: 'pretty', +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/200-read-replicas.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/200-read-replicas.mdx new file mode 100644 index 0000000000..ef695f72d3 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/200-read-replicas.mdx @@ -0,0 +1,83 @@ +--- +title: 'Read replicas' +metaTitle: 'Read replicas' +metaDescription: 'Learn how to set up and use read replicas with Prisma Client' +tocDepth: 3 +--- + + + +Read replicas enable you to distribute workloads across database replicas for high-traffic workloads. The [read replicas extension](https://github.com/prisma/extension-read-replicas), `@prisma/extension-read-replicas`, adds support for read-only database replicas to Prisma Client. + +The read replicas extension supports Prisma ORM versions [5.2.0](https://github.com/prisma/prisma/releases/tag/5.2.0) and higher. If you run into a bug or have feedback, create a GitHub issue [here](https://github.com/prisma/extension-read-replicas/issues/new). + + + +## Setup the read replicas extension + +Install the extension: + +```terminal +npm install @prisma/extension-read-replicas +``` + +Initialize the extension by extending your Prisma Client instance and provide the extension a connection string that points to your read replica in the `url` option of the extension. + + + +```ts +import { PrismaClient } from '@prisma/client' +import { readReplicas } from '@prisma/extension-read-replicas' + +const prisma = new PrismaClient().$extends( + readReplicas({ + url: process.env.DATABASE_URL_REPLICA, + }) +) + +// Query is run against the database replica +await prisma.post.findMany() + +// Query is run against the primary database +await prisma.post.create({ + data: {/** */}, +}) +``` + + +All read operations, e.g. `findMany`, will be executed against the database replica with the above setup. All write operations — e.g. `create`, `update` — and `$transaction` queries, will be executed against your primary database. + +If you run into a bug or have feedback, create a GitHub issue [here](https://github.com/prisma/extension-read-replicas/issues/new). + +## Configure multiple database replicas + +The `url` property also accepts an array of values, i.e. an array of all your database replicas you would like to configure: + +```ts +const prisma = new PrismaClient().$extends( + readReplicas({ + url: [ + process.env.DATABASE_URL_REPLICA_1, + process.env.DATABASE_URL_REPLICA_2, + ], + }) +) +``` + +If you have more than one read replica configured, a database replica will be randomly selected to execute your query. + +## Executing read operations against your primary database + +You can use the `$primary()` method to explicitly execute a read operation against your primary database: + +```ts +const posts = await prisma.$primary().post.findMany() +``` + +## Executing operations against a database replica + +You can use the `$replica()` method to explicitly execute your query against a replica instead of your primary database: + +```ts +const result = await prisma.$replica().user.findFirst(...) +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/220-database-polyfills.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/220-database-polyfills.mdx new file mode 100644 index 0000000000..56e53b6e50 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/220-database-polyfills.mdx @@ -0,0 +1,23 @@ +--- +title: 'Database polyfills' +metaTitle: 'Database polyfills (Concepts)' +metaDescription: 'Prisma Client provides features that are not achievable with relational databases. These features are referred to as "polyfills" and explained on this page.' +hide_table_of_contents: true +--- + + + +Prisma Client provides features that are typically either not achievable with particular databases or require extensions. These features are referred to as _polyfills_. For all databases, this includes: + +- Initializing [ID](/orm/prisma-schema/data-model/models#defining-an-id-field) values with `cuid` and `uuid` values +- Using [`@updatedAt`](/orm/prisma-schema/data-model/models#defining-attributes) to store the time when a record was last updated + +For relational databases, this includes: + +- [Implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations) + +For MongoDB, this includes: + +- [Relations in general](/orm/prisma-schema/data-model/relations) - foreign key relations between documents are not enforced in MongoDB + + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/index.mdx new file mode 100644 index 0000000000..527d95a3ce --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/index.mdx @@ -0,0 +1,16 @@ +--- +title: 'Setup & configuration' +metaTitle: 'Setup & configuration' +metaDescription: 'This section explains how to generate, configure, and instantiate Prisma Client, as well as when and how to manage database connections.' +hide_table_of_contents: true +--- + + + +This section describes how to set up, generate, configure, and instantiate `PrismaClient` , as well as when and how to actively [manage connections](/orm/prisma-client/setup-and-configuration/databases-connections/connection-management). + + + +## In this section + + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/prisma-client-generation-workflow.png b/versioned_docs/version-legacy/200-orm/200-prisma-client/000-setup-and-configuration/prisma-client-generation-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..1faf99964ccc4f0e0c45c19e317f40f03cd5af01 GIT binary patch literal 43346 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

Hb6&0W^C@{;>{zm${MW9%o0@B@ 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/030-crud.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/030-crud.mdx new file mode 100644 index 0000000000..ce7cfa30ac --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/030-crud.mdx @@ -0,0 +1,1052 @@ +--- +title: 'CRUD' +metaTitle: 'CRUD (Reference)' +metaDescription: 'How to perform CRUD with Prisma Client.' +toc_max_heading_level: 4 +--- + + + +This page describes how to perform CRUD operations with your generated Prisma Client API. CRUD is an acronym that stands for: + +- [Create](#create) +- [Read](#read) +- [Update](#update) +- [Delete](#delete) + +Refer to the [Prisma Client API reference documentation](/orm/reference/prisma-client-reference) for detailed explanations of each method. + + + +## Example schema + +All examples are based on the following schema: + +

+ +Expand for sample schema + + + + +```prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model ExtendedProfile { + id Int @id @default(autoincrement()) + biography String + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model User { + id Int @id @default(autoincrement()) + name String? + email String @unique + profileViews Int @default(0) + role Role @default(USER) + coinflips Boolean[] + posts Post[] + profile ExtendedProfile? +} + +model Post { + id Int @id @default(autoincrement()) + title String + published Boolean @default(true) + author User @relation(fields: [authorId], references: [id]) + authorId Int + comments Json? + views Int @default(0) + likes Int @default(0) + categories Category[] +} + +model Category { + id Int @id @default(autoincrement()) + name String @unique + posts Post[] +} + +enum Role { + USER + ADMIN +} +``` + + + + +```prisma +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model ExtendedProfile { + id String @id @default(auto()) @map("_id") @db.ObjectId + biography String + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + email String @unique + profileViews Int @default(0) + role Role @default(USER) + coinflips Boolean[] + posts Post[] + profile ExtendedProfile? +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + published Boolean @default(true) + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + comments Json? + views Int @default(0) + likes Int @default(0) + categories Category[] +} + +model Category { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String @unique + posts Post[] +} + +enum Role { + USER + ADMIN +} +``` + + + + +
+ +For **relational databases**, use `db push` command to push the example schema to your own database + +```terminal +npx prisma db push +``` + +For **MongoDB**, ensure your data is in a uniform shape and matches the model defined in the Prisma schema. + +## Create + +### Create a single record + +The following query creates ([`create()`](/orm/reference/prisma-client-reference#create)) a single user with two fields: + + + + +```ts +const user = await prisma.user.create({ + data: { + email: 'elsa@prisma.io', + name: 'Elsa Prisma', + }, +}) +``` + + + + +```js no-copy +{ + id: 22, + name: 'Elsa Prisma', + email: 'elsa@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [] +} +``` + + + + +The user's `id` is auto-generated, and your schema determines [which fields are mandatory](/orm/prisma-schema/data-model/models#optional-and-mandatory-fields). + +#### Create a single record using generated types + +The following example produces an identical result, but creates a `UserCreateInput` variable named `user` _outside_ the context of the `create()` query. After completing a simple check ("Should posts be included in this `create()` query?"), the `user` variable is passed into the query: + +```ts +import { PrismaClient, Prisma } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + let includePosts: boolean = false + let user: Prisma.UserCreateInput + + // Check if posts should be included in the query + if (includePosts) { + user = { + email: 'elsa@prisma.io', + name: 'Elsa Prisma', + posts: { + create: { + title: 'Include this post!', + }, + }, + } + } else { + user = { + email: 'elsa@prisma.io', + name: 'Elsa Prisma', + } + } + + // Pass 'user' object into query + const createUser = await prisma.user.create({ data: user }) +} + +main() +``` + +For more information about working with generated types, see: [Generated types](/orm/prisma-client/type-safety). + +### Create multiple records + +Prisma Client supports bulk inserts as a GA feature in [2.20.0](https://github.com/prisma/prisma/releases/2.20.0) and later. + +The following [`createMany()`](/orm/reference/prisma-client-reference#createmany) query creates multiple users and skips any duplicates (`email` must be unique): + + + + +```ts +const createMany = await prisma.user.createMany({ + data: [ + { name: 'Bob', email: 'bob@prisma.io' }, + { name: 'Bobo', email: 'bob@prisma.io' }, // Duplicate unique key! + { name: 'Yewande', email: 'yewande@prisma.io' }, + { name: 'Angelique', email: 'angelique@prisma.io' }, + ], + skipDuplicates: true, // Skip 'Bobo' +}) +``` + + + + +```js no-copy +{ + count: 3 +} +``` + + + + + + + +Note `skipDuplicates` is not supported when using MongoDB, SQLServer, or SQLite. + + + +`createMany()` uses a single `INSERT INTO` statement with multiple values, which is generally more efficient than a separate `INSERT` per row: + +```sql +BEGIN +INSERT INTO "public"."User" ("id","name","email","profileViews","role","coinflips","testing","city","country") VALUES (DEFAULT,$1,$2,$3,$4,DEFAULT,DEFAULT,DEFAULT,$5), (DEFAULT,$6,$7,$8,$9,DEFAULT,DEFAULT,DEFAULT,$10), (DEFAULT,$11,$12,$13,$14,DEFAULT,DEFAULT,DEFAULT,$15), (DEFAULT,$16,$17,$18,$19,DEFAULT,DEFAULT,DEFAULT,$20) ON CONFLICT DO NOTHING +COMMIT +SELECT "public"."User"."country", "public"."User"."city", "public"."User"."email", SUM("public"."User"."profileViews"), COUNT(*) FROM "public"."User" WHERE 1=1 GROUP BY "public"."User"."country", "public"."User"."city", "public"."User"."email" HAVING AVG("public"."User"."profileViews") >= $1 ORDER BY "public"."User"."country" ASC OFFSET $2 +``` + +> **Note**: Multiple `create()` statements inside a `$transaction` results in multiple `INSERT` statements. + +The following video demonstrates how to use `createMany()` and [faker.js](https://github.com/faker-js/faker/) to seed a database with sample data: + +
+ +
+ +### Create records and connect or create related records + +See [Working with relations > Nested writes](/orm/prisma-client/queries/relation-queries#nested-writes) for information about creating a record and one or more related records at the same time. + +### Create and return multiple records + +:::info + +This feature is available in Prisma ORM version 5.14.0 and later for PostgreSQL, CockroachDB and SQLite. + +::: + +You can use `createManyAndReturn()` in order to create many records and return the resulting objects. + + + + +```ts +const users = await prisma.user.createManyAndReturn({ + data: [ + { name: 'Alice', email: 'alice@prisma.io' }, + { name: 'Bob', email: 'bob@prisma.io' }, + ], +}) +``` + + + + +```js no-copy +[{ + id: 22, + name: 'Alice', + email: 'alice@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [] +}, { + id: 23, + name: 'Bob', + email: 'bob@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [] +}] +``` + + + + +:::warning + +`relationLoadStrategy: join` is not available when using `createManyAndReturn()`. + +::: + +## Read + +### Get record by ID or unique identifier + +The following queries return a single record ([`findUnique()`](/orm/reference/prisma-client-reference#findunique)) by unique identifier or ID: + +```ts +// By unique identifier +const user = await prisma.user.findUnique({ + where: { + email: 'elsa@prisma.io', + }, +}) + +// By ID +const user = await prisma.user.findUnique({ + where: { + id: 99, + }, +}) +``` + +If you are using the MongoDB connector and your underlying ID type is `ObjectId`, you can use the string representation of that `ObjectId`: + +```ts +// By ID +const user = await prisma.user.findUnique({ + where: { + id: '60d5922d00581b8f0062e3a8', + }, +}) +``` + +### Get all records + +The following [`findMany()`](/orm/reference/prisma-client-reference#findmany) query returns _all_ `User` records: + +```ts +const users = await prisma.user.findMany() +``` + +You can also [paginate your results](/orm/prisma-client/queries/pagination). + +### Get the first record that matches a specific criteria + +The following [`findFirst()`](/orm/reference/prisma-client-reference#findfirst) query returns the _most recently created user_ with at least one post that has more than 100 likes: + +1. Order users by descending ID (largest first) - the largest ID is the most recent +2. Return the first user in descending order with at least one post that has more than 100 likes + +```ts +const findUser = await prisma.user.findFirst({ + where: { + posts: { + some: { + likes: { + gt: 100, + }, + }, + }, + }, + orderBy: { + id: 'desc', + }, +}) +``` + +### Get a filtered list of records + +Prisma Client supports [filtering](/orm/prisma-client/queries/filtering-and-sorting) on record fields and related record fields. + +#### Filter by a single field value + +The following query returns all `User` records with an email that ends in `"prisma.io"`: + +```ts +const users = await prisma.user.findMany({ + where: { + email: { + endsWith: 'prisma.io', + }, + }, +}) +``` + +#### Filter by multiple field values + +The following query uses a combination of [operators](/orm/reference/prisma-client-reference#filter-conditions-and-operators) to return users whose name start with `E` _or_ administrators with at least 1 profile view: + +```ts +const users = await prisma.user.findMany({ + where: { + OR: [ + { + name: { + startsWith: 'E', + }, + }, + { + AND: { + profileViews: { + gt: 0, + }, + role: { + equals: 'ADMIN', + }, + }, + }, + ], + }, +}) +``` + +#### Filter by related record field values + +The following query returns users with an email that ends with `prisma.io` _and_ have at least _one_ post (`some`) that is not published: + +```ts +const users = await prisma.user.findMany({ + where: { + email: { + endsWith: 'prisma.io', + }, + posts: { + some: { + published: false, + }, + }, + }, +}) +``` + +See [Working with relations](/orm/prisma-client/queries/relation-queries) for more examples of filtering on related field values. + +### Select a subset of fields + +The following `findUnique()` query uses `select` to return the `email` and `name` fields of a specific `User` record: + + + + +```ts +const user = await prisma.user.findUnique({ + where: { + email: 'emma@prisma.io', + }, + select: { + email: true, + name: true, + }, +}) +``` + + + + +```js no-copy +{ email: 'emma@prisma.io', name: "Emma" } +``` + + + + +For more information about including relations, refer to: + +- [Select fields](/orm/prisma-client/queries/select-fields) +- [Relation queries](/orm/prisma-client/queries/relation-queries) + +#### Select a subset of related record fields + +The following query uses a nested `select` to return: + +- The user's `email` +- The `likes` field of each post + + + + +```ts +const user = await prisma.user.findUnique({ + where: { + email: 'emma@prisma.io', + }, + select: { + email: true, + posts: { + select: { + likes: true, + }, + }, + }, +}) +``` + + + + +```js no-copy +{ email: 'emma@prisma.io', posts: [ { likes: 0 }, { likes: 0 } ] } +``` + + + + +For more information about including relations, see [Select fields and include relations](/orm/prisma-client/queries/select-fields). + +### Select distinct field values + +See [Select `distinct`](/orm/prisma-client/queries/aggregation-grouping-summarizing#select-distinct) for information about selecting distinct field values. + +### Include related records + +The following query returns all `ADMIN` users and includes each user's posts in the result: + + + + +```ts +const users = await prisma.user.findMany({ + where: { + role: 'ADMIN', + }, + include: { + posts: true, + }, +}) +``` + + + + +```js no-copy +{ + "id": 38, + "name": "Maria", + "email": "maria@prisma.io", + "profileViews": 20, + "role": "ADMIN", + "coinflips": [ + true, + false, + false + ], + "posts": [] +}, +{ + "id": 39, + "name": "Oni", + "email": "oni2@prisma.io", + "profileViews": 20, + "role": "ADMIN", + "coinflips": [ + true, + false, + false + ], + "posts": [ + { + "id": 25, + "authorId": 39, + "title": "My awesome post", + "published": true, + "comments": null, + "views": 0, + "likes": 0 + } + ] +} +``` + + + + +For more information about including relations, see [Select fields and include relations](/orm/prisma-client/queries/select-fields). + +#### Include a filtered list of relations + +See [Working with relations](/orm/prisma-client/queries/relation-queries#filter-a-list-of-relations) to find out how to combine [`include`](/orm/reference/prisma-client-reference#include) and `where` for a filtered list of relations - for example, only include a user's published posts. + +## Update + +### Update a single record + +The following query uses [`update()`](/orm/reference/prisma-client-reference#update) to find and update a single `User` record by `email`: + + + + +```ts +const updateUser = await prisma.user.update({ + where: { + email: 'viola@prisma.io', + }, + data: { + name: 'Viola the Magnificent', + }, +}) +``` + + + + +```js no-copy +{ + "id": 43, + "name": "Viola the Magnificent", + "email": "viola@prisma.io", + "profileViews": 0, + "role": "USER", + "coinflips": [], +} +``` + + + + +### Update multiple records + +The following query uses [`updateMany()`](/orm/reference/prisma-client-reference#updatemany) to update all `User` records that contain `prisma.io`: + + + + +```ts +const updateUsers = await prisma.user.updateMany({ + where: { + email: { + contains: 'prisma.io', + }, + }, + data: { + role: 'ADMIN', + }, +}) +``` + + + + +```js no-copy +{ + "count": 19 +} +``` + + + + +### Update _or_ create records + +The following query uses [`upsert()`](/orm/reference/prisma-client-reference#upsert) to update a `User` record with a specific email address, or create that `User` record if it does not exist: + + + + +```ts +const upsertUser = await prisma.user.upsert({ + where: { + email: 'viola@prisma.io', + }, + update: { + name: 'Viola the Magnificent', + }, + create: { + email: 'viola@prisma.io', + name: 'Viola the Magnificent', + }, +}) +``` + + + + +```js no-copy +{ + "id": 43, + "name": "Viola the Magnificent", + "email": "viola@prisma.io", + "profileViews": 0, + "role": "ADMIN", + "coinflips": [], +} +``` + + + + + + +From version 4.6.0, Prisma Client carries out upserts with database native SQL commands where possible. [Learn more](/orm/reference/prisma-client-reference#database-upserts). + + + +Prisma Client does not have a `findOrCreate()` query. You can use `upsert()` as a workaround. To make `upsert()` behave like a `findOrCreate()` method, provide an empty `update` parameter to `upsert()`. + + + +A limitation to using `upsert()` as a workaround for `findOrCreate()` is that `upsert()` will only accept unique model fields in the `where` condition. So it's not possible to use `upsert()` to emulate `findOrCreate()` if the `where` condition contains non-unique fields. + + + +### Update a number field + +Use [atomic number operations](/orm/reference/prisma-client-reference#atomic-number-operations) to update a number field **based on its current value** - for example, increment or multiply. The following query increments the `views` and `likes` fields by `1`: + +```ts +const updatePosts = await prisma.post.updateMany({ + data: { + views: { + increment: 1, + }, + likes: { + increment: 1, + }, + }, +}) +``` + +### Connect and disconnect related records + +Refer to [Working with relations](/orm/prisma-client/queries/relation-queries) for information about disconnecting ([`disconnect`](/orm/reference/prisma-client-reference#disconnect)) and connecting ([`connect`](/orm/reference/prisma-client-reference#connect)) related records. + +## Delete + +### Delete a single record + +The following query uses [`delete()`](/orm/reference/prisma-client-reference#delete) to delete a single `User` record: + +```ts +const deleteUser = await prisma.user.delete({ + where: { + email: 'bert@prisma.io', + }, +}) +``` + +Attempting to delete a user with one or more posts result in an error, as every `Post` requires an author - see [cascading deletes](#cascading-deletes-deleting-related-records). + +### Delete multiple records + +The following query uses [`deleteMany()`](/orm/reference/prisma-client-reference#deletemany) to delete all `User` records where `email` contains `prisma.io`: + +```ts +const deleteUsers = await prisma.user.deleteMany({ + where: { + email: { + contains: 'prisma.io', + }, + }, +}) +``` + +Attempting to delete a user with one or more posts result in an error, as every `Post` requires an author - see [cascading deletes](#cascading-deletes-deleting-related-records). + +### Delete all records + +The following query uses [`deleteMany()`](/orm/reference/prisma-client-reference#deletemany) to delete all `User` records: + +```ts +const deleteUsers = await prisma.user.deleteMany({}) +``` + +Be aware that this query will fail if the user has any related records (such as posts). In this case, you need to [delete the related records first](#cascading-deletes-deleting-related-records). + +### Cascading deletes (deleting related records) + + + +In [2.26.0](https://github.com/prisma/prisma/releases/tag/2.26.0) and later it is possible to do cascading deletes using the **preview feature** [referential actions](/orm/prisma-schema/data-model/relations/referential-actions). + + + +The following query uses [`delete()`](/orm/reference/prisma-client-reference#delete) to delete a single `User` record: + +```ts +const deleteUser = await prisma.user.delete({ + where: { + email: 'bert@prisma.io', + }, +}) +``` + +However, the example schema includes a **required relation** between `Post` and `User`, which means that you cannot delete a user with posts: + +``` +The change you are trying to make would violate the required relation 'PostToUser' between the `Post` and `User` models. +``` + +To resolve this error, you can: + +- Make the relation optional: + + ```prisma highlight=3,4;add|5,6;delete + model Post { + id Int @id @default(autoincrement()) + //add-start + author User? @relation(fields: [authorId], references: [id]) + authorId Int? + //add-end + //delete-start + author User @relation(fields: [authorId], references: [id]) + authorId Int + //delete-end + } + ``` + +- Change the author of the posts to another user before deleting the user. + +- Delete a user and all their posts with two separate queries in a transaction (all queries must succeed): + + ```ts + const deletePosts = prisma.post.deleteMany({ + where: { + authorId: 7, + }, + }) + + const deleteUser = prisma.user.delete({ + where: { + id: 7, + }, + }) + + const transaction = await prisma.$transaction([deletePosts, deleteUser]) + ``` + +### Delete all records from all tables + +Sometimes you want to remove all data from all tables but keep the actual tables. This can be particularly useful in a development environment and whilst testing. + +The following shows how to delete all records from all tables with Prisma Client and with Prisma Migrate. + +#### Deleting all data with `deleteMany()` + +When you know the order in which your tables should be deleted, you can use the [`deleteMany`](/orm/reference/prisma-client-reference#deletemany) function. This is executed synchronously in a [`$transaction`](/orm/prisma-client/queries/transactions) and can be used with all types of databases. + +```ts +const deletePosts = prisma.post.deleteMany() +const deleteProfile = prisma.profile.deleteMany() +const deleteUsers = prisma.user.deleteMany() + +// The transaction runs synchronously so deleteUsers must run last. +await prisma.$transaction([deleteProfile, deletePosts, deleteUsers]) +``` + +✅ **Pros**: + +- Works well when you know the structure of your schema ahead of time +- Synchronously deletes each tables data + +❌ **Cons**: + +- When working with relational databases, this function doesn't scale as well as having a more generic solution which looks up and `TRUNCATE`s your tables regardless of their relational constraints. Note that this scaling issue does not apply when using the MongoDB connector. + +> **Note**: The `$transaction` performs a cascading delete on each models table so they have to be called in order. + +#### Deleting all data with raw SQL / `TRUNCATE` + +If you are comfortable working with raw SQL, you can perform a `TRUNCATE` query on a table using [`$executeRawUnsafe`](/orm/prisma-client/using-raw-sql/raw-queries#executerawunsafe). + +In the following examples, the first tab shows how to perform a `TRUNCATE` on a Postgres database by using a `$queryRaw` look up that maps over the table and `TRUNCATES` all tables in a single query. + +The second tab shows performing the same function but with a MySQL database. In this instance the constraints must be removed before the `TRUNCATE` can be executed, before being reinstated once finished. The whole process is run as a `$transaction` + + + + + +```ts +const tablenames = await prisma.$queryRaw< + Array<{ tablename: string }> +>`SELECT tablename FROM pg_tables WHERE schemaname='public'` + +const tables = tablenames + .map(({ tablename }) => tablename) + .filter((name) => name !== '_prisma_migrations') + .map((name) => `"public"."${name}"`) + .join(', ') + +try { + await prisma.$executeRawUnsafe(`TRUNCATE TABLE ${tables} CASCADE;`) +} catch (error) { + console.log({ error }) +} +``` + + + + + +```ts +const transactions: PrismaPromise[] = [] +transactions.push(prisma.$executeRaw`SET FOREIGN_KEY_CHECKS = 0;`) + +const tablenames = await prisma.$queryRaw< + Array<{ TABLE_NAME: string }> +>`SELECT TABLE_NAME from information_schema.TABLES WHERE TABLE_SCHEMA = 'tests';` + +for (const { TABLE_NAME } of tablenames) { + if (TABLE_NAME !== '_prisma_migrations') { + try { + transactions.push(prisma.$executeRawUnsafe(`TRUNCATE ${TABLE_NAME};`)) + } catch (error) { + console.log({ error }) + } + } +} + +transactions.push(prisma.$executeRaw`SET FOREIGN_KEY_CHECKS = 1;`) + +try { + await prisma.$transaction(transactions) +} catch (error) { + console.log({ error }) +} +``` + + + + + +✅ **Pros**: + +- Scalable +- Very fast + +❌ **Cons**: + +- Can't undo the operation +- Using reserved SQL key words as tables names can cause issues when trying to run a raw query + +#### Deleting all records with Prisma Migrate + +If you use Prisma Migrate, you can use `migrate reset`, this will: + +1. Drop the database +2. Create a new database +3. Apply migrations +4. Seed the database with data + +## Advanced query examples + +### Create a deeply nested tree of records + +- A single `User` +- Two new, related `Post` records +- Connect or create `Category` per post + +```ts +const u = await prisma.user.create({ + include: { + posts: { + include: { + categories: true, + }, + }, + }, + data: { + email: 'emma@prisma.io', + posts: { + create: [ + { + title: 'My first post', + categories: { + connectOrCreate: [ + { + create: { name: 'Introductions' }, + where: { + name: 'Introductions', + }, + }, + { + create: { name: 'Social' }, + where: { + name: 'Social', + }, + }, + ], + }, + }, + { + title: 'How to make cookies', + categories: { + connectOrCreate: [ + { + create: { name: 'Social' }, + where: { + name: 'Social', + }, + }, + { + create: { name: 'Cooking' }, + where: { + name: 'Cooking', + }, + }, + ], + }, + }, + ], + }, + }, +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/035-select-fields.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/035-select-fields.mdx new file mode 100644 index 0000000000..e9a3aebea0 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/035-select-fields.mdx @@ -0,0 +1,336 @@ +--- +title: 'Select fields' +metaTitle: 'Select fields' +metaDescription: 'This page explains how to select only a subset of a model''s fields and/or include relations ("eager loading") in a Prisma Client query.' +tocDepth: 3 +--- + +## Overview + +By default, when a query returns records (as opposed to a count), the result includes: + +- **All scalar fields** of a model (including enums) +- **No relations** defined on a model + +As an example, consider this schema: + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + role Role @default(USER) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + published Boolean @default(false) + title String + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +enum Role { + USER + ADMIN +} +``` + +A query to the `User` model will include the `id`, `email`, `name` and `role` fields (because these are _scalar_ fields), but not the `posts` field (because that's a _relation_ field): + + + + +```ts +const users = await prisma.user.findFirst() +``` + + + + +```js no-copy +{ + id: 42, + name: "Sabelle", + email: "sabelle@prisma.io", + role: "ADMIN" +} +``` + + + + +If you want to customize the result and have a different combination of fields returned, you can: + +- Use [`select`](/orm/reference/prisma-client-reference#select) to return specific fields. You can also use a [nested `select`](/orm/prisma-client/queries/relation-queries#select-specific-fields-of-included-relations) by selecting relation fields. +- Use [`omit`](/orm/reference/prisma-client-reference#omit-preview) to exclude specific fields from the result. `omit` can be seen as the "opposite" to `select`. +- Use [`include`](/orm/reference/prisma-client-reference#include) to additionally [include relations](/orm/prisma-client/queries/relation-queries#nested-reads). + +In all cases, the query result will be statically typed, ensuring that you don't accidentally access any fields that you did not actually query from the database. + +Selecting only the fields and relations that you require rather than relying on the default selection set can reduce the size of the response and improve query speed. + +Since version [5.9.0](https://github.com/prisma/prisma/releases/tag/5.9.0), when doing a relation query with `include` or by using `select` on a relation field, you can also specify the `relationLoadStrategy` to decide whether you want to use a database-level join or perform multiple queries and merge the data on the application level. This feature is currently in [Preview](/orm/more/releases#preview), you can learn more about it [here](/orm/prisma-client/queries/relation-queries#relation-load-strategies-preview). + +## Example schema + +All following examples on this page are based on the following schema: + +```prisma +model User { + id Int @id + name String? + email String @unique + password String + role Role @default(USER) + coinflips Boolean[] + posts Post[] + profile Profile? +} + +model Post { + id Int @id + title String + published Boolean @default(true) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model Profile { + id Int @id + biography String + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +enum Role { + USER + ADMIN +} +``` + + +## Return the default fields + +The following query returns the default fields (all scalar fields, no relations): + + + + +```ts +const user = await prisma.user.findFirst() +``` + + + + +```js no-copy +{ + id: 22, + name: "Alice", + email: "alice@prisma.io", + password: "mySecretPassword42" + role: "ADMIN", + coinflips: [true, false], +} +``` + + + + +## Select specific fields + +Use `select` to return a _subset_ of fields instead of _all_ fields. The following example returns the `email` and `name` fields only: + + + + +```ts +const user = await prisma.user.findFirst({ + select: { + email: true, + name: true, + }, +}) +``` + + + + +```js no-copy +{ + name: "Alice", + email: "alice@prisma.io", +} +``` + + + + +## Return nested objects by selecting relation fields + +You can also return relations by nesting `select` multiple times on [relation fields](/orm/prisma-schema/data-model/relations#relation-fields). + +The following query uses a nested `select` to select each user's `name` and the `title` of each related post: + + + + +```ts highlight=normal;2,5 +const usersWithPostTitles = await prisma.user.findFirst({ + select: { + name: true, + posts: { + select: { title: true }, + }, + }, +}) +``` + + + + +```js no-copy +{ + "name":"Sabelle", + "posts":[ + { "title":"Getting started with Azure Functions" }, + { "title":"All about databases" } + ] +} +``` + + + + +The following query uses `select` within an `include`, and returns _all_ user fields and each post's `title` field: + + + + +```ts highlight=normal;2,5 +const usersWithPostTitles = await prisma.user.findFirst({ + include: { + posts: { + select: { title: true }, + }, + }, +}) +``` + + + + +```js no-copy +{ + id: 9 + name: "Sabelle", + email: "sabelle@prisma.io", + password: "mySecretPassword42", + role: "USER", + coinflips: [], + posts:[ + { title:"Getting started with Azure Functions" }, + { title:"All about databases" } + ] +} +``` + + + + +You can nest your queries arbitrarily deep. The following query fetches: +- the `title` of a `Post` +- the `name` of the related `User` +- the `biography` of the related `Profile` + + + + +```ts highlight=normal;2,5 +const postsWithAuthorsAndProfiles = await prisma.post.findFirst({ + select: { + title: true, + author: { + select: { + name: true, + profile: { + select: { biography: true } + } + }, + }, + }, +}) +``` + + + + +```js no-copy +{ + id: 9 + title:"All about databases", + author: { + name: "Sabelle",. + profile: { + biography: "I like turtles" + } + } +} +``` + + + + +:::note + +Be careful when deeply nesting relations because the underlying database query may become slow due it needing to access a lot of different tables. To ensure your queries always have optimal speed, consider adding a caching layer with [Prisma Accelerate](/accelerate) or use [Prisma Optimize](/optimize/) to get query insights and recommendations for performance optimizations. + +::: + +For more information about querying relations, refer to the following documentation: + +- [Include a relation (including all fields)](/orm/prisma-client/queries/relation-queries#include-all-fields-for-a-specific-relation) +- [Select specific relation fields](/orm/prisma-client/queries/relation-queries#select-specific-fields-of-included-relations) + +## Omit specific fields + +There may be situations when you want to return _most_ fields of a model, excluding only a _small_ subset. A common example for this is when you query a `User` but want to exclude the `password` field for security reasons. + +In these cases, you can use `omit`, which can be seen as the counterpart to `select`: + + + + +```ts +const users = await prisma.user.findFirst({ + omit: { + password: true + } +}) +``` + + + + +```js no-copy +{ + id: 9 + name: "Sabelle", + email: "sabelle@prisma.io", + password: "mySecretPassword4", + profileViews: 90, + role: "USER", + coinflips: [], +} +``` + + + + +Notice how the returned object does _not_ contain the `password` field. + +## Relation count + +In [3.0.1](https://github.com/prisma/prisma/releases/3.0.1) and later, you can `include` or `select` a [count of relations](/orm/prisma-client/queries/aggregation-grouping-summarizing#count-relations) alongside fields. For example, a user's post count. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/037-relation-queries.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/037-relation-queries.mdx new file mode 100644 index 0000000000..7aaed50598 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/037-relation-queries.mdx @@ -0,0 +1,1394 @@ +--- +title: 'Relation queries' +metaTitle: 'Relation queries (Concepts)' +metaDescription: 'Prisma Client provides convenient queries for working with relations, such as a fluent API, nested writes (transactions), nested reads and relation filters.' +toc_max_heading_level: 4 +--- + +A key feature of Prisma Client is the ability to query [relations](/orm/prisma-schema/data-model/relations) between two or more models. Relation queries include: + +- [Nested reads](#nested-reads) (sometimes referred to as _eager loading_) via [`select`](/orm/reference/prisma-client-reference#select) and [`include`](/orm/reference/prisma-client-reference#include) +- [Nested writes](#nested-writes) with [transactional](/orm/prisma-client/queries/transactions) guarantees +- [Filtering on related records](#relation-filters) + +Prisma Client also has a [fluent API for traversing relations](#fluent-api). + +## Nested reads + +Nested reads allow you to read related data from multiple tables in your database - such as a user and that user's posts. You can: + +- Use [`include`](/orm/reference/prisma-client-reference#include) to include related records, such as a user's posts or profile, in the query response. +- Use a nested [`select`](/orm/reference/prisma-client-reference#select) to include specific fields from a related record. You can also nest `select` inside an `include`. + +### Relation load strategies (Preview) + +Since version [5.8.0](https://github.com/prisma/prisma/releases/tag/5.8.0), you can decide on a per-query-level _how_ you want Prisma Client to execute a relation query (i.e. what _load strategy_ should be applied) via the `relationLoadStrategy` option for PostgreSQL databases. + +Since version [5.10.0](https://github.com/prisma/prisma/releases/tag/5.10.0), this feature is also available for MySQL. + +Because the `relationLoadStrategy` option is currently in Preview, you need to enable it via the `relationJoins` preview feature flag in your Prisma schema file: + +```prisma file=schema.prisma showLineNumbers +generator client { + provider = "prisma-client-js" + previewFeatures = ["relationJoins"] +} +``` + +After adding this flag, you need to run `prisma generate` again to re-generate Prisma Client. This feature is currently available on PostgreSQL, CockroachDB and MySQL. + +Prisma Client supports two load strategies for relations: + +- `join` (default): Uses a database-level `LATERAL JOIN` (PostgreSQL) or correlated subqueries (MySQL) and fetches all data with a single query to the database. +- `query`: Sends multiple queries to the database (one per table) and joins them on the application level. + +Another important difference between these two options is that the `join` strategy uses JSON aggregation on the database level. That means that it creates the JSON structures returned by Prisma Client already in the database which saves computation resources on the application level. + +> **Note**: Once `relationLoadStrategy` moves from [Preview](/orm/more/releases#preview) into [General Availability](/orm/more/releases/#generally-available-ga), `join` will universally become the default for all relation queries. + +#### Examples + +You can use the `relationLoadStrategy` option on the top-level in any query that supports `include` or `select`. + +Here is an example with `include`: + +```ts +const users = await prisma.user.findMany({ + relationLoadStrategy: 'join', // or 'query' + include: { + posts: true, + }, +}) +``` + +And here is another example with `select`: + +```ts +const users = await prisma.user.findMany({ + relationLoadStrategy: 'join', // or 'query' + select: { + posts: true, + }, +}) +``` + +#### When to use which load strategy? + +- The `join` strategy (default) will be more effective in most scenarios. On PostgreSQL, it uses a combination of `LATERAL JOINs` and JSON aggregation to reduce redundancy in result sets and delegate the work of transforming the query results into the expected JSON structures on the database server. On MySQL, it uses correlated subqueries to fetch the results with a single query. +- There may be edge cases where `query` could be more performant depending on the characteristics of the dataset and query. We recommend that you profile your database queries to identify these situations. +- Use `query` if you want to save resources on the database server and do heavy-lifting of merging and transforming data in the application server which might be easier to scale. + +### Include a relation + +The following example returns a single user and that user's posts: + + + + +```ts +const user = await prisma.user.findFirst({ + include: { + posts: true, + }, +}) +``` + + + + +```js no-copy +{ + id: 19, + name: null, + email: 'emma@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [], + posts: [ + { + id: 20, + title: 'My first post', + published: true, + authorId: 19, + comments: null, + views: 0, + likes: 0 + }, + { + id: 21, + title: 'How to make cookies', + published: true, + authorId: 19, + comments: null, + views: 0, + likes: 0 + } + ] +} +``` + + + + +### Include all fields for a specific relation + +The following example returns a post and its author: + + + + +```ts +const post = await prisma.post.findFirst({ + include: { + author: true, + }, +}) +``` + + + + +```js no-copy +{ + id: 17, + title: 'How to make cookies', + published: true, + authorId: 16, + comments: null, + views: 0, + likes: 0, + author: { + id: 16, + name: null, + email: 'orla@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [], + }, +} +``` + + + + +### Include deeply nested relations + +You can nest `include` options to include relations of relations. The following example returns a user's posts, and each post's categories: + + + + +```ts +const user = await prisma.user.findFirst({ + include: { + posts: { + include: { + categories: true, + }, + }, + }, +}) +``` + + + + +```js no-copy +{ + "id": 40, + "name": "Yvette", + "email": "yvette@prisma.io", + "profileViews": 0, + "role": "USER", + "coinflips": [], + "testing": [], + "city": null, + "country": "Sweden", + "posts": [ + { + "id": 66, + "title": "How to make an omelette", + "published": true, + "authorId": 40, + "comments": null, + "views": 0, + "likes": 0, + "categories": [ + { + "id": 3, + "name": "Easy cooking" + } + ] + }, + { + "id": 67, + "title": "How to eat an omelette", + "published": true, + "authorId": 40, + "comments": null, + "views": 0, + "likes": 0, + "categories": [] + } + ] +} +``` + + + + + +### Select specific fields of included relations + +You can use a nested `select` to choose a subset of fields of relations to return. For example, the following query returns the user's `name` and the `title` of each related post: + + + + +```ts +const user = await prisma.user.findFirst({ + select: { + name: true, + posts: { + select: { + title: true, + }, + }, + }, +}) +``` + + + + +```js no-copy +{ + name: "Elsa", + posts: [ { title: 'My first post' }, { title: 'How to make cookies' } ] +} +``` + + + + +You can also nest a `select` inside an `include` - the following example returns _all_ `User` fields and the `title` field of each post: + + + + +```ts +const user = await prisma.user.findFirst({ + include: { + posts: { + select: { + title: true, + }, + }, + }, +}) +``` + + + + +```js no-copy +{ + "id": 1, + "name": null, + "email": "martina@prisma.io", + "profileViews": 0, + "role": "USER", + "coinflips": [], + "posts": [ + { "title": "How to grow salad" }, + { "title": "How to ride a horse" } + ] +} +``` + + + + +Note that you **cannot** use `select` and `include` _on the same level_. This means that if you choose to `include` a user's post and `select` each post's title, you cannot `select` only the users' `email`: + + + + +```ts highlight=3,6;delete +// The following query returns an exception +const user = await prisma.user.findFirst({ + //delete-next-line + select: { // This won't work! + email: true + } + //delete-next-line + include: { // This won't work! + posts: { + select: { + title: true + } + } + }, +}) +``` + + + + +```code no-copy +Invalid `prisma.user.findUnique()` invocation: + +{ + where: { + id: 19 + }, + select: { + ~~~~~~ + email: true + }, + include: { + ~~~~~~~ + posts: { + select: { + title: true + } + } + } +} + + +Please either use `include` or `select`, but not both at the same time. +``` + + + + +Instead, use nested `select` options: + +```ts +const user = await prisma.user.findFirst({ + select: { + // This will work! + email: true, + posts: { + select: { + title: true, + }, + }, + }, +}) +``` + +## Relation count + +In [3.0.1](https://github.com/prisma/prisma/releases/3.0.1) and later, you can [`include` or `select` a count of relations](/orm/prisma-client/queries/aggregation-grouping-summarizing#count-relations) alongside fields - for example, a user's post count. + + + + +```ts +const relationCount = await prisma.user.findMany({ + include: { + _count: { + select: { posts: true }, + }, + }, +}) +``` + + + + +```code no-copy +{ id: 1, _count: { posts: 3 } }, +{ id: 2, _count: { posts: 2 } }, +{ id: 3, _count: { posts: 2 } }, +{ id: 4, _count: { posts: 0 } }, +{ id: 5, _count: { posts: 0 } } +``` + + + + +## Filter a list of relations + +When you use `select` or `include` to return a subset of the related data, you can **filter and sort the list of relations** inside the `select` or `include`. + +For example, the following query returns list of titles of the unpublished posts associated with the user: + +```ts +const result = await prisma.user.findFirst({ + select: { + posts: { + where: { + published: false, + }, + orderBy: { + title: 'asc', + }, + select: { + title: true, + }, + }, + }, +}) +``` + +You can also write the same query using `include` as follows: + +```ts +const result = await prisma.user.findFirst({ + include: { + posts: { + where: { + published: false, + }, + orderBy: { + title: 'asc', + }, + }, + }, +}) +``` + +## Nested writes + +A nested write allows you to write **relational data** to your database in **a single transaction**. + +Nested writes: + +- Provide **transactional guarantees** for creating, updating or deleting data across multiple tables in a single Prisma Client query. If any part of the query fails (for example, creating a user succeeds but creating posts fails), Prisma Client rolls back all changes. +- Support any level of nesting supported by the data model. +- Are available for [relation fields](/orm/prisma-schema/data-model/relations#relation-fields) when using the model's create or update query. The following section shows the nested write options that are available per query. + +### Create a related record + +You can create a record and one or more related records at the same time. The following query creates a `User` record and two related `Post` records: + + + + +```ts highlight=5-10;normal +const result = await prisma.user.create({ + data: { + email: 'elsa@prisma.io', + name: 'Elsa Prisma', + //highlight-start + posts: { + create: [ + { title: 'How to make an omelette' }, + { title: 'How to eat an omelette' }, + ], + }, + //highlight-end + }, + include: { + posts: true, // Include all posts in the returned object + }, +}) +``` + + + + +```js no-copy +{ + id: 29, + name: 'Elsa', + email: 'elsa@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [], + posts: [ + { + id: 22, + title: 'How to make an omelette', + published: true, + authorId: 29, + comments: null, + views: 0, + likes: 0 + }, + { + id: 23, + title: 'How to eat an omelette', + published: true, + authorId: 29, + comments: null, + views: 0, + likes: 0 + } + ] +} +``` + + + + +### Create a single record and multiple related records + +There are two ways to create or update a single record and multiple related records - for example, a user with multiple posts: + +- Use a nested [`create`](/orm/reference/prisma-client-reference#create-1) query +- Use a nested [`createMany`](/orm/reference/prisma-client-reference#createmany-1) query + +In most cases, a nested `create` will be preferable unless the [`skipDuplicates` query option](/orm/reference/prisma-client-reference#nested-createmany-options) is required. Here's a quick table describing the differences between the two options: + +| Feature | `create` | `createMany` | Notes | +| :------------------------------------ | :------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Supports nesting additional relations | ✔ | ✘ \* | For example, you can create a user, several posts, and several comments per post in one query.
\* You can manually set a foreign key in a has-one relation - for example: `{ authorId: 9}` | +| Supports 1-n relations | ✔ | ✔ | For example, you can create a user and multiple posts (one user has many posts) | +| Supports m-n relations | ✔ | ✘ | For example, you can create a post and several categories (one post can have many categories, and one category can have many posts) | +| Supports skipping duplicate records | ✘ | ✔ | Use `skipDuplicates` query option. | + +#### Using nested `create` + +The following query uses nested [`create`](/orm/reference/prisma-client-reference#create-1) to create: + +- One user +- Two posts +- One post category + +The example also uses a nested `include` to include all posts and post categories in the returned data. + + + + +```ts highlight=5-17;normal +const result = await prisma.user.create({ + data: { + email: 'yvette@prisma.io', + name: 'Yvette', + //highlight-start + posts: { + create: [ + { + title: 'How to make an omelette', + categories: { + create: { + name: 'Easy cooking', + }, + }, + }, + { title: 'How to eat an omelette' }, + ], + }, + //highlight-end + }, + include: { + // Include posts + posts: { + include: { + categories: true, // Include post categories + }, + }, + }, +}) +``` + + + + +```js no-copy +{ + "id": 40, + "name": "Yvette", + "email": "yvette@prisma.io", + "profileViews": 0, + "role": "USER", + "coinflips": [], + "testing": [], + "city": null, + "country": "Sweden", + "posts": [ + { + "id": 66, + "title": "How to make an omelette", + "published": true, + "authorId": 40, + "comments": null, + "views": 0, + "likes": 0, + "categories": [ + { + "id": 3, + "name": "Easy cooking" + } + ] + }, + { + "id": 67, + "title": "How to eat an omelette", + "published": true, + "authorId": 40, + "comments": null, + "views": 0, + "likes": 0, + "categories": [] + } + ] +} +``` + + + + +Here's a visual representation of how a nested create operation can write to several tables in the database as once: + +![](/img/orm/nested-create.png) + +#### Using nested `createMany` + +The following query uses a nested [`createMany`](/orm/reference/prisma-client-reference#create-1) to create: + +- One user +- Two posts + +The example also uses a nested `include` to include all posts in the returned data. + + + + +```ts highlight=4-8;normal +const result = await prisma.user.create({ + data: { + email: 'saanvi@prisma.io', + //highlight-start + posts: { + createMany: { + data: [{ title: 'My first post' }, { title: 'My second post' }], + }, + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + + + + +```js no-copy +{ + "id": 43, + "name": null, + "email": "saanvi@prisma.io", + "profileViews": 0, + "role": "USER", + "coinflips": [], + "testing": [], + "city": null, + "country": "India", + "posts": [ + { + "id": 70, + "title": "My first post", + "published": true, + "authorId": 43, + "comments": null, + "views": 0, + "likes": 0 + }, + { + "id": 71, + "title": "My second post", + "published": true, + "authorId": 43, + "comments": null, + "views": 0, + "likes": 0 + } + ] +} +``` + + + + +Note that it is **not possible** to nest an additional `create` or `createMany` inside the highlighted query, which means that you cannot create a user, posts, and post categories at the same time. + +As a workaround, you can send a query to create the records that will be connected first, and then create the actual records. For example: + +```ts +const categories = await prisma.category.createManyAndReturn({ + data: [ + { name: 'Fun', }, + { name: 'Technology', }, + { name: 'Sports', } + ], + select: { + id: true + } +}); + +const posts = await prisma.post.createManyAndReturn({ + data: [{ + title: "Funniest moments in 2024", + categoryId: categories[0].id + }, { + title: "Linux or macOS — what's better?", + categoryId: categories[1].id + }, + { + title: "Who will win the next soccer championship?", + categoryId: categories[2].id + }] +}); +``` + +If you want to create _all_ records in a single database query, consider using a [`$transaction`](/orm/prisma-client/queries/transactions#the-transaction-api) or [type-safe, raw SQL](/orm/prisma-client/using-raw-sql/typedsql). + + +### Create multiple records and multiple related records + +You cannot access relations in a `createMany()` or `createManyAndReturn()` query, which means that you cannot create multiple users and multiple posts in a single nested write. The following is **not** possible: + +```ts highlight=6-8,13-15;delete +const createMany = await prisma.user.createMany({ + data: [ + { + name: 'Yewande', + email: 'yewande@prisma.io', + //delete-start + posts: { + // Not possible to create posts! + }, + //delete-end + }, + { + name: 'Noor', + email: 'noor@prisma.io', + //delete-start + posts: { + // Not possible to create posts! + }, + //delete-end + }, + ], +}) +``` + +### Connect multiple records + +The following query creates ([`create`](/orm/reference/prisma-client-reference#create) ) a new `User` record and connects that record ([`connect`](/orm/reference/prisma-client-reference#connect) ) to three existing posts: + + + + +```ts highlight=4-6;normal +const result = await prisma.user.create({ + data: { + email: 'vlad@prisma.io', + //highlight-start + posts: { + connect: [{ id: 8 }, { id: 9 }, { id: 10 }], + }, + //highlight-end + }, + include: { + posts: true, // Include all posts in the returned object + }, +}) +``` + + + + +```js no-copy +{ + id: 27, + name: null, + email: 'vlad@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [], + posts: [ + { + id: 10, + title: 'An existing post', + published: true, + authorId: 27, + comments: {}, + views: 0, + likes: 0 + } + ] +} +``` + + + + +> **Note**: Prisma Client throws an exception if any of the post records cannot be found: `connect: [{ id: 8 }, { id: 9 }, { id: 10 }]` + +### Connect a single record + +You can [`connect`](/orm/reference/prisma-client-reference#connect) an existing record to a new or existing user. The following query connects an existing post (`id: 11`) to an existing user (`id: 9`) + +```ts highlight=6-9;normal +const result = await prisma.user.update({ + where: { + id: 9, + }, + data: { + //highlight-start + posts: { + connect: { + id: 11, + }, + //highlight-end + }, + }, + include: { + posts: true, + }, +}) +``` + +### Connect _or_ create a record + +If a related record may or may not already exist, use [`connectOrCreate`](/orm/reference/prisma-client-reference#connectorcreate) to connect the related record: + +- Connect a `User` with the email address `viola@prisma.io` _or_ +- Create a new `User` with the email address `viola@prisma.io` if the user does not already exist + + + + +```ts highlight=4-14;normal +const result = await prisma.post.create({ + data: { + title: 'How to make croissants', + //highlight-start + author: { + connectOrCreate: { + where: { + email: 'viola@prisma.io', + }, + create: { + email: 'viola@prisma.io', + name: 'Viola', + }, + }, + }, + //highlight-end + }, + include: { + author: true, + }, +}) +``` + + + + +```js no-copy +{ + id: 26, + title: 'How to make croissants', + published: true, + authorId: 43, + views: 0, + likes: 0, + author: { + id: 43, + name: 'Viola', + email: 'viola@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [] + } +} +``` + + + + +### Disconnect a related record + +To `disconnect` one out of a list of records (for example, a specific blog post) provide the ID or unique identifier of the record(s) to disconnect: + + + + +```ts highlight=6-8;normal +const result = await prisma.user.update({ + where: { + id: 16, + }, + data: { + //highlight-start + posts: { + disconnect: [{ id: 12 }, { id: 19 }], + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + + + + +```js no-copy +{ + id: 16, + name: null, + email: 'orla@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [], + posts: [] +} +``` + + + + +To `disconnect` _one_ record (for example, a post's author), use `disconnect: true`: + + + + +```ts highlight=6-8;normal +const result = await prisma.post.update({ + where: { + id: 23, + }, + data: { + //highlight-start + author: { + disconnect: true, + }, + //highlight-end + }, + include: { + author: true, + }, +}) +``` + + + + +```js no-copy +{ + id: 23, + title: 'How to eat an omelette', + published: true, + authorId: null, + comments: null, + views: 0, + likes: 0, + author: null +} +``` + + + + +### Disconnect all related records + +To [`disconnect`](/orm/reference/prisma-client-reference#disconnect) _all_ related records in a one-to-many relation (a user has many posts), `set` the relation to an empty list as shown: + + + + +```ts highlight=6-8;normal +const result = await prisma.user.update({ + where: { + id: 16, + }, + data: { + //highlight-start + posts: { + set: [], + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + + + + +```js no-copy +{ + id: 16, + name: null, + email: 'orla@prisma.io', + profileViews: 0, + role: 'USER', + coinflips: [], + posts: [] +} +``` + + + + +### Delete all related records + +Delete all related `Post` records: + +```ts highlight=6-8;normal +const result = await prisma.user.update({ + where: { + id: 11, + }, + data: { + //highlight-start + posts: { + deleteMany: {}, + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + +### Delete specific related records + +Update a user by deleting all unpublished posts: + +```ts highlight=6-10;normal +const result = await prisma.user.update({ + where: { + id: 11, + }, + data: { + //highlight-start + posts: { + deleteMany: { + published: false, + }, + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + +Update a user by deleting specific posts: + +```ts highlight=6-8;normal +const result = await prisma.user.update({ + where: { + id: 6, + }, + data: { + //highlight-start + posts: { + deleteMany: [{ id: 7 }], + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + +### Update all related records (or filter) + +You can use a nested `updateMany` to update _all_ related records for a particular user. The following query unpublishes all posts for a specific user: + +```ts highlight=6-15;normal +const result = await prisma.user.update({ + where: { + id: 6, + }, + data: { + //highlight-start + posts: { + updateMany: { + where: { + published: true, + }, + data: { + published: false, + }, + }, + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + +### Update a specific related record + +```ts highlight=6-15;normal +const result = await prisma.user.update({ + where: { + id: 6, + }, + data: { + //highlight-start + posts: { + update: { + where: { + id: 9, + }, + data: { + title: 'My updated title', + }, + }, + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + +### Update _or_ create a related record + +The following query uses a nested `upsert` to update `"bob@prisma.io"` if that user exists, or create the user if they do not exist: + +```ts highlight=6-17;normal +const result = await prisma.post.update({ + where: { + id: 6, + }, + data: { + //highlight-start + author: { + upsert: { + create: { + email: 'bob@prisma.io', + name: 'Bob the New User', + }, + update: { + email: 'bob@prisma.io', + name: 'Bob the existing user', + }, + }, + }, + //highlight-end + }, + include: { + author: true, + }, +}) +``` + +### Add new related records to an existing record + +You can nest `create` or `createMany` inside an `update` to add new related records to an existing record. The following query adds two posts to a user with an `id` of 9: + +```ts highlight=6-10;normal +const result = await prisma.user.update({ + where: { + id: 9, + }, + data: { + //highlight-start + posts: { + createMany: { + data: [{ title: 'My first post' }, { title: 'My second post' }], + }, + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + +## Relation filters + +### Filter on "-to-many" relations + +Prisma Client provides the [`some`](/orm/reference/prisma-client-reference#some), [`every`](/orm/reference/prisma-client-reference#every), and [`none`](/orm/reference/prisma-client-reference#none) options to filter records by the properties of related records on the "-to-many" side of the relation. For example, filtering users based on properties of their posts. + +For example: + +| Requirement | Query option to use | +| --------------------------------------------------------------------------------- | ----------------------------------- | +| "I want a list of every `User` that has _at least one_ unpublished `Post` record" | `some` posts are unpublished | +| "I want a list of every `User` that has _no_ unpublished `Post` records" | `none` of the posts are unpublished | +| "I want a list of every `User` that has _only_ unpublished `Post` records" | `every` post is unpublished | + +For example, the following query returns `User` that meet the following criteria: + +- No posts with more than 100 views +- All posts have less than, or equal to 50 likes + +```ts highlight=3-14;normal +const users = await prisma.user.findMany({ + where: { + //highlight-start + posts: { + none: { + views: { + gt: 100, + }, + }, + every: { + likes: { + lte: 50, + }, + }, + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + +### Filter on "-to-one" relations + +Prisma Client provides the [`is`](/orm/reference/prisma-client-reference#is) and [`isNot`](/orm/reference/prisma-client-reference#isnot) options to filter records by the properties of related records on the "-to-one" side of the relation. For example, filtering posts based on properties of their author. + +For example, the following query returns `Post` records that meet the following criteria: + +- Author's name is not Bob +- Author is older than 40 + +```ts highlight=3-13;normal +const users = await prisma.post.findMany({ + where: { + //highlight-start + author: { + isNot: { + name: 'Bob', + }, + is: { + age: { + gt: 40, + }, + }, + }, + }, + //highlight-end + include: { + author: true, + }, +}) +``` + +### Filter on absence of "-to-many" records + +For example, the following query uses `none` to return all users that have zero posts: + +```ts highlight=3-5;normal +const usersWithZeroPosts = await prisma.user.findMany({ + where: { + //highlight-start + posts: { + none: {}, + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + +### Filter on absence of "-to-one" relations + +The following query returns all posts that don't have an author relation: + +```js highlight=3;normal +const postsWithNoAuthor = await prisma.post.findMany({ + where: { + //highlight-next-line + author: null, // or author: { } + }, + include: { + author: true, + }, +}) +``` + +### Filter on presence of related records + +The following query returns all users with at least one post: + +```ts highlight=3-5;normal +const usersWithSomePosts = await prisma.user.findMany({ + where: { + //highlight-start + posts: { + some: {}, + }, + //highlight-end + }, + include: { + posts: true, + }, +}) +``` + +## Fluent API + +The fluent API lets you _fluently_ traverse the [relations](/orm/prisma-schema/data-model/relations) of your models via function calls. Note that the _last_ function call determines the return type of the entire query (the respective type annotations are added in the code snippets below to make that explicit). + +This query returns all `Post` records by a specific `User`: + +```ts +const postsByUser: Post[] = await prisma.user + .findUnique({ where: { email: 'alice@prisma.io' } }) + .posts() +``` + +This is equivalent to the following `findMany` query: + +```ts +const postsByUser = await prisma.post.findMany({ + where: { + author: { + email: 'alice@prisma.io', + }, + }, +}) +``` + +The main difference between the queries is that the fluent API call is translated into two separate database queries while the other one only generates a single query (see this [GitHub issue](https://github.com/prisma/prisma/issues/1984)) + +> **Note**: You can use the fact that `.findUnique({ where: { email: 'alice@prisma.io' } }).posts()` queries are automatically batched by the Prisma dataloader in Prisma Client to [avoid the n+1 problem in GraphQL resolvers](/orm/prisma-client/queries/query-optimization-performance#solving-n1-in-graphql-with-findunique-and-prisma-clients-dataloader). + +This request returns all categories by a specific post: + +```ts +const categoriesOfPost: Category[] = await prisma.post + .findUnique({ where: { id: 1 } }) + .categories() +``` + +Note that you can chain as many queries as you like. In this example, the chaining starts at `Profile` and goes over `User` to `Post`: + +```ts +const posts: Post[] = await prisma.profile + .findUnique({ where: { id: 1 } }) + .user() + .posts() +``` + +The only requirement for chaining is that the previous function call must return only a _single object_ (e.g. as returned by a `findUnique` query or a "to-one relation" like `profile.user()`). + +The following query is **not possible** because `findMany` does not return a single object but a _list_: + +```ts +// This query is illegal +const posts = await prisma.user.findMany().posts() +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/050-filtering-and-sorting.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/050-filtering-and-sorting.mdx new file mode 100644 index 0000000000..3c874a5caa --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/050-filtering-and-sorting.mdx @@ -0,0 +1,470 @@ +--- +title: 'Filtering and Sorting' +metaTitle: 'Filtering and Sorting (Concepts)' +metaDescription: 'Use Prisma Client API to filter records by any combination of fields or related record fields, and/or sort query results.' +tocDepth: 3 +--- + +Prisma Client supports [filtering](#filtering) with the `where` query option, and [sorting](#sorting) with the `orderBy` query option. + +## Filtering + +Prisma Client allows you to filter records on any combination of model fields, [including related models](#filter-on-relations), and supports a variety of [filter conditions](#filter-conditions-and-operators). + + + +Some filter conditions use the SQL operators `LIKE` and `ILIKE` which may cause unexpected behavior in your queries. Please refer to [our filtering FAQs](#filtering-faqs) for more information. + + + +The following query: + +- Returns all `User` records with: + - an email address that ends with `prisma.io` _and_ + - at least one published post (a relation query) +- Returns all `User` fields +- Includes all related `Post` records where `published` equals `true` + + + + +```ts +const result = await prisma.user.findMany({ + where: { + email: { + endsWith: 'prisma.io', + }, + posts: { + some: { + published: true, + }, + }, + }, + include: { + posts: { + where: { + published: true, + }, + }, + }, +}) +``` + + + + +```json5 no-copy +[ + { + id: 1, + name: 'Ellen', + email: 'ellen@prisma.io', + role: 'USER', + posts: [ + { + id: 1, + title: 'How to build a house', + published: true, + authorId: 1, + }, + { + id: 2, + title: 'How to cook kohlrabi', + published: true, + authorId: 1, + }, + ], + }, +] +``` + + + + +### Filter conditions and operators + +Refer to Prisma Client's reference documentation for [a full list of operators](/orm/reference/prisma-client-reference#filter-conditions-and-operators) , such as `startsWith` and `contains`. + +#### Combining operators + +You can use operators (such as [`NOT`](/orm/reference/prisma-client-reference#not-1) and [`OR`](/orm/reference/prisma-client-reference#or) ) to filter by a combination of conditions. The following query returns all users with an `email` that ends in `"prisma.io"` or `"gmail.com"`, but not `"hotmail.com"`: + + + + +```ts +const result = await prisma.user.findMany({ + where: { + OR: [ + { + email: { + endsWith: 'prisma.io', + }, + }, + { email: { endsWith: 'gmail.com' } }, + ], + NOT: { + email: { + endsWith: 'hotmail.com', + }, + }, + }, + select: { + email: true, + }, +}) +``` + + + + +```json5 no-copy +[{ email: 'yewande@prisma.io' }, { email: `raheem@gmail.com` }] +``` + + + + +### Filter on null fields + +The following query returns all posts whose `content` field is `null`: + +```ts +const posts = await prisma.post.findMany({ + where: { + content: null, + }, +}) +``` + +### Filter for non-null fields + +The following query returns all posts whose `content` field is **not** `null`: + +```ts +const posts = await prisma.post.findMany({ + where: { + content: { not: null }, + }, +}) +``` + +### Filter on relations + +Prisma Client supports [filtering on related records](/orm/prisma-client/queries/relation-queries#relation-filters). For example, in the following schema, a user can have many blog posts: + +```prisma highlight=5,12-13;normal +model User { + id Int @id @default(autoincrement()) + name String? + email String @unique + //highlight-next-line + posts Post[] // User can have many posts +} + +model Post { + id Int @id @default(autoincrement()) + title String + published Boolean @default(true) + //highlight-start + author User @relation(fields: [authorId], references: [id]) + authorId Int + //highlight-end +} +``` + +The one-to-many relation between `User` and `Post` allows you to query users based on their posts - for example, the following query returns all users where _at least one_ post (`some`) has more than 10 views: + +```ts +const result = await prisma.user.findMany({ + where: { + posts: { + some: { + views: { + gt: 10, + }, + }, + }, + }, +}) +``` + +You can also query posts based on the properties of the author. For example, the following query returns all posts where the author's `email` contains `"prisma.io"`: + +```ts +const res = await prisma.post.findMany({ + where: { + author: { + email: { + contains: 'prisma.io', + }, + }, + }, +}) +``` + +### Filter on scalar lists / arrays + +Scalar lists (for example, `String[]`) have a special set of [filter conditions](/orm/reference/prisma-client-reference#scalar-list-filters) - for example, the following query returns all posts where the `tags` array contains `databases`: + +```ts +const posts = await client.post.findMany({ + where: { + tags: { + has: 'databases', + }, + }, +}) +``` + +### Case-insensitive filtering + +Case-insensitive filtering [is available as a feature for the PostgreSQL and MongoDB providers](/orm/prisma-client/queries/case-sensitivity#options-for-case-insensitive-filtering). MySQL, MariaDB and Microsoft SQL Server are case-insensitive by default, and do not require a Prisma Client feature to make case-insensitive filtering possible. + +To use case-insensitive filtering, add the `mode` property to a particular filter and specify `insensitive`: + +```ts highlight=5;normal +const users = await prisma.user.findMany({ + where: { + email: { + endsWith: 'prisma.io', + mode: 'insensitive', // Default value: default + }, + name: { + equals: 'Archibald', // Default mode + }, + }, +}) +``` + +See also: [Case sensitivity](/orm/prisma-client/queries/case-sensitivity) + +### Filtering FAQs + +#### How does filtering work at the database level? + +For MySQL and PostgreSQL, Prisma Client utilizes the [`LIKE`](https://www.w3schools.com/sql/sql_like.asp) (and [`ILIKE`](https://www.postgresql.org/docs/current/functions-matching.html#FUNCTIONS-LIKE)) operator to search for a given pattern. The operators have built-in pattern matching using symbols unique to `LIKE`. The pattern-matching symbols include `%` for zero or more characters (similar to `*` in other regex implementations) and `_` for one character (similar to `.`) + +To match the literal characters, `%` or `_`, make sure you escape those characters. For example: + + +```ts +const users = await prisma.user.findMany({ + where: { + name: { + startsWith: '_benny', + }, + }, +}) +``` + + +The above query will match any user whose name starts with a character followed by `benny` such as `7benny` or `&benny`. If you instead wanted to find any user whose name starts with the literal string `_benny`, you could do: + + +```ts highlight=4 +const users = await prisma.user.findMany({ + where: { + name: { + startsWith: '\\_benny', // note that the `_` character is escaped, preceding `\` with `\` when included in a string + }, + }, +}) +``` + + +## Sorting + +Use [`orderBy`](/orm/reference/prisma-client-reference#orderby) to sort a list of records or a nested list of records by a particular field or set of fields. For example, the following query returns all `User` records sorted by `role` and `name`, **and** each user's posts sorted by `title`: + + + + + +```ts +const usersWithPosts = await prisma.user.findMany({ + orderBy: [ + { + role: 'desc', + }, + { + name: 'desc', + }, + ], + include: { + posts: { + orderBy: { + title: 'desc', + }, + select: { + title: true, + }, + }, + }, +}) +``` + + + + + +```json no-copy +[ + { + "email": "kwame@prisma.io", + "id": 2, + "name": "Kwame", + "role": "USER", + "posts": [ + { + "title": "Prisma in five minutes" + }, + { + "title": "Happy Table Friends: Relations in Prisma" + } + ] + }, + { + "email": "emily@prisma.io", + "id": 5, + "name": "Emily", + "role": "USER", + "posts": [ + { + "title": "Prisma Day 2020" + }, + { + "title": "My first day at Prisma" + }, + { + "title": "All about databases" + } + ] + } +] +``` + + + + + +> **Note**: You can also [sort lists of nested records](/orm/prisma-client/queries/relation-queries#filter-a-list-of-relations) +> to retrieve a single record by ID. + +### Sort by relation + +You can also sort by properties of a relation. For example, the following query sorts all posts by the author's email address: + +```ts +const posts = await prisma.post.findMany({ + orderBy: { + author: { + email: 'asc', + }, + }, +}) +``` + +### Sort by relation aggregate value + +In [2.19.0](https://github.com/prisma/prisma/releases/2.19.0) and later, you can sort by the **count of related records**. + +For example, the following query sorts users by the number of related posts: + +```ts +const getActiveUsers = await prisma.user.findMany({ + take: 10, + orderBy: { + posts: { + _count: 'desc', + }, + }, +}) +``` + +> **Note**: It is not currently possible to [return the count of a relation](https://github.com/prisma/prisma/issues/5079). + +### Sort by relevance (PostgreSQL and MySQL) + +In [3.5.0+](https://github.com/prisma/prisma/releases/3.5.0) for PostgreSQL and [3.8.0+](https://github.com/prisma/prisma/releases/3.8.0) for MySQL, you can sort records by relevance to the query using the `_relevance` keyword. This uses the relevance ranking functions from full text search features. + +This feature is further explain in [the PostgreSQL documentation](https://www.postgresql.org/docs/12/textsearch-controls.html) and [the MySQL documentation](https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html). + +**For PostgreSQL**, you need to enable order by relevance with the `fullTextSearchPostgres` [preview feature](/orm/prisma-client/queries/full-text-search): + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["fullTextSearchPostgres"] +} +``` + +Ordering by relevance can be used either separately from or together with the `search` filter: `_relevance` is used to order the list, while `search` filters the unordered list. + +For example, the following query uses `_relevance` to filter by the term `developer` in the `bio` field, and then sorts the result by relevance in a _descending_ manner: + +```ts +const getUsersByRelevance = await prisma.user.findMany({ + take: 10, + orderBy: { + _relevance: { + fields: ['bio'], + search: 'developer', + sort: 'desc', + }, + }, +}) +``` + +
+ +:::note + +Prior to Prisma ORM 5.16.0, enabling the `fullTextSearch` preview feature would rename the `OrderByWithRelationInput` TypeScript types to `OrderByWithRelationAndSearchRelevanceInput`. If you are using the Preview feature, you will need to update your type imports. + +::: + + +### Sort with null records first or last + +:::info + +Notes: + +- This feature is generally available in version `4.16.0` and later. To use this feature in versions [`4.1.0`](https://github.com/prisma/prisma/releases/tag/4.1.0) to [`4.15.0`](https://github.com/prisma/prisma/releases/tag/4.15.0) the [Preview feature](/orm/reference/preview-features/client-preview-features#enabling-a-prisma-client-preview-feature) `orderByNulls` will need to be enabled. +- This feature is not available for MongoDB. +- You can only sort by nulls on optional [scalar](/orm/prisma-schema/data-model/models#scalar-fields) fields. If you try to sort by nulls on a required or [relation](/orm/prisma-schema/data-model/models#relation-fields) field, Prisma Client throws a [P2009 error](/orm/reference/error-reference#p2009). + +::: + +You can sort the results so that records with `null` fields appear either first or last. + +If `name` is an optional field, then the following query using `last` sorts users by `name`, with `null` records at the end: + +```ts +const users = await prisma.user.findMany({ + orderBy: { + // highlight-next-line + updatedAt: { sort: 'asc', nulls: 'last' }, + }, +}) +``` + +If you want the records with `null` values to appear at the beginning of the returned array, use `first`: + +```ts +const users = await prisma.user.findMany({ + orderBy: { + // highlight-next-line + updatedAt: { sort: 'asc', nulls: 'first' }, + }, +}) +``` + +Note that `first` also is the default value, so if you omit the `null` option, `null` values will appear first in the returned array. + +### Sorting FAQs + +#### Can I perform case-insensitive sorting? + +Follow [issue #841 on GitHub](https://github.com/prisma/prisma-client-js/issues/841). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/055-pagination.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/055-pagination.mdx new file mode 100644 index 0000000000..751317c496 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/055-pagination.mdx @@ -0,0 +1,230 @@ +--- +title: 'Pagination' +metaTitle: 'Pagination (Reference)' +metaDescription: 'Prisma Client supports both offset pagination and cursor-based pagination. Learn more about the pros and cons of different pagination approaches and how to implement them.' +--- + + + +Prisma Client supports both offset pagination and cursor-based pagination. + + + +## Offset pagination + +Offset pagination uses `skip` and `take` to skip a certain number of results and select a limited range. The following query skips the first 3 `Post` records and returns records 4 - 7: + +```ts line-number +const results = await prisma.post.findMany({ + skip: 3, + take: 4, +}) +``` + +![](/img/orm/offset-skip-take.png) + +To implement pages of results, you would just `skip` the number of pages multiplied by the number of results you show per page. + +### ✔ Pros of offset pagination + +- You can jump to any page immediately. For example, you can `skip` 200 records and `take` 10, which simulates jumping straight to page 21 of the result set (the underlying SQL uses `OFFSET`). This is not possible with cursor-based pagination. +- You can paginate the same result set in any sort order. For example, you can jump to page 21 of a list of `User` records sorted by first name. This is not possible with cursor-based pagination, which requires sorting by a unique, sequential column. + +### ✘ Cons of offset pagination + +- Offset pagination **does not scale** at a database level. For example, if you skip 200,000 records and take the first 10, the database still has to traverse the first 200,000 records before returning the 10 that you asked for - this negatively affects performance. + +### Use cases for offset pagination + +- Shallow pagination of a small result set. For example, a blog interface that allows you to filter `Post` records by author and paginate the results. + +### Example: Filtering and offset pagination + +The following query returns all records where the `email` field contains `prisma.io`. The query skips the first 40 records and returns records 41 - 50. + +```ts line-number +const results = await prisma.post.findMany({ + skip: 40, + take: 10, + where: { + email: { + contains: 'prisma.io', + }, + }, +}) +``` + +### Example: Sorting and offset pagination + +The following query returns all records where the `email` field contains `Prisma`, and sorts the result by the `title` field. The query skips the first 200 records and returns records 201 - 220. + +```ts line-number +const results = await prisma.post.findMany({ + skip: 200, + take: 20, + where: { + email: { + contains: 'Prisma', + }, + }, + orderBy: { + title: 'desc', + }, +}) +``` + +## Cursor-based pagination + +Cursor-based pagination uses `cursor` and `take` to return a limited set of results before or after a given **cursor**. A cursor bookmarks your location in a result set and must be a unique, sequential column - such as an ID or a timestamp. + +The following example returns the first 4 `Post` records that contain the word `"Prisma"` and saves the ID of the last record as `myCursor`: + +> **Note**: Since this is the first query, there is no cursor to pass in. + +```ts showLineNumbers +const firstQueryResults = await prisma.post.findMany({ + take: 4, + where: { + title: { + contains: 'Prisma' /* Optional filter */, + }, + }, + orderBy: { + id: 'asc', + }, +}) + +// Bookmark your location in the result set - in this +// case, the ID of the last post in the list of 4. + +//highlight-start +const lastPostInResults = firstQueryResults[3] // Remember: zero-based index! :) +const myCursor = lastPostInResults.id // Example: 29 +//highlight-end +``` + +The following diagram shows the IDs of the first 4 results - or page 1. The cursor for the next query is **29**: + +![](/img/orm/cursor-1.png) + +The second query returns the first 4 `Post` records that contain the word `"Prisma"` **after the supplied cursor** (in other words - IDs that are larger than **29**): + +```ts line-number +const secondQueryResults = await prisma.post.findMany({ + take: 4, + skip: 1, // Skip the cursor + //highlight-start + cursor: { + id: myCursor, + }, + //highlight-end + where: { + title: { + contains: 'Prisma' /* Optional filter */, + }, + }, + orderBy: { + id: 'asc', + }, +}) + +const lastPostInResults = secondQueryResults[3] // Remember: zero-based index! :) +const myCursor = lastPostInResults.id // Example: 52 +``` + +The following diagram shows the first 4 `Post` records **after** the record with ID **29**. In this example, the new cursor is **52**: + +![](/img/orm/cursor-2.png) + +### FAQ + +#### Do I always have to skip: 1? + +If you do not `skip: 1`, your result set will include your previous cursor. The first query returns four results and the cursor is **29**: + +![](/img/orm/cursor-1.png) + +Without `skip: 1`, the second query returns 4 results after (and _including_) the cursor: + +![](/img/orm/cursor-3.png) + +If you `skip: 1`, the cursor is not included: + +![](/img/orm/cursor-2.png) + +You can choose to `skip: 1` or not depending on the pagination behavior that you want. + +#### Can I guess the value of the cursor? + +If you guess the value of the next cursor, you will page to an unknown location in your result set. Although IDs are sequential, you cannot predict the rate of increment (`2`, `20`, `32` is more likely than `1`, `2`, `3`, particularly in a filtered result set). + +#### Does cursor-based pagination use the concept of a cursor in the underlying database? + +No, cursor pagination does not use cursors in the underlying database ([e.g. PostgreSQL](https://www.postgresql.org/docs/9.2/plpgsql-cursors.html)). + +#### What happens if the cursor value does not exist? + +Using a nonexistent cursor returns `null`. Prisma Client does not try to locate adjacent values. + +### ✔ Pros of cursor-based pagination + +- Cursor-based pagination **scales**. The underlying SQL does not use `OFFSET`, but instead queries all `Post` records with an ID greater than the value of `cursor`. + +### ✘ Cons of cursor-based pagination + +- You must sort by your cursor, which has to be a unique, sequential column. +- You cannot jump to a specific page using only a cursor. For example, you cannot accurately predict which cursor represents the start of page 400 (page size 20) without first requesting pages 1 - 399. + +### Use cases for cursor-based pagination + +- Infinite scroll - for example, sort blog posts by date/time descending and request 10 blog posts at a time. +- Paging through an entire result set in batches - for example, as part of a long-running data export. + +### Example: Filtering and cursor-based pagination + +```ts line-number +const secondQuery = await prisma.post.findMany({ + take: 4, + cursor: { + id: myCursor, + }, + //highlight-start + where: { + title: { + contains: 'Prisma' /* Optional filter */, + }, + }, + //highlight-end + orderBy: { + id: 'asc', + }, +}) +``` + +### Sorting and cursor-based pagination + +Cursor-based pagination requires you to sort by a sequential, unique column such as an ID or a timestamp. This value - known as a cursor - bookmarks your place in the result set and allows you to request the next set. + +### Example: Paging backwards with cursor-based pagination + +To page backwards, set `take` to a negative value. The following query returns 4 `Post` records with an `id` of less than 200, excluding the cursor: + +```ts line-number +const myOldCursor = 200 + +const firstQueryResults = await prisma.post.findMany({ + take: -4, + skip: 1, + cursor: { + id: myOldCursor, + }, + where: { + title: { + contains: 'Prisma' /* Optional filter */, + }, + }, + orderBy: { + id: 'asc', + }, +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/056-aggregation-grouping-summarizing.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/056-aggregation-grouping-summarizing.mdx new file mode 100644 index 0000000000..c0695ef1ab --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/056-aggregation-grouping-summarizing.mdx @@ -0,0 +1,735 @@ +--- +title: 'Aggregation, grouping, and summarizing' +metaTitle: 'Aggregation, grouping, and summarizing (Concepts)' +metaDescription: 'Use Prisma Client to aggregate, group by, count, and select distinct.' +tocDepth: 4 +toc_max_heading_level: 4 +--- + + + +Prisma Client allows you to count records, aggregate number fields, and select distinct field values. + + + +## Aggregate + +Prisma Client allows you to [`aggregate`](/orm/reference/prisma-client-reference#aggregate) on the **number** fields (such as `Int` and `Float`) of a model. The following query returns the average age of all users: + +```ts +const aggregations = await prisma.user.aggregate({ + _avg: { + age: true, + }, +}) + +console.log('Average age:' + aggregations._avg.age) +``` + +You can combine aggregation with filtering and ordering. For example, the following query returns the average age of users: + +- Ordered by `age` ascending +- Where `email` contains `prisma.io` +- Limited to the 10 users + +```ts +const aggregations = await prisma.user.aggregate({ + _avg: { + age: true, + }, + where: { + email: { + contains: 'prisma.io', + }, + }, + orderBy: { + age: 'asc', + }, + take: 10, +}) + +console.log('Average age:' + aggregations._avg.age) +``` + +### Aggregate values are nullable + +In [2.21.0](https://github.com/prisma/prisma/releases/tag/2.21.0) and later, aggregations on **nullable fields** can return a `number` or `null`. This excludes `count`, which always returns 0 if no records are found. + +Consider the following query, where `age` is nullable in the schema: + + + + +```ts +const aggregations = await prisma.user.aggregate({ + _avg: { + age: true, + }, + _count: { + age: true, + }, +}) +``` + + + + +```js no-copy +{ + _avg: { + age: null + }, + _count: { + age: 9 + } +} +``` + + + + +The query returns `{ _avg: { age: null } }` in either of the following scenarios: + +- There are no users +- The value of every user's `age` field is `null` + +This allows you to differentiate between the true aggregate value (which could be zero) and no data. + +## Group by + +Prisma Client's [`groupBy()`](/orm/reference/prisma-client-reference#groupby) allows you to **group records** by one or more field values - such as `country`, or `country` and `city` and **perform aggregations** on each group, such as finding the average age of people living in a particular city. `groupBy()` is a GA in [2.20.0](https://github.com/prisma/prisma/releases/2.20.0) and later. + +The following video uses `groupBy()` to summarize total COVID-19 cases by continent: + +
+ + + +
+ +The following example groups all users by the `country` field and returns the total number of profile views for each country: + + + + +```ts +const groupUsers = await prisma.user.groupBy({ + by: ['country'], + _sum: { + profileViews: true, + }, +}) +``` + + + + +```js no-copy +;[ + { country: 'Germany', _sum: { profileViews: 126 } }, + { country: 'Sweden', _sum: { profileViews: 0 } }, +] +``` + + + + +If you have a single element in the `by` option, you can use the following shorthand syntax to express your query: + +```ts +const groupUsers = await prisma.user.groupBy({ + by: 'country', +}) +``` + +### `groupBy()` and filtering + +`groupBy()` supports two levels of filtering: `where` and `having`. + +#### Filter records with `where` + +Use `where` to filter all records **before grouping**. The following example groups users by country and sums profile views, but only includes users where the email address contains `prisma.io`: + +```ts highlight=3-7;normal +const groupUsers = await prisma.user.groupBy({ + by: ['country'], + //highlight-start + where: { + email: { + contains: 'prisma.io', + }, + }, + //highlight-end + _sum: { + profileViews: true, + }, +}) +``` + +#### Filter groups with `having` + +Use `having` to filter **entire groups** by an aggregate value such as the sum or average of a field, not individual records - for example, only return groups where the _average_ `profileViews` is greater than 100: + +```ts highlight=11-17;normal +const groupUsers = await prisma.user.groupBy({ + by: ['country'], + where: { + email: { + contains: 'prisma.io', + }, + }, + _sum: { + profileViews: true, + }, + //highlight-start + having: { + profileViews: { + _avg: { + gt: 100, + }, + }, + }, + //highlight-end +}) +``` + +##### Use case for `having` + +The primary use case for `having` is to filter on aggregations. We recommend that you use `where` to reduce the size of your data set as far as possible _before_ grouping, because doing so ✔ reduces the number of records the database has to return and ✔ makes use of indices. + +For example, the following query groups all users that are _not_ from Sweden or Ghana: + +```ts highlight=4-6;normal +const fd = await prisma.user.groupBy({ + by: ['country'], + where: { + //highlight-start + country: { + notIn: ['Sweden', 'Ghana'], + }, + //highlight-end + }, + _sum: { + profileViews: true, + }, + having: { + profileViews: { + _min: { + gte: 10, + }, + }, + }, +}) +``` + +The following query technically achieves the same result, but excludes users from Ghana _after_ grouping. This does not confer any benefit and is not recommended practice. + +```ts highlight=4-6,12-14;normal +const groupUsers = await prisma.user.groupBy({ + by: ['country'], + where: { + //highlight-start + country: { + not: 'Sweden', + }, + //highlight-end + }, + _sum: { + profileViews: true, + }, + having: { + //highlight-start + country: { + not: 'Ghana', + }, + //highlight-end + profileViews: { + _min: { + gte: 10, + }, + }, + }, +}) +``` + +> **Note**: Within `having`, you can only filter on aggregate values _or_ fields available in `by`. + +### `groupBy()` and ordering + +The following constraints apply when you combine `groupBy()` and `orderBy`: + +- You can `orderBy` fields that are present in `by` +- You can `orderBy` aggregate (Preview in 2.21.0 and later) +- If you use `skip` and/or `take` with `groupBy()`, you must also include `orderBy` in the query + +#### Order by aggregate group + +You can **order by aggregate group**. Prisma ORM added support for using `orderBy` with aggregated groups in relational databases in version [2.21.0](https://github.com/prisma/prisma/releases/2.21.0) and support for MongoDB in [3.4.0](https://github.com/prisma/prisma/releases/3.4.0). + +The following example sorts each `city` group by the number of users in that group (largest group first): + + + + +```ts +const groupBy = await prisma.user.groupBy({ + by: ['city'], + _count: { + city: true, + }, + orderBy: { + _count: { + city: 'desc', + }, + }, +}) +``` + + + + +```js no-copy +;[ + { city: 'Berlin', count: { city: 3 } }, + { city: 'Paris', count: { city: 2 } }, + { city: 'Amsterdam', count: { city: 1 } }, +] +``` + + + + +#### Order by field + +The following query orders groups by country, skips the first two groups, and returns the 3rd and 4th group: + +```ts +const groupBy = await prisma.user.groupBy({ + by: ['country'], + _sum: { + profileViews: true, + }, + orderBy: { + country: 'desc', + }, + skip: 2, + take: 2, +}) +``` + +### `groupBy()` FAQ + +#### Can I use `select` with `groupBy()`? + +You cannot use `select` with `groupBy()`. However, all fields included in `by` are automatically returned. + +#### What is the difference between using `where` and `having` with `groupBy()`? + +`where` filters all records before grouping, and `having` filters entire groups and supports filtering on an aggregate field value, such as the average or sum of a particular field in that group. + +#### What is the difference between `groupBy()` and `distinct`? + +Both `distinct` and `groupBy()` group records by one or more unique field values. `groupBy()` allows you to aggregate data within each group - for example, return the average number of views on posts from Denmark - whereas distinct does not. + +## Count + +### Count records + +Use [`count()`](/orm/reference/prisma-client-reference#count) to count the number of records or non-`null` field values. The following example query counts all users: + +```ts +const userCount = await prisma.user.count() +``` + +### Count relations + + + +This feature is generally available in version [3.0.1](https://github.com/prisma/prisma/releases/3.0.1) and later. To use this feature in versions before 3.0.1 the [Preview feature](/orm/reference/preview-features/client-preview-features#enabling-a-prisma-client-preview-feature) `selectRelationCount` will need to be enabled. + + + +To return a count of relations (for example, a user's post count), use the `_count` parameter with a nested `select` as shown: + + + + +```ts +const usersWithCount = await prisma.user.findMany({ + include: { + _count: { + select: { posts: true }, + }, + }, +}) +``` + + + + +```js no-copy +{ id: 1, _count: { posts: 3 } }, +{ id: 2, _count: { posts: 2 } }, +{ id: 3, _count: { posts: 2 } }, +{ id: 4, _count: { posts: 0 } }, +{ id: 5, _count: { posts: 0 } } +``` + + + + +The `_count` parameter: + +- Can be used inside a top-level `include` _or_ `select` +- Can be used with any query that returns records (including `delete`, `update`, and `findFirst`) +- Can return [multiple relation counts](#return-multiple-relation-counts) +- Can [filter relation counts](#filter-the-relation-count) (from version 4.3.0) + +#### Return a relations count with `include` + +The following query includes each user's post count in the results: + + + + +```ts +const usersWithCount = await prisma.user.findMany({ + include: { + _count: { + select: { posts: true }, + }, + }, +}) +``` + + + + +```js no-copy +{ id: 1, _count: { posts: 3 } }, +{ id: 2, _count: { posts: 2 } }, +{ id: 3, _count: { posts: 2 } }, +{ id: 4, _count: { posts: 0 } }, +{ id: 5, _count: { posts: 0 } } +``` + + + + +#### Return a relations count with `select` + +The following query uses `select` to return each user's post count _and no other fields_: + + + + +```ts +const usersWithCount = await prisma.user.findMany({ + select: { + _count: { + select: { posts: true }, + }, + }, +}) +``` + + + + +```js no-copy +{ + _count: { + posts: 3 + } +} +``` + + + + +#### Return multiple relation counts + +The following query returns a count of each user's `posts` and `recipes` and no other fields: + + + + +```ts +const usersWithCount = await prisma.user.findMany({ + select: { + _count: { + select: { + posts: true, + recipes: true, + }, + }, + }, +}) +``` + + + + +```js no-copy +{ + _count: { + posts: 3, + recipes: 9 + } +} +``` + + + + +#### Filter the relation count + + + +This feature is generally available in version `4.16.0` and later. To use this feature in versions [`4.3.0`](https://github.com/prisma/prisma/releases/tag/4.3.0) to [`4.15.0`](https://github.com/prisma/prisma/releases/tag/4.15.0) the [Preview feature](/orm/reference/preview-features/client-preview-features#enabling-a-prisma-client-preview-feature) `filteredRelationCount` will need to be enabled. + + + +Use `where` to filter the fields returned by the `_count` output type. You can do this on [scalar fields](/orm/prisma-schema/data-model/models#scalar-fields), [relation fields](/orm/prisma-schema/data-model/models#relation-fields) and fields of a [composite type](/orm/prisma-schema/data-model/models#defining-composite-types). + +For example, the following query returns all user posts with the title "Hello!": + +```ts +// Count all user posts with the title "Hello!" +await prisma.user.findMany({ + select: { + _count: { + select: { + posts: { where: { title: 'Hello!' } }, + }, + }, + }, +}) +``` + +The following query finds all user posts with comments from an author named "Alice": + +```ts +// Count all user posts that have comments +// whose author is named "Alice" +await prisma.user.findMany({ + select: { + _count: { + select: { + posts: { + where: { comments: { some: { author: { is: { name: 'Alice' } } } } }, + }, + }, + }, + }, +}) +``` + +### Count non-`null` field values + +In [2.15.0](https://github.com/prisma/prisma/releases/2.15.0) and later, you can count all records as well as all instances of non-`null` field values. The following query returns a count of: + +- All `User` records (`_all`) +- All non-`null` `name` values (not distinct values, just values that are not `null`) + + + + +```ts +const userCount = await prisma.user.count({ + select: { + _all: true, // Count all records + name: true, // Count all non-null field values + }, +}) +``` + + + + +```js no-copy +{ _all: 30, name: 10 } +``` + + + + +### Filtered count + +`count` supports filtering. The following example query counts all users with more than 100 profile views: + +```ts +const userCount = await prisma.user.count({ + where: { + profileViews: { + gte: 100, + }, + }, +}) +``` + +The following example query counts a particular user's posts: + +```ts +const postCount = await prisma.post.count({ + where: { + authorId: 29, + }, +}) +``` + +## Select distinct + +Prisma Client allows you to filter duplicate rows from a Prisma Query response to a [`findMany`](/orm/reference/prisma-client-reference#findmany) query using [`distinct`](/orm/reference/prisma-client-reference#distinct) . `distinct` is often used in combination with [`select`](/orm/reference/prisma-client-reference#select) to identify certain unique combinations of values in the rows of your table. + +The following example returns all fields for all `User` records with distinct `name` field values: + +```ts +const result = await prisma.user.findMany({ + where: {}, + distinct: ['name'], +}) +``` + +The following example returns distinct `role` field values (for example, `ADMIN` and `USER`): + + + + +```ts +const distinctRoles = await prisma.user.findMany({ + distinct: ['role'], + select: { + role: true, + }, +}) +``` + + + + +```js no-copy +;[ + { + role: 'USER', + }, + { + role: 'ADMIN', + }, +] +``` + + + + +### `distinct` under the hood + +Prisma Client's `distinct` option does not use SQL `SELECT DISTINCT`. Instead, `distinct` uses: + +- A `SELECT` query +- In-memory post-processing to select distinct + +It was designed in this way in order to **support `select` and `include`** as part of `distinct` queries. + +The following example selects distinct on `gameId` and `playerId`, ordered by `score`, in order to return **each player's highest score per game**. The query uses `include` and `select` to include additional data: + +- Select `score` (field on `Play`) +- Select related player name (relation between `Play` and `User`) +- Select related game name (relation between `Play` and `Game`) + +
+ +Expand for sample schema + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + play Play[] +} + +model Game { + id Int @id @default(autoincrement()) + name String? + play Play[] +} + +model Play { + id Int @id @default(autoincrement()) + score Int? @default(0) + playerId Int? + player User? @relation(fields: [playerId], references: [id]) + gameId Int? + game Game? @relation(fields: [gameId], references: [id]) +} +``` + +
+ + + + +```ts +const distinctScores = await prisma.play.findMany({ + distinct: ['playerId', 'gameId'], + orderBy: { + score: 'desc', + }, + select: { + score: true, + game: { + select: { + name: true, + }, + }, + player: { + select: { + name: true, + }, + }, + }, +}) +``` + + + + +```code no-copy +[ + { + score: 900, + game: { name: 'Pacman' }, + player: { name: 'Bert Bobberton' } + }, + { + score: 400, + game: { name: 'Pacman' }, + player: { name: 'Nellie Bobberton' } + } +] +``` + + + + +Without `select` and `distinct`, the query would return: + +``` +[ + { + gameId: 2, + playerId: 5 + }, + { + gameId: 2, + playerId: 10 + } +] +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/058-transactions.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/058-transactions.mdx new file mode 100644 index 0000000000..1faee26a55 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/058-transactions.mdx @@ -0,0 +1,1389 @@ +--- +title: 'Transactions and batch queries' +metaTitle: 'Transactions and batch queries (Reference)' +metaDescription: 'This page explains the transactions API of Prisma Client.' +tocDepth: 3 +--- + + + +A database transaction refers to a sequence of read/write operations that are _guaranteed_ to either succeed or fail as a whole. This section describes the ways in which the Prisma Client API supports transactions. + + + +## Transactions overview + + + +Before Prisma ORM version 4.4.0, you could not set isolation levels on transactions. The isolation level in your database configuration always applied. + + + +Developers take advantage of the safety guarantees provided by the database by wrapping the operations in a transaction. These guarantees are often summarized using the ACID acronym: + +- **Atomic**: Ensures that either _all_ or _none_ operations of the transactions succeed. The transaction is either _committed_ successfully or _aborted_ and _rolled back_. +- **Consistent**: Ensures that the states of the database before and after the transaction are _valid_ (i.e. any existing invariants about the data are maintained). +- **Isolated**: Ensures that concurrently running transactions have the same effect as if they were running in serial. +- **Durability**: Ensures that after the transaction succeeded, any writes are being stored persistently. + +While there's a lot of ambiguity and nuance to each of these properties (for example, consistency could actually be considered an _application-level responsibility_ rather than a database property or isolation is typically guaranteed in terms of stronger and weaker _isolation levels_), overall they serve as a good high-level guideline for expectations developers have when thinking about database transactions. + +> "Transactions are an abstraction layer that allows an application to pretend that certain concurrency problems and certain kinds of hardware and software faults don’t exist. A large class of errors is reduced down to a simple transaction abort, and the application just needs to try again." [Designing Data-Intensive Applications](https://dataintensive.net/), [Martin Kleppmann](https://bsky.app/profile/martin.kleppmann.com) + +Prisma Client supports six different ways of handling transactions for three different scenarios: + +| Scenario | Available techniques | +| :------------------ | :-------------------------------------------------------------------------------------------------------------- | +| Dependent writes |
  • Nested writes
| +| Independent writes |
  • `$transaction([])` API
  • Batch operations
| +| Read, modify, write |
  • Idempotent operations
  • Optimistic concurrency control
  • Interactive transactions
| + +The technique you choose depends on your particular use case. + +> **Note**: For the purposes of this guide, _writing_ to a database encompasses creating, updating, and deleting data. + +## About transactions in Prisma Client + +Prisma Client provides the following options for using transactions: + +- [Nested writes](#nested-writes): use the Prisma Client API to process multiple operations on one or more related records inside the same transaction. +- [Batch / bulk transactions](#batchbulk-operations): process one or more operations in bulk with `updateMany`, `deleteMany`, and `createMany`. +- The `$transaction` API in Prisma Client: + - [Sequential operations](#sequential-prisma-client-operations): pass an array of Prisma Client queries to be executed sequentially inside a transaction, using `$transaction(queries: PrismaPromise[]): Promise`. + - [Interactive transactions](#interactive-transactions): pass a function that can contain user code including Prisma Client queries, non-Prisma code and other control flow to be executed in a transaction, using `$transaction(fn: (prisma: PrismaClient) => R, options?: object): R` + +## Nested writes + +A [nested write](/orm/prisma-client/queries/relation-queries#nested-writes) lets you perform a single Prisma Client API call with multiple _operations_ that touch multiple [_related_](/orm/prisma-schema/data-model/relations) records. For example, creating a _user_ together with a _post_ or updating an _order_ together with an _invoice_. Prisma Client ensures that all operations succeed or fail as a whole. + +The following example demonstrates a nested write with `create`: + +```ts +// Create a new user with two posts in a +// single transaction +const newUser: User = await prisma.user.create({ + data: { + email: 'alice@prisma.io', + posts: { + create: [ + { title: 'Join the Prisma Discord at https://pris.ly/discord' }, + { title: 'Follow @prisma on Twitter' }, + ], + }, + }, +}) +``` + +The following example demonstrates a nested write with `update`: + +```ts +// Change the author of a post in a single transaction +const updatedPost: Post = await prisma.post.update({ + where: { id: 42 }, + data: { + author: { + connect: { email: 'alice@prisma.io' }, + }, + }, +}) +``` + +## Batch/bulk operations + +The following bulk operations run as transactions: + +- `deleteMany()` +- `updateMany()` +- `createMany()` +- `createManyAndReturn()` + +> Refer to the section about [bulk operations](#bulk-operations) for more examples. + +## The `$transaction` API + +The `$transaction` API can be used in two ways: + +- [Sequential operations](#sequential-prisma-client-operations): Pass an array of Prisma Client queries to be executed sequentially inside of a transaction. + + `$transaction(queries: PrismaPromise[]): Promise` + +- [Interactive transactions](#interactive-transactions): Pass a function that can contain user code including Prisma Client queries, non-Prisma code and other control flow to be executed in a transaction. + + `$transaction(fn: (prisma: PrismaClient) => R): R` + +### Sequential Prisma Client operations + +The following query returns all posts that match the provided filter as well as a count of all posts: + +```ts +const [posts, totalPosts] = await prisma.$transaction([ + prisma.post.findMany({ where: { title: { contains: 'prisma' } } }), + prisma.post.count(), +]) +``` + +You can also use raw queries inside of a `$transaction`: + + + + + +```ts +import { selectUserTitles, updateUserName } from '@prisma/client/sql' + +const [userList, updateUser] = await prisma.$transaction([ + prisma.$queryRawTyped(selectUserTitles()), + prisma.$queryRawTyped(updateUserName(2)), +]) +``` + + + + + +```ts +const [findRawData, aggregateRawData, commandRawData] = + await prisma.$transaction([ + prisma.user.findRaw({ + filter: { age: { $gt: 25 } }, + }), + prisma.user.aggregateRaw({ + pipeline: [ + { $match: { status: 'registered' } }, + { $group: { _id: '$country', total: { $sum: 1 } } }, + ], + }), + prisma.$runCommandRaw({ + aggregate: 'User', + pipeline: [ + { $match: { name: 'Bob' } }, + { $project: { email: true, _id: false } }, + ], + explain: false, + }), + ]) +``` + + + + + +Instead of immediately awaiting the result of each operation when it's performed, the operation itself is stored in a variable first which later is submitted to the database with a method called `$transaction`. Prisma Client will ensure that either all three `create` operations succeed or none of them succeed. + +> **Note**: Operations are executed according to the order they are placed in the transaction. Using a query in a transaction does not influence the order of operations in the query itself. +> +> Refer to the section about the [transactions API](#transaction-api) for more examples. + +From version 4.4.0, the sequential operations transaction API has a second parameter. You can use the following optional configuration option in this parameter: + +- `isolationLevel`: Sets the [transaction isolation level](#transaction-isolation-level). By default this is set to the value currently configured in your database. + +For example: + +```ts +await prisma.$transaction( + [ + prisma.resource.deleteMany({ where: { name: 'name' } }), + prisma.resource.createMany({ data }), + ], + { + isolationLevel: Prisma.TransactionIsolationLevel.Serializable, // optional, default defined by database configuration + } +) +``` + +### Interactive transactions + +#### Overview + +Sometimes you need more control over what queries execute within a transaction. Interactive transactions are meant to provide you with an escape hatch. + + + +Interactive transactions have been generally available from version 4.7.0. + +If you use interactive transactions in preview from version 2.29.0 to 4.6.1 (inclusive), you need to add the `interactiveTransactions` preview feature to the generator block of your Prisma schema. + + + +To use interactive transactions, you can pass an async function into [`$transaction`](#transaction-api). + +The first argument passed into this async function is an instance of Prisma Client. Below, we will call this instance `tx`. Any Prisma Client call invoked on this `tx` instance is encapsulated into the transaction. + + + +**Use interactive transactions with caution**. Keeping transactions open for a long time hurts database performance and can even cause deadlocks. Try to avoid performing network requests and executing slow queries inside your transaction functions. We recommend you get in and out as quick as possible! + + + +#### Example + +Let's look at an example: + +Imagine that you are building an online banking system. One of the actions to perform is to send money from one person to another. + +As experienced developers, we want to make sure that during the transfer, + +- the amount doesn't disappear +- the amount isn't doubled + +This is a great use-case for interactive transactions because we need to perform logic in-between the writes to check the balance. + +In the example below, Alice and Bob each have $100 in their account. If they try to send more money than they have, the transfer is rejected. + +Alice is expected to be able to make 1 transfer for $100 while the other transfer would be rejected. This would result in Alice having $0 and Bob having $200. + +```tsx +import { PrismaClient } from '@prisma/client' +const prisma = new PrismaClient() + +function transfer(from: string, to: string, amount: number) { + return prisma.$transaction(async (tx) => { + // 1. Decrement amount from the sender. + const sender = await tx.account.update({ + data: { + balance: { + decrement: amount, + }, + }, + where: { + email: from, + }, + }) + + // 2. Verify that the sender's balance didn't go below zero. + if (sender.balance < 0) { + throw new Error(`${from} doesn't have enough to send ${amount}`) + } + + // 3. Increment the recipient's balance by amount + const recipient = await tx.account.update({ + data: { + balance: { + increment: amount, + }, + }, + where: { + email: to, + }, + }) + + return recipient + }) +} + +async function main() { + // This transfer is successful + await transfer('alice@prisma.io', 'bob@prisma.io', 100) + // This transfer fails because Alice doesn't have enough funds in her account + await transfer('alice@prisma.io', 'bob@prisma.io', 100) +} + +main() +``` + +In the example above, both `update` queries run within a database transaction. When the application reaches the end of the function, the transaction is **committed** to the database. + +If your application encounters an error along the way, the async function will throw an exception and automatically **rollback** the transaction. + +To catch the exception, you can wrap `$transaction` in a try-catch block: + +```js +try { + await prisma.$transaction(async (tx) => { + // Code running in a transaction... + }) +} catch (err) { + // Handle the rollback... +} +``` + +#### Transaction options + +The transaction API has a second parameter. For interactive transactions, you can use the following optional configuration options in this parameter: + +- `maxWait`: The maximum amount of time Prisma Client will wait to acquire a transaction from the database. The default value is 2 seconds. +- `timeout`: The maximum amount of time the interactive transaction can run before being canceled and rolled back. The default value is 5 seconds. +- `isolationLevel`: Sets the [transaction isolation level](#transaction-isolation-level). By default this is set to the value currently configured in your database. + +For example: + +```ts +await prisma.$transaction( + async (tx) => { + // Code running in a transaction... + }, + { + maxWait: 5000, // default: 2000 + timeout: 10000, // default: 5000 + isolationLevel: Prisma.TransactionIsolationLevel.Serializable, // optional, default defined by database configuration + } +) +``` + +You can also set these globally on the constructor-level: + +```ts +const prisma = new PrismaClient({ + transactionOptions: { + isolationLevel: Prisma.TransactionIsolationLevel.Serializable, + maxWait: 5000, // default: 2000 + timeout: 10000, // default: 5000 + }, +}) +``` + +### Transaction isolation level + + + +This feature is not available on MongoDB, because MongoDB does not support isolation levels. + + + +You can set the transaction [isolation level](https://www.prisma.io/dataguide/intro/database-glossary#isolation-levels) for transactions. + + + +This is available in the following Prisma ORM versions for interactive transactions from version 4.2.0, for sequential operations from version 4.4.0. + +In versions before 4.2.0 (for interactive transactions), or 4.4.0 (for sequential operations), you cannot configure the transaction isolation level at a Prisma ORM level. Prisma ORM does not explicitly set the isolation level, so the [isolation level configured in your database](#database-specific-information-on-isolation-levels) is used. + + + +#### Set the isolation level + +To set the transaction isolation level, use the `isolationLevel` option in the second parameter of the API. + +For sequential operations: + +```ts +await prisma.$transaction( + [ + // Prisma Client operations running in a transaction... + ], + { + isolationLevel: Prisma.TransactionIsolationLevel.Serializable, // optional, default defined by database configuration + } +) +``` + +For an interactive transaction: + +```jsx +await prisma.$transaction( + async (prisma) => { + // Code running in a transaction... + }, + { + isolationLevel: Prisma.TransactionIsolationLevel.Serializable, // optional, default defined by database configuration + maxWait: 5000, // default: 2000 + timeout: 10000, // default: 5000 + } +) +``` + +#### Supported isolation levels + +Prisma Client supports the following isolation levels if they are available in the underlying database: + +- `ReadUncommitted` +- `ReadCommitted` +- `RepeatableRead` +- `Snapshot` +- `Serializable` + +The isolation levels available for each database connector are as follows: + +| Database | `ReadUncommitted` | `ReadCommitted` | `RepeatableRead` | `Snapshot` | `Serializable` | +| ----------- | ----------------- | --------------- | ---------------- | ---------- | -------------- | +| PostgreSQL | ✔️ | ✔️ | ✔️ | No | ✔️ | +| MySQL | ✔️ | ✔️ | ✔️ | No | ✔️ | +| SQL Server | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| CockroachDB | No | No | No | No | ✔️ | +| SQLite | No | No | No | No | ✔️ | + +By default, Prisma Client sets the isolation level to the value currently configured in your database. + +The isolation levels configured by default in each database are as follows: + +| Database | Default | +| ----------- | ---------------- | +| PostgreSQL | `ReadCommitted` | +| MySQL | `RepeatableRead` | +| SQL Server | `ReadCommitted` | +| CockroachDB | `Serializable` | +| SQLite | `Serializable` | + +#### Database-specific information on isolation levels + +See the following resources: + +- [Transaction isolation levels in PostgreSQL](https://www.postgresql.org/docs/9.3/runtime-config-client.html#GUC-DEFAULT-TRANSACTION-ISOLATION) +- [Transaction isolation levels in Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-ver15) +- [Transaction isolation levels in MySQL](https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html) + +CockroachDB and SQLite only support the `Serializable` isolation level. + +### Transaction timing issues + + + +- The solution in this section does not apply to MongoDB, because MongoDB does not support [isolation levels](https://www.prisma.io/dataguide/intro/database-glossary#isolation-levels). +- The timing issues discussed in this section do not apply to CockroachDB and SQLite, because these databases only support the highest `Serializable` isolation level. + + + +When two or more transactions run concurrently in certain [isolation levels](https://www.prisma.io/dataguide/intro/database-glossary#isolation-levels), timing issues can cause write conflicts or deadlocks, such as the violation of unique constraints. For example, consider the following sequence of events where Transaction A and Transaction B both attempt to execute a `deleteMany` and a `createMany` operation: + +1. Transaction B: `createMany` operation creates a new set of rows. +1. Transaction B: The application commits transaction B. +1. Transaction A: `createMany` operation. +1. Transaction A: The application commits transaction A. The new rows conflict with the rows that transaction B added at step 2. + +This conflict can occur at the isolation level `ReadCommited`, which is the default isolation level in PostgreSQL and Microsoft SQL Server. To avoid this problem, you can set a higher isolation level (`RepeatableRead` or `Serializable`). You can set the isolation level on a transaction. This overrides your database isolation level for that transaction. + +To avoid transaction write conflicts and deadlocks on a transaction: + +1. On your transaction, use the `isolationLevel` parameter to `Prisma.TransactionIsolationLevel.Serializable`. + + This ensures that your application commits multiple concurrent or parallel transactions as if they were run serially. When a transaction fails due to a write conflict or deadlock, Prisma Client returns a [P2034 error](/orm/reference/error-reference#p2034). + +2. In your application code, add a retry around your transaction to handle any P2034 errors, as shown in this example: + + ```ts + import { Prisma, PrismaClient } from '@prisma/client' + + const prisma = new PrismaClient() + async function main() { + const MAX_RETRIES = 5 + let retries = 0 + + let result + while (retries < MAX_RETRIES) { + try { + result = await prisma.$transaction( + [ + prisma.user.deleteMany({ + where: { + /** args */ + }, + }), + prisma.post.createMany({ + data: { + /** args */ + }, + }), + ], + { + isolationLevel: Prisma.TransactionIsolationLevel.Serializable, + } + ) + break + } catch (error) { + if (error.code === 'P2034') { + retries++ + continue + } + throw error + } + } + } + ``` + +### Using `$transaction` within `Promise.all()` + +If you wrap a `$transaction` inside a call to `Promise.all()`, the queries inside the transaction will be executed _serially_ (i.e. one after another): + +```ts +await prisma.$transaction(async (prisma) => { + await Promise.all([ + prisma.user.findMany(), + prisma.user.findMany(), + prisma.user.findMany(), + prisma.user.findMany(), + prisma.user.findMany(), + prisma.user.findMany(), + prisma.user.findMany(), + prisma.user.findMany(), + prisma.user.findMany(), + prisma.user.findMany(), + ]) +}) +``` + + This may be counterintuitive because `Promise.all()` usually _parallelizes_ the calls passed into it. + +The reason for this behaviour is that: +- One transaction means that all queries inside it have to be run on the same connection. +- A database connection can only ever execute one query at a time. +- As one query blocks the connection while it is doing its work, putting a transaction into `Promise.all` effectively means that queries should be ran one after another. + + + +## Dependent writes + +Writes are considered **dependent** on each other if: + +- Operations depend on the result of a preceding operation (for example, the database generating an ID) + +The most common scenario is creating a record and using the generated ID to create or update a related record. Examples include: + +- Creating a user and two related blog posts (a one-to-many relationship) - the author ID must be known before creating blog posts +- Creating a team and assigning members (a many-to-many relationship) - the team ID must be known before assigning members + +Dependent writes must succeed together in order to maintain data consistency and prevent unexpected behavior, such as blog post without an author or a team without members. + +### Nested writes + +Prisma Client's solution to dependent writes is the **nested writes** feature, which is supported by `create` and `update`. The following nested write creates one user and two blog posts: + +```ts +const nestedWrite = await prisma.user.create({ + data: { + email: 'imani@prisma.io', + posts: { + create: [ + { title: 'My first day at Prisma' }, + { title: 'How to configure a unique constraint in PostgreSQL' }, + ], + }, + }, +}) +``` + +If any operation fails, Prisma Client rolls back the entire transaction. Nested writes are not currently supported by top-level bulk operations like `client.user.deleteMany` and `client.user.updateMany`. + +#### When to use nested writes + +Consider using nested writes if: + +- ✔ You want to create two or more records related by ID at the same time (for example, create a blog post and a user) +- ✔ You want to update and create records related by ID at the same time (for example, change a user's name and create a new blog post) + +:::tip + +If you [pre-compute your IDs, you can choose between a nested write or using the `$transaction([])` API](#scenario-pre-computed-ids-and-the-transaction-api). + +::: + +#### Scenario: Sign-up flow + +Consider the Slack sign-up flow, which: + +1. Creates a team +2. Adds one user to that team, which automatically becomes that team's administrator + +This scenario can be represented by the following schema - note that users can belong to many teams, and teams can have many users (a many-to-many relationship): + +```prisma +model Team { + id Int @id @default(autoincrement()) + name String + members User[] // Many team members +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + teams Team[] // Many teams +} +``` + +The most straightforward approach is to create a team, then create and attach a user to that team: + +```ts +// Create a team +const team = await prisma.team.create({ + data: { + name: 'Aurora Adventures', + }, +}) + +// Create a user and assign them to the team +const user = await prisma.user.create({ + data: { + email: 'alice@prisma.io', + team: { + connect: { + id: team.id, + }, + }, + }, +}) +``` + +However, this code has a problem - consider the following scenario: + +1. Creating the team succeeds - "Aurora Adventures" is now taken +2. Creating and connecting the user fails - the team "Aurora Adventures" exists, but has no users +3. Going through the sign-up flow again and attempting to recreate "Aurora Adventures" fails - the team already exists + +Creating a team and adding a user should be one atomic operation that **succeeds or fails as a whole**. + +To implement atomic writes in a low-level database clients, you must wrap your inserts in `BEGIN`, `COMMIT` and `ROLLBACK` statements. Prisma Client solves the problem with [nested writes](/orm/prisma-client/queries/relation-queries#nested-writes). The following query creates a team, creates a user, and connects the records in a single transaction: + +```ts +const team = await prisma.team.create({ + data: { + name: 'Aurora Adventures', + members: { + create: { + email: 'alice@prisma.io', + }, + }, + }, +}) +``` + +Furthermore, if an error occurs at any point, Prisma Client rolls back the entire transaction. + +#### Nested writes FAQs + +##### Why can't I use the `$transaction([])` API to solve the same problem? + +The `$transaction([])` API does not allow you to pass IDs between distinct operations. In the following example, `createUserOperation.id` is not available yet: + +```ts highlight=12;delete +const createUserOperation = prisma.user.create({ + data: { + email: 'ebony@prisma.io', + }, +}) + +const createTeamOperation = prisma.team.create({ + data: { + name: 'Aurora Adventures', + members: { + connect: { + //delete-next-line + id: createUserOperation.id, // Not possible, ID not yet available + }, + }, + }, +}) + +await prisma.$transaction([createUserOperation, createTeamOperation]) +``` + +##### Nested writes support nested updates, but updates are not dependent writes - should I use the `$transaction([])` API? + +It is correct to say that because you know the ID of the team, you can update the team and its team members independently within a `$transaction([])`. The following example performs both operations in a `$transaction([])`: + +```ts +const updateTeam = prisma.team.update({ + where: { + id: 1, + }, + data: { + name: 'Aurora Adventures Ltd', + }, +}) + +const updateUsers = prisma.user.updateMany({ + where: { + teams: { + some: { + id: 1, + }, + }, + name: { + equals: null, + }, + }, + data: { + name: 'Unknown User', + }, +}) + +await prisma.$transaction([updateUsers, updateTeam]) +``` + +However, you can achieve the same result with a nested write: + +```ts +const updateTeam = await prisma.team.update({ + where: { + id: 1, + }, + data: { + name: 'Aurora Adventures Ltd', // Update team name + members: { + updateMany: { + // Update team members that do not have a name + data: { + name: 'Unknown User', + }, + where: { + name: { + equals: null, + }, + }, + }, + }, + }, +}) +``` + +##### Can I perform multiple nested writes - for example, create two new teams and assign users? + +Yes, but this is a combination of scenarios and techniques: + +- Creating a team and assigning users is a dependent write - use nested writes +- Creating all teams and users at the same time is an independent write because team/user combination #1 and team/user combination #2 are unrelated writes - use the `$transaction([])` API + +```ts +// Nested write +const createOne = prisma.team.create({ + data: { + name: 'Aurora Adventures', + members: { + create: { + email: 'alice@prisma.io', + }, + }, + }, +}) + +// Nested write +const createTwo = prisma.team.create({ + data: { + name: 'Cool Crew', + members: { + create: { + email: 'elsa@prisma.io', + }, + }, + }, +}) + +// $transaction([]) API +await prisma.$transaction([createTwo, createOne]) +``` + +## Independent writes + +Writes are considered **independent** if they do not rely on the result of a previous operation. The following groups of independent writes can occur in any order: + +- Updating the status field of a list of orders to "Dispatched" +- Marking a list of emails as "Read" + +> **Note**: Independent writes may have to occur in a specific order if constraints are present - for example, you must delete blog posts before the blog author if the post have a mandatory `authorId` field. However, they are still considered independent writes because no operations depend on the _result_ of a previous operation, such as the database returning a generated ID. + +Depending on your requirements, Prisma Client has four options for handling independent writes that should succeed or fail together. + +### Bulk operations + +Bulk writes allow you to write multiple records of the same type in a single transaction - if any operation fails, Prisma Client rolls back the entire transaction. Prisma Client currently supports: + +- `updateMany()` +- `deleteMany()` +- `createMany()` +- `createManyAndReturn()` + +#### When to use bulk operations + +Consider bulk operations as a solution if: + +- ✔ You want to update a batch of the _same type_ of record, like a batch of emails + +#### Scenario: Marking emails as read + +You are building a service like gmail.com, and your customer wants a **"Mark as read"** feature that allows users to mark all emails as read. Each update to the status of an email is an independent write because the emails do not depend on one another - for example, the "Happy Birthday! 🍰" email from your aunt is unrelated to the promotional email from IKEA. + +In the following schema, a `User` can have many received emails (a one-to-many relationship): + +```ts +model User { + id Int @id @default(autoincrement()) + email String @unique + receivedEmails Email[] // Many emails +} + +model Email { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int + subject String + body String + unread Boolean +} +``` + +Based on this schema, you can use `updateMany` to mark all unread emails as read: + +```ts +await prisma.email.updateMany({ + where: { + user: { + id: 10, + }, + unread: true, + }, + data: { + unread: false, + }, +}) +``` + +#### Can I use nested writes with bulk operations? + +No - neither `updateMany` nor `deleteMany` currently supports nested writes. For example, you cannot delete multiple teams and all of their members (a cascading delete): + +```ts highlight=8;delete +await prisma.team.deleteMany({ + where: { + id: { + in: [2, 99, 2, 11], + }, + }, + data: { + //delete-next-line + members: {}, // Cannot access members here + }, +}) +``` + +#### Can I use bulk operations with the `$transaction([])` API? + +Yes — for example, you can include multiple `deleteMany` operations inside a `$transaction([])`. + +### `$transaction([])` API + +The `$transaction([])` API is generic solution to independent writes that allows you to run multiple operations as a single, atomic operation - if any operation fails, Prisma Client rolls back the entire transaction. + +Its also worth noting that operations are executed according to the order they are placed in the transaction. + +```ts +await prisma.$transaction([iRunFirst, iRunSecond, iRunThird]) +``` + +> **Note**: Using a query in a transaction does not influence the order of operations in the query itself. + +As Prisma Client evolves, use cases for the `$transaction([])` API will increasingly be replaced by more specialized bulk operations (such as `createMany`) and nested writes. + +#### When to use the `$transaction([])` API + +Consider the `$transaction([])` API if: + +- ✔ You want to update a batch that includes different types of records, such as emails and users. The records do not need to be related in any way. +- ✔ You want to batch raw SQL queries (`$executeRaw`) - for example, for features that Prisma Client does not yet support. + +#### Scenario: Privacy legislation + +GDPR and other privacy legislation give users the right to request that an organization deletes all of their personal data. In the following example schema, a `User` can have many posts and private messages: + +```prisma +model User { + id Int @id @default(autoincrement()) + posts Post[] + privateMessages PrivateMessage[] +} + +model Post { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int + title String + content String +} + +model PrivateMessage { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int + message String +} +``` + +If a user invokes the right to be forgotten, we must delete three records: the user record, private messages, and posts. It is critical that _all_ delete operations succeed together or not at all, which makes this a use case for a transaction. However, using a single bulk operation like `deleteMany` is not possible in this scenario because we need to delete across three models. Instead, we can use the `$transaction([])` API to run three operations together - two `deleteMany` and one `delete`: + +```ts +const id = 9 // User to be deleted + +const deletePosts = prisma.post.deleteMany({ + where: { + userId: id, + }, +}) + +const deleteMessages = prisma.privateMessage.deleteMany({ + where: { + userId: id, + }, +}) + +const deleteUser = prisma.user.delete({ + where: { + id: id, + }, +}) + +await prisma.$transaction([deletePosts, deleteMessages, deleteUser]) // Operations succeed or fail together +``` + +#### Scenario: Pre-computed IDs and the `$transaction([])` API + +Dependent writes are not supported by the `$transaction([])` API - if operation A relies on the ID generated by operation B, use [nested writes](#nested-writes). However, if you _pre-computed_ IDs (for example, by generating GUIDs), your writes become independent. Consider the sign-up flow from the nested writes example: + +```ts +await prisma.team.create({ + data: { + name: 'Aurora Adventures', + members: { + create: { + email: 'alice@prisma.io', + }, + }, + }, +}) +``` + +Instead of auto-generating IDs, change the `id` fields of `Team` and `User` to a `String` (if you do not provide a value, a UUID is generated automatically). This example uses UUIDs: + +```prisma highlight=2,9;delete|3,10;add +model Team { + //delete-next-line + id Int @id @default(autoincrement()) + //add-next-line + id String @id @default(uuid()) + name String + members User[] +} + +model User { + //delete-next-line + id Int @id @default(autoincrement()) + //add-next-line + id String @id @default(uuid()) + email String @unique + teams Team[] +} +``` + +Refactor the sign-up flow example to use the `$transaction([])` API instead of nested writes: + +```ts +import { v4 } from 'uuid' + +const teamID = v4() +const userID = v4() + +await prisma.$transaction([ + prisma.user.create({ + data: { + id: userID, + email: 'alice@prisma.io', + team: { + id: teamID, + }, + }, + }), + prisma.team.create({ + data: { + id: teamID, + name: 'Aurora Adventures', + }, + }), +]) +``` + +Technically you can still use nested writes with pre-computed APIs if you prefer that syntax: + +```ts +import { v4 } from 'uuid' + +const teamID = v4() +const userID = v4() + +await prisma.team.create({ + data: { + id: teamID, + name: 'Aurora Adventures', + members: { + create: { + id: userID, + email: 'alice@prisma.io', + team: { + id: teamID, + }, + }, + }, + }, +}) +``` + +There's no compelling reason to switch to manually generated IDs and the `$transaction([])` API if you are already using auto-generated IDs and nested writes. + +## Read, modify, write + +In some cases you may need to perform custom logic as part of an atomic operation - also known as the [read-modify-write pattern](https://en.wikipedia.org/wiki/Read%E2%80%93modify%E2%80%93write). The following is an example of the read-modify-write pattern: + +- Read a value from the database +- Run some logic to manipulate that value (for example, contacting an external API) +- Write the value back to the database + +All operations should **succeed or fail together** without making unwanted changes to the database, but you do not necessarily need to use an actual database transaction. This section of the guide describes two ways to work with Prisma Client and the read-modify-write pattern: + +- Designing idempotent APIs +- Optimistic concurrency control + +### Idempotent APIs + +Idempotency is the ability to run the same logic with the same parameters multiple times with the same result: the **effect on the database** is the same whether you run the logic once or one thousand times. For example: + +- **NOT IDEMPOTENT**: Upsert (update-or-insert) a user in the database with email address `"letoya@prisma.io"`. The `User` table **does not** enforce unique email addresses. The effect on the database is different if you run the logic once (one user created) or ten times (ten users created). +- **IDEMPOTENT**: Upsert (update-or-insert) a user in the database with the email address `"letoya@prisma.io"`. The `User` table **does** enforce unique email addresses. The effect on the database is the same if you run the logic once (one user created) or ten times (existing user is updated with the same input). + +Idempotency is something you can and should actively design into your application wherever possible. + +#### When to design an idempotent API + +- ✔ You need to be able to retry the same logic without creating unwanted side-effects in the databases + +#### Scenario: Upgrading a Slack team + +You are creating an upgrade flow for Slack that allows teams to unlock paid features. Teams can choose between different plans and pay per user, per month. You use Stripe as your payment gateway, and extend your `Team` model to store a `stripeCustomerId`. Subscriptions are managed in Stripe. + +```prisma highlight=5;normal +model Team { + id Int @id @default(autoincrement()) + name String + User User[] + //highlight-next-line + stripeCustomerId String? +} +``` + +The upgrade flow looks like this: + +1. Count the number of users +2. Create a subscription in Stripe that includes the number of users +3. Associate the team with the Stripe customer ID to unlock paid features + +```ts +const teamId = 9 +const planId = 'plan_id' + +// Count team members +const numTeammates = await prisma.user.count({ + where: { + teams: { + some: { + id: teamId, + }, + }, + }, +}) + +// Create a customer in Stripe for plan-9454549 +const customer = await stripe.customers.create({ + externalId: teamId, + plan: planId, + quantity: numTeammates, +}) + +// Update the team with the customer id to indicate that they are a customer +// and support querying this customer in Stripe from our application code. +await prisma.team.update({ + data: { + customerId: customer.id, + }, + where: { + id: teamId, + }, +}) +``` + +This example has a problem: you can only run the logic _once_. Consider the following scenario: + +1. Stripe creates a new customer and subscription, and returns a customer ID +2. Updating the team **fails** - the team is not marked as a customer in the Slack database +3. The customer is charged by Stripe, but paid features are not unlocked in Slack because the team lacks a valid `customerId` +4. Running the same code again either: + + - Results in an error because the team (defined by `externalId`) already exists - Stripe never returns a customer ID + - If `externalId` is not subject to a unique constraint, Stripe creates yet another subscription (**not idempotent**) + +You cannot re-run this code in case of an error and you cannot change to another plan without being charged twice. + +The following refactor (highlighted) introduces a mechanism that checks if a subscription already exists, and either creates the description or updates the existing subscription (which will remain unchanged if the input is identical): + +```ts highlight=12-27;normal +// Calculate the number of users times the cost per user +const numTeammates = await prisma.user.count({ + where: { + teams: { + some: { + id: teamId, + }, + }, + }, +}) + +//highlight-start +// Find customer in Stripe +let customer = await stripe.customers.get({ externalId: teamID }) + +if (customer) { + // If team already exists, update + customer = await stripe.customers.update({ + externalId: teamId, + plan: 'plan_id', + quantity: numTeammates, +//highlight-end + }) +} else { + customer = await stripe.customers.create({ + // If team does not exist, create customer + externalId: teamId, + plan: 'plan_id', + quantity: numTeammates, + }) +} + +// Update the team with the customer id to indicate that they are a customer +// and support querying this customer in Stripe from our application code. +await prisma.team.update({ + data: { + customerId: customer.id, + }, + where: { + id: teamId, + }, +}) +``` + +You can now retry the same logic multiple times with the same input without adverse effect. To further enhance this example, you can introduce a mechanism whereby the subscription is cancelled or temporarily deactivated if the update does not succeed after a set number of attempts. + +### Optimistic concurrency control + +Optimistic concurrency control (OCC) is a model for handling concurrent operations on a single entity that does not rely on 🔒 locking. Instead, we **optimistically** assume that a record will remain unchanged in between reading and writing, and use a concurrency token (a timestamp or version field) to detect changes to a record. + +If a ❌ conflict occurs (someone else has changed the record since you read it), you cancel the transaction. Depending on your scenario, you can then: + +- Re-try the transaction (book another cinema seat) +- Throw an error (alert the user that they are about to overwrite changes made by someone else) + +This section describes how to build your own optimistic concurrency control. See also: Plans for [application-level optimistic concurrency control on GitHub](https://github.com/prisma/prisma/issues/4988) + + + +- If you use version 4.4.0 or earlier, you cannot use optimistic concurrency control on `update` operations, because you cannot filter on non-unique fields. The `version` field you need to use with optimistic concurrency control is a non-unique field. + +- Since version 5.0.0 you are able to [filter on non-unique fields in `update` operations](/orm/reference/prisma-client-reference#filter-on-non-unique-fields-with-userwhereuniqueinput) so that optimistic concurrency control is being used. The feature was also available via the Preview flag `extendedWhereUnique` from versions 4.5.0 to 4.16.2. + + + +#### When to use optimistic concurrency control + +- ✔ You anticipate a high number of concurrent requests (multiple people booking cinema seats) +- ✔ You anticipate that conflicts between those concurrent requests will be rare + +Avoiding locks in an application with a high number of concurrent requests makes the application more resilient to load and more scalable overall. Although locking is not inherently bad, locking in a high concurrency environment can lead to unintended consequences - even if you are locking individual rows, and only for a short amount of time. For more information, see: + +- [Why ROWLOCK Hints Can Make Queries Slower and Blocking Worse in SQL Server](https://kendralittle.com/2016/02/04/why-rowlock-hints-can-make-queries-slower-and-blocking-worse-in-sql-server/) + +#### Scenario: Reserving a seat at the cinema + +You are creating a booking system for a cinema. Each movie has a set number of seats. The following schema models movies and seats: + +```ts +model Seat { + id Int @id @default(autoincrement()) + userId Int? + claimedBy User? @relation(fields: [userId], references: [id]) + movieId Int + movie Movie @relation(fields: [movieId], references: [id]) +} + +model Movie { + id Int @id @default(autoincrement()) + name String @unique + seats Seat[] +} +``` + +The following sample code finds the first available seat and assigns that seat to a user: + +```ts +const movieName = 'Hidden Figures' + +// Find first available seat +const availableSeat = await prisma.seat.findFirst({ + where: { + movie: { + name: movieName, + }, + claimedBy: null, + }, +}) + +// Throw an error if no seats are available +if (!availableSeat) { + throw new Error(`Oh no! ${movieName} is all booked.`) +} + +// Claim the seat +await prisma.seat.update({ + data: { + claimedBy: userId, + }, + where: { + id: availableSeat.id, + }, +}) +``` + +However, this code suffers from the "double-booking problem" - it is possible for two people to book the same seats: + +1. Seat 3A returned to Sorcha (`findFirst`) +2. Seat 3A returned to Ellen (`findFirst`) +3. Seat 3A claimed by Sorcha (`update`) +4. Seat 3A claimed by Ellen (`update` - overwrites Sorcha's claim) + +Even though Sorcha has successfully booked the seat, the system ultimately stores Ellen's claim. To solve this problem with optimistic concurrency control, add a `version` field to the seat: + +```prisma highlight=7;normal +model Seat { + id Int @id @default(autoincrement()) + userId Int? + claimedBy User? @relation(fields: [userId], references: [id]) + movieId Int + movie Movie @relation(fields: [movieId], references: [id]) + //highlight-next-line + version Int +} +``` + +Next, adjust the code to check the `version` field before updating: + +```ts highlight=19-38;normal +const userEmail = 'alice@prisma.io' +const movieName = 'Hidden Figures' + +// Find the first available seat +// availableSeat.version might be 0 +const availableSeat = await client.seat.findFirst({ + where: { + Movie: { + name: movieName, + }, + claimedBy: null, + }, +}) + +if (!availableSeat) { + throw new Error(`Oh no! ${movieName} is all booked.`) +} + +//highlight-start +// Only mark the seat as claimed if the availableSeat.version +// matches the version we're updating. Additionally, increment the +// version when we perform this update so all other clients trying +// to book this same seat will have an outdated version. +const seats = await client.seat.updateMany({ + data: { + claimedBy: userEmail, + version: { + increment: 1, + }, + }, + where: { + id: availableSeat.id, + version: availableSeat.version, // This version field is the key; only claim seat if in-memory version matches database version, indicating that the field has not been updated + }, +}) + +if (seats.count === 0) { + throw new Error(`That seat is already booked! Please try again.`) +} +//highlight-end +``` + +It is now impossible for two people to book the same seat: + +1. Seat 3A returned to Sorcha (`version` is 0) +2. Seat 3A returned to Ellen (`version` is 0) +3. Seat 3A claimed by Sorcha (`version` is incremented to 1, booking succeeds) +4. Seat 3A claimed by Ellen (in-memory `version` (0) does not match database `version` (1) - booking does not succeed) + +### Interactive transactions + +If you have an existing application, it can be a significant undertaking to refactor your application to use optimistic concurrency control. Interactive Transactions offers a useful escape hatch for cases like this. + +To create an interactive transaction, pass an async function into [$transaction](#transaction-api). + +The first argument passed into this async function is an instance of Prisma Client. Below, we will call this instance `tx`. Any Prisma Client call invoked on this `tx` instance is encapsulated into the transaction. + +In the example below, Alice and Bob each have $100 in their account. If they try to send more money than they have, the transfer is rejected. + +The expected outcome would be for Alice to make 1 transfer for $100 and the other transfer would be rejected. This would result in Alice having $0 and Bob having $200. + +```ts +import { PrismaClient } from '@prisma/client' +const prisma = new PrismaClient() + +async function transfer(from: string, to: string, amount: number) { + return await prisma.$transaction(async (tx) => { + // 1. Decrement amount from the sender. + const sender = await tx.account.update({ + data: { + balance: { + decrement: amount, + }, + }, + where: { + email: from, + }, + }) + + // 2. Verify that the sender's balance didn't go below zero. + if (sender.balance < 0) { + throw new Error(`${from} doesn't have enough to send ${amount}`) + } + + // 3. Increment the recipient's balance by amount + const recipient = tx.account.update({ + data: { + balance: { + increment: amount, + }, + }, + where: { + email: to, + }, + }) + + return recipient + }) +} + +async function main() { + // This transfer is successful + await transfer('alice@prisma.io', 'bob@prisma.io', 100) + // This transfer fails because Alice doesn't have enough funds in her account + await transfer('alice@prisma.io', 'bob@prisma.io', 100) +} + +main() +``` + +In the example above, both `update` queries run within a database transaction. When the application reaches the end of the function, the transaction is **committed** to the database. + +If the application encounters an error along the way, the async function will throw an exception and automatically **rollback** the transaction. + +You can learn more about interactive transactions in this [section](#interactive-transactions). + + + +**Use interactive transactions with caution**. Keeping transactions +open for a long time hurts database performance and can even cause deadlocks. +Try to avoid performing network requests and executing slow queries inside your +transaction functions. We recommend you get in and out as quick as possible! + + + +## Conclusion + +Prisma Client supports multiple ways of handling transactions, either directly through the API or by supporting your ability to introduce optimistic concurrency control and idempotency into your application. If you feel like you have use cases in your application that are not covered by any of the suggested options, please open a [GitHub issue](https://github.com/prisma/prisma/issues/new/choose) to start a discussion. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/060-full-text-search.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/060-full-text-search.mdx new file mode 100644 index 0000000000..ef473c95b8 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/060-full-text-search.mdx @@ -0,0 +1,324 @@ +--- +title: 'Full-text search' +metaTitle: 'Full-text search (Preview)' +metaDescription: 'This page explains how to search for text within a field.' +sidebar_class_name: preview-badge +--- + +Prisma Client supports full-text search for **PostgreSQL** databases in versions 2.30.0 and later, and **MySQL** databases in versions 3.8.0 and later. With full-text search (FTS) enabled, you can add search functionality to your application by searching for text within a database column. + +:::info + +In Prisma v6, FTS has been [promoted to General Availability on MySQL](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-6#fulltextsearch). It still remains in Preview for PostgreSQL and requires using the [`fullTextSearchPostgres`](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-6#full-text-search-on-postgresql) Preview feature flag. + +::: + +## Enabling full-text search for PostgreSQL + +The full-text search API is currently a Preview feature. To enable this feature, carry out the following steps: + +1. Update the [`previewFeatures`](/orm/reference/preview-features) block in your schema to include the `fullTextSearchPostgres` preview feature flag: + + ```prisma file=schema.prisma showLineNumbers + generator client { + provider = "prisma-client-js" + previewFeatures = ["fullTextSearchPostgres"] + } + ``` + + +2. Generate Prisma Client: + + ```terminal copy + npx prisma generate + ``` + +After you regenerate your client, a new `search` field will be available on any `String` fields created on your models. For example, the following search will return all posts that contain the word 'cat'. + +```ts +// All posts that contain the word 'cat'. +const result = await prisma.posts.findMany({ + where: { + body: { + search: 'cat', + }, + }, +}) +``` + +> **Note**: There currently is a [known issue](https://github.com/prisma/prisma/issues/23627) in the full-text search feature for PostgreSQL. If you observe slow search queries, you can [optimize your query with raw SQL](#full-text-search-with-raw-sql). + +## Querying the database + +The `search` field uses the database's native querying capabilities under the hood. This means that the exact query operators available are also database-specific. + +### PostgreSQL + +The following examples demonstrate the use of the PostgreSQL 'and' (`&`) and 'or' (`|`) operators: + +```ts +// All posts that contain the words 'cat' or 'dog'. +const result = await prisma.posts.findMany({ + where: { + body: { + search: 'cat | dog', + }, + }, +}) + +// All drafts that contain the words 'cat' and 'dog'. +const result = await prisma.posts.findMany({ + where: { + status: 'Draft', + body: { + search: 'cat & dog', + }, + }, +}) +``` + +To get a sense of how the query format works, consider the following text: + +**"The quick brown fox jumps over the lazy dog"** + +Here's how the following queries would match that text: + +| Query | Match? | Explanation | +| :-------------------------------------- | :----- | :-------------------------------------- | +| `fox & dog` | Yes | The text contains 'fox' and 'dog' | +| `dog & fox` | Yes | The text contains 'dog' and 'fox' | +| `dog & cat` | No | The text contains 'dog' but not 'cat' | +| `!cat` | Yes | 'cat' is not in the text | +| `fox \| cat` | Yes | The text contains 'fox' or 'cat' | +| `cat \| pig` | No | The text doesn't contain 'cat' or 'pig' | +| `fox <-> dog` | Yes | 'dog' follows 'fox' in the text | +| `dog <-> fox` | No | 'fox' doesn't follow 'dog' in the text | + +For the full range of supported operations, see the [PostgreSQL full text search documentation](https://www.postgresql.org/docs/12/functions-textsearch.html). + +### MySQL + +The following examples demonstrate use of the MySQL 'and' (`+`) and 'not' (`-`) operators: + +```ts +// All posts that contain the words 'cat' or 'dog'. +const result = await prisma.posts.findMany({ + where: { + body: { + search: 'cat dog', + }, + }, +}) + +// All posts that contain the words 'cat' and not 'dog'. +const result = await prisma.posts.findMany({ + where: { + body: { + search: '+cat -dog', + }, + }, +}) + +// All drafts that contain the words 'cat' and 'dog'. +const result = await prisma.posts.findMany({ + where: { + status: 'Draft', + body: { + search: '+cat +dog', + }, + }, +}) +``` + +To get a sense of how the query format works, consider the following text: + +**"The quick brown fox jumps over the lazy dog"** + +Here's how the following queries would match that text: + +| Query | Match? | Description | +| :------------- | :----- | :----------------------------------------------------- | +| `+fox +dog` | Yes | The text contains 'fox' and 'dog' | +| `+dog +fox` | Yes | The text contains 'dog' and 'fox' | +| `+dog -cat` | Yes | The text contains 'dog' but not 'cat' | +| `-cat` | No | The minus operator cannot be used on its own (see note below) | +| `fox dog` | Yes | The text contains 'fox' or 'dog' | +| `quic*` | Yes | The text contains a word starting with 'quic' | +| `quick fox @2` | Yes | 'fox' starts within a 2 word distance of 'quick' | +| `fox dog @2` | No | 'dog' does not start within a 2 word distance of 'fox' | +| `"jumps over"` | Yes | The text contains the whole phrase 'jumps over' | + +> **Note**: The - operator acts only to exclude rows that are otherwise matched by other search terms. Thus, a boolean-mode search that contains only terms preceded by - returns an empty result. It does not return “all rows except those containing any of the excluded terms.” + +MySQL also has `>`, `<` and `~` operators for altering the ranking order of search results. As an example, consider the following two records: + +**1. "The quick brown fox jumps over the lazy dog"** + +**2. "The quick brown fox jumps over the lazy cat"** + +| Query | Result | Description | +| :---------------- | :----------------------- | :------------------------------------------------------------------------------------------------------ | +| `fox ~cat` | Return 1. first, then 2. | Return all records containing 'fox', but rank records containing 'cat' lower | +| `fox (dog)` | Return 1. first, then 2. | Return all records containing 'fox', but rank records containing 'cat' lower than rows containing 'dog' | + +For the full range of supported operations, see the [MySQL full text search documentation](https://dev.mysql.com/doc/refman/8.0/en/fulltext-boolean.html). + +## Sorting results by `_relevance` + + + +Sorting by relevance is only available for PostgreSQL and MySQL. + + + +In addition to [Prisma Client's default `orderBy` behavior](/orm/reference/prisma-client-reference#orderby), full-text search also adds sorting by relevance to a given string or strings. As an example, if you wanted to order posts by their relevance to the term `'database'` in their title, you could use the following: + +```ts +const posts = await prisma.post.findMany({ + orderBy: { + _relevance: { + fields: ['title'], + search: 'database', + sort: 'asc' + }, + }, +}) +``` + +## Adding indexes + +### PostgreSQL + +Prisma Client does not currently support using indexes to speed up full text search. There is an existing [GitHub Issue](https://github.com/prisma/prisma/issues/8950) for this. + +### MySQL + +For MySQL, it is necessary to add indexes to any columns you search using the `@@fulltext` argument in the `schema.prisma` file. + +In the following example, one full text index is added to the `content` field of the `Blog` model, and another is added to both the `content` and `title` fields together: + +```prisma file=schema.prisma showLineNumbers +generator client { + provider = "prisma-client-js" +} + +model Blog { + id Int @unique + content String + title String + + @@fulltext([content]) + @@fulltext([content, title]) +} +``` + +The first index allows searching the `content` field for occurrences of the word 'cat': + +```ts +const result = await prisma.blogs.findMany({ + where: { + content: { + search: 'cat', + }, + }, +}) +``` + +The second index allows searching both the `content` and `title` fields for occurrences of the word 'cat' in the `content` and 'food' in the `title`: + +```ts +const result = await prisma.blogs.findMany({ + where: { + content: { + search: 'cat', + }, + title: { + search: 'food', + }, + }, +}) +``` + +However, if you try to search on `title` alone, the search will fail with the error "Cannot find a fulltext index to use for the search" and the message code is `P2030`, because the search requires an index on both fields. + +## Full-text search with raw SQL + +Full-text search is currently in Preview, and due to a [known issue](https://github.com/prisma/prisma/issues/23627), you might experience slow search queries. If so, you can optimize your query using [TypedSQL](/orm/prisma-client/using-raw-sql). + +### PostgreSQL + +With [TypedSQL](/orm/prisma-client/using-raw-sql), you can use PostgreSQL's `to_tsvector` and `to_tsquery` to express your search query. + + + + + + ```sql + SELECT * FROM "Blog" WHERE to_tsvector('english', "Blog"."content") @@ to_tsquery('english', ${term}); + ``` + + + + + + ```ts + import { fullTextSearch } from "@prisma/client/sql" + + const term = `cat` + const result = await prisma.$queryRawTyped(fullTextSearch(term)) + ``` + + + + + +> **Note**: Depending on your language preferences, you may exchange `english` against another language in the SQL statement. + +If you want to include a wildcard in your search term, you can do this as follows: + + + + + + ```sql + SELECT * FROM "Blog" WHERE to_tsvector('english', "Blog"."content") @@ to_tsquery('english', ${term}); + ``` + + + + + + ```ts + //highlight-next-line + const term = `cat:*` + const result = await prisma.$queryRawTyped(fullTextSearch(term)) + ``` + + + + + +### MySQL + +In MySQL, you can express your search query as follows: + + + + + + ```sql + SELECT * FROM Blog WHERE MATCH(content) AGAINST(${term} IN NATURAL LANGUAGE MODE); + ``` + + + + + + ```ts + const term = `cat` + const result = await prisma.$queryRawTyped(fullTextSearch(term)) + ``` + + + + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/061-custom-validation.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/061-custom-validation.mdx new file mode 100644 index 0000000000..ecc05879aa --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/061-custom-validation.mdx @@ -0,0 +1,190 @@ +--- +title: 'Custom validation' +metaTitle: 'Custom validation' +metaDescription: 'This page explains how to add custom validation to Prisma Client' +--- + + + +You can add runtime validation for your user input for Prisma Client queries in one of the following ways: + +- [Prisma Client extensions](/orm/prisma-client/client-extensions) +- A custom function + +You can use any validation library you'd like. The Node.js ecosystem offers a number of high-quality, easy-to-use validation libraries to choose from including: [joi](https://github.com/sideway/joi), [validator.js](https://github.com/validatorjs/validator.js), [Yup](https://github.com/jquense/yup), [Zod](https://github.com/colinhacks/zod) and [Superstruct](https://github.com/ianstormtaylor/superstruct). + + + +## Input validation with Prisma Client extensions + +This example adds runtime validation when creating and updating values using a Zod schema to check that the data passed to Prisma Client is valid. + + + +Query extensions do not currently work for nested operations. In this example, validations are only run on the top level data object passed to methods such as `prisma.product.create()`. Validations implemented this way do not automatically run for [nested writes](/orm/prisma-client/queries/relation-queries#nested-writes). + + + + + + + +```ts copy +import { PrismaClient, Prisma } from '@prisma/client' +import { z } from 'zod' + +/** + * Zod schema + */ +export const ProductCreateInput = z.object({ + slug: z + .string() + .max(100) + .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/), + name: z.string().max(100), + description: z.string().max(1000), + price: z + .instanceof(Prisma.Decimal) + .refine((price) => price.gte('0.01') && price.lt('1000000.00')), +}) satisfies z.Schema + +/** + * Prisma Client Extension + */ +const prisma = new PrismaClient().$extends({ + query: { + product: { + create({ args, query }) { + args.data = ProductCreateInput.parse(args.data) + return query(args) + }, + update({ args, query }) { + args.data = ProductCreateInput.partial().parse(args.data) + return query(args) + }, + updateMany({ args, query }) { + args.data = ProductCreateInput.partial().parse(args.data) + return query(args) + }, + upsert({ args, query }) { + args.create = ProductCreateInput.parse(args.create) + args.update = ProductCreateInput.partial().parse(args.update) + return query(args) + }, + }, + }, +}) + +async function main() { + /** + * Example usage + */ + // Valid product + const product = await prisma.product.create({ + data: { + slug: 'example-product', + name: 'Example Product', + description: 'Lorem ipsum dolor sit amet', + price: new Prisma.Decimal('10.95'), + }, + }) + + // Invalid product + try { + await prisma.product.create({ + data: { + slug: 'invalid-product', + name: 'Invalid Product', + description: 'Lorem ipsum dolor sit amet', + price: new Prisma.Decimal('-1.00'), + }, + }) + } catch (err: any) { + console.log(err?.cause?.issues) + } +} + +main() +``` + + + + + +```prisma copy +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Product { + id String @id @default(cuid()) + slug String + name String + description String + price Decimal + reviews Review[] +} + +model Review { + id String @id @default(cuid()) + body String + stars Int + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + productId String +} +``` + + + + + +The above example uses a Zod schema to validate and parse data provided in a query at runtime before a record is written to the database. + +## Input validation with a custom validation function + +Here's an example using [Superstruct](https://github.com/ianstormtaylor/superstruct) to validate that the data needed to signup a new user is correct: + +```tsx +import { PrismaClient, Prisma, User } from '@prisma/client' +import { assert, object, string, size, refine } from 'superstruct' +import isEmail from 'isemail' + +const prisma = new PrismaClient() + +// Runtime validation +const Signup = object({ + // string and a valid email address + email: refine(string(), 'email', (v) => isEmail.validate(v)), + // password is between 7 and 30 characters long + password: size(string(), 7, 30), + // first name is between 2 and 50 characters long + firstName: size(string(), 2, 50), + // last name is between 2 and 50 characters long + lastName: size(string(), 2, 50), +}) + +type Signup = Omit + +// Signup function +async function signup(input: Signup): Promise { + // Assert that input conforms to Signup, throwing with a helpful + // error message if input is invalid. + assert(input, Signup) + return prisma.user.create({ + data: input.user, + }) +} +``` + +The example above shows how you can create a custom type-safe `signup` function that ensures the input is valid before creating a user. + +## Going further + +- Learn how you can use [Prisma Client extensions](/orm/prisma-client/client-extensions) to add input validation for your queries — [example](https://github.com/prisma/prisma-client-extensions/tree/main/input-validation). +- Learn how you can organize your code better by moving the `signup` function into [a custom model](/orm/prisma-client/queries/custom-models). +- There's an [outstanding feature request](https://github.com/prisma/prisma/issues/3528) to bake user validation into Prisma Client. If you'd like to see that happen, make sure to upvote that issue and share your use case! diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/062-computed-fields.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/062-computed-fields.mdx new file mode 100644 index 0000000000..c1e69e2dcd --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/062-computed-fields.mdx @@ -0,0 +1,180 @@ +--- +title: 'Computed fields' +metaTitle: 'Computed fields' +metaDescription: 'This page explains how to use client extensions to add computed fields to Prisma models.' +--- + +Computed fields allow you to derive a new field based on existing data. A common example is when you want to compute a full name. In your database, you may only store the first and last name, but you can define a function that computes a full name by combining the first and last name. Computed fields are read-only and stored in your application's memory, not in your database. + +## Using a Prisma Client extension + +The following example illustrates how to create a [Prisma Client extension](/orm/prisma-client/client-extensions) that adds a `fullName` computed field at runtime to the `User` model in a Prisma schema. + + + + + + + + + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient().$extends({ + result: { + user: { + fullName: { + needs: { firstName: true, lastName: true }, + compute(user) { + return `${user.firstName} ${user.lastName}` + }, + }, + }, + }, +}) + +async function main() { + /** + * Example query containing the `fullName` computed field in the response + */ + const user = await prisma.user.findFirst() +} + +main() +``` + + + + +```js no-copy +{ + id: 1, + firstName: 'Aurelia', + lastName: 'Schneider', + email: 'Jalen_Berge40@hotmail.com', + fullName: 'Aurelia Schneider', +} +``` + + + + + + + + + +```prisma copy +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + firstName String + lastName String + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + title String + published Boolean @default(true) + content String? + authorId Int? + author User? @relation(fields: [authorId], references: [id]) +} +``` + + + + + +The computed fields are type-safe and can return anything from a concatenated value to complex objects or functions that can act as an instance method for your models. + +
+ +Instructions prior to Prisma ORM 4.16.0 + +:::warning + +With Prisma Client extensions Generally Available as of Prisma ORM version 4.16.0, the following steps are not recommended. Please use [a client extension](#using-a-prisma-client-extension) to accomplish this. + +::: + +Prisma Client does not yet natively support computed fields, but, you can define a function that accepts a generic type as an input then extend that generic to ensure it conforms to a specific structure. Finally, you can return that generic with additional computed fields. Let's see how that might look: + + + + + +```tsx +// Define a type that needs a first and last name +type FirstLastName = { + firstName: string + lastName: string +} + +// Extend the T generic with the fullName attribute +type WithFullName = T & { + fullName: string +} + +// Take objects that satisfy FirstLastName and computes a full name +function computeFullName( + user: User +): WithFullName { + return { + ...user, + fullName: user.firstName + ' ' + user.lastName, + } +} + +async function main() { + const user = await prisma.user.findUnique({ where: 1 }) + const userWithFullName = computeFullName(user) +} +``` + + + + + +```js +function computeFullName(user) { + return { + ...user, + fullName: user.firstName + ' ' + user.lastName, + } +} + +async function main() { + const user = await prisma.user.findUnique({ where: 1 }) + const userWithFullName = computeFullName(user) +} +``` + + + + + +In the TypeScript example above, a `User` generic has been defined that extends the `FirstLastName` type. This means that whatever you pass into `computeFullName` must contain `firstName` and `lastName` keys. + +A `WithFullName` return type has also been defined, which takes whatever `User` is and tacks on a `fullName` string attribute. + +With this function, any object that contains `firstName` and `lastName` keys can compute a `fullName`. Pretty neat, right? + +
+ +### Going further + +- Learn how you can use [Prisma Client extensions](/orm/prisma-client/client-extensions) to add a computed field to your schema — [example](https://github.com/prisma/prisma-client-extensions/tree/main/computed-fields). +- Learn how you can move the `computeFullName` function into [a custom model](/orm/prisma-client/queries/custom-models). +- There's an [open feature request](https://github.com/prisma/prisma/issues/3394) to add native support to Prisma Client. If you'd like to see that happen, make sure to upvote that issue and share your use case! diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/063-excluding-fields.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/063-excluding-fields.mdx new file mode 100644 index 0000000000..71a586ad84 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/063-excluding-fields.mdx @@ -0,0 +1,234 @@ +--- +title: 'Excluding fields' +metaTitle: 'Excluding fields' +metaDescription: 'This page explains how to exclude sensitive fields from Prisma Client' +--- + +By default Prisma Client returns all fields from a model. You can use `select` to narrow the result set, but that can be unwieldy if you have a large model and you only want to exclude one or two fields. + +:::info + +As of Prisma ORM 5.16.0, excluding fields globally and locally is supported via the `omitApi` Preview feature. + +::: + +## Excluding a field globally using `omit` + +The following is a type-safe way to exclude a field globally using the [`omitApi` Preview feature](/orm/reference/preview-features): + + + + + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["omitApi"] +} + +model User { + id Int @id @default(autoincrement()) + firstName String + lastName String + email String @unique + password String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} +``` + + + + + +```tsx +const prisma = new PrismaClient({ + omit: { + user: { + password: true + } + } +}) + +// The password field is excluded in all queries, including this one +const user = await prisma.user.findUnique({ where: { id: 1 } }) +``` + + + + + +## Excluding a field locally using `omit` + +The following is a type-safe way to exclude a field locally using the `omitApi` Preview feature: + + + + + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["omitApi"] +} + +model User { + id Int @id @default(autoincrement()) + firstName String + lastName String + email String @unique + password String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} +``` + + + + + +```tsx +const prisma = new PrismaClient() + +// The password field is excluded only in this query +const user = await prisma.user.findUnique({ + omit: { + password: true + }, + where: { + id: 1 + } +}) +``` + + + + + +## How to omit multiple fields + +Omitting multiple fields works the same as selecting multiple fields: add multiple key-value pairs to the omit option. +Using the same schema as before, you could omit password and email with the following: + +```tsx +const prisma = new PrismaClient() + +// password and email are excluded +const user = await prisma.user.findUnique({ + omit: { + email: true, + password: true, + }, + where: { + id: 1, + }, +}) +``` + +Multiple fields can be omitted locally and globally. + +## How to select a previously omitted field + +If you [omit a field globally](#excluding-a-field-globally-using-omit), you can "override" by either selecting the field specifically or by setting `omit` to `false` in a query. + + + + + +```tsx +const user = await prisma.user.findUnique({ + select: { + firstName: true, + lastName: true, + password: true // The password field is now selected. + }, + where: { + id: 1 + } +}) +``` + + + + + +```tsx +const user = await prisma.user.findUnique({ + omit: { + password: false // The password field is now selected. + }, + where: { + id: 1 + } +}) +``` + + + + + +## When to use `omit` globally or locally + +It's important to understand when to omit a field globally or locally: + +- If you are omitting a field in order to prevent it from accidentally being included in a query, it's best to omit it globally. For example: Globally omitting the password field from a User model so that sensitive information doesn't accidentally get exposed. +- If you are omitting a field because it's not needed in a query, it's best to omit it locally. + +Local omit (when an `omit` option is provided in a query) only applies to the query it is defined in, while a global omit applies to every query made with the same Prisma Client instance, [unless a specific select is used or the omit is overridden](#how-to-select-a-previously-omitted-field). + +## Excluding the password field without using `omit` + +:::note + +The `omitApi` Preview feature, released in Prisma ORM 5.13.0, is the preferred way of omitting fields from a query result. The ability to globally omit fields was added to the `omitApi` Preview feature in Prisma ORM 5.16.0. This documentation is still relevant for versions of Prisma ORM prior to 5.13.0. + +::: + +The following is a type-safe `exclude` function returns a user without the `password` field. + + + + + +```tsx +// Exclude keys from user +function exclude( + user: User, + keys: Key[] +): Omit { + return Object.fromEntries( + Object.entries(user).filter(([key]) => !keys.includes(key)) + ) +} + +function main() { + const user = await prisma.user.findUnique({ where: 1 }) + const userWithoutPassword = exclude(user, ['password']) +} +``` + + + + + +```js +// Exclude keys from user +function exclude(user, keys) { + return Object.fromEntries( + Object.entries(user).filter(([key]) => !keys.includes(key)) + ); +} + +function main() { + const user = await prisma.user.findUnique({ where: 1 }) + const userWithoutPassword = exclude(user, ['password']) +} +``` + + + + + +In the TypeScript example, we've provided two generics: `User` and `Key`. The `Key` generic is defined as the keys of a `User` (e.g. `email`, `password`, `firstName`, etc.). + +These generics flow through the logic, returning a `User` that omits the list of `Key`s provided. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/064-custom-models.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/064-custom-models.mdx new file mode 100644 index 0000000000..4d5a576e1f --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/064-custom-models.mdx @@ -0,0 +1,176 @@ +--- +title: 'Custom models' +metaTitle: 'Custom models' +metaDescription: 'This page explains how to wrap Prisma Client in custom models' +--- + + + +As your application grows, you may find the need to group related logic together. We suggest either: + +- Creating static methods using a [Prisma Client extension](/orm/prisma-client/client-extensions) +- Wrapping a model in a class +- Extending Prisma Client model object + + + +## Static methods with Prisma Client extensions + +The following example demonstrates how to create a Prisma Client extension that adds a `signUp` and `findManyByDomain` methods to a User model. + + + + + +```tsx +import bcrypt from 'bcryptjs' +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient().$extends({ + model: { + user: { + async signUp(email: string, password: string) { + const hash = await bcrypt.hash(password, 10) + return prisma.user.create({ + data: { + email, + password: { + create: { + hash, + }, + }, + }, + }) + }, + + async findManyByDomain(domain: string) { + return prisma.user.findMany({ + where: { email: { endsWith: `@${domain}` } }, + }) + }, + }, + }, +}) + +async function main() { + // Example usage + await prisma.user.signUp('user2@example2.com', 's3cret') + + await prisma.user.findManyByDomain('example2.com') +} +``` + + + + + +```prisma file="prisma/schema.prisma" copy +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id String @id @default(cuid()) + email String + password Password? +} + +model Password { + hash String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String @unique +} +``` + + + + + +## Wrap a model in a class + +In the example below, you'll see how you can wrap the `user` model in the Prisma Client within a `Users` class. + +```tsx +import { PrismaClient, User } from '@prisma/client' + +type Signup = { + email: string + firstName: string + lastName: string +} + +class Users { + constructor(private readonly prismaUser: PrismaClient['user']) {} + + // Signup a new user + async signup(data: Signup): Promise { + // do some custom validation... + return this.prismaUser.create({ data }) + } +} + +async function main() { + const prisma = new PrismaClient() + const users = new Users(prisma.user) + const user = await users.signup({ + email: 'alice@prisma.io', + firstName: 'Alice', + lastName: 'Prisma', + }) +} +``` + +With this new `Users` class, you can define custom functions like `signup`: + +Note that in the example above, you're only exposing a `signup` method from Prisma Client. The Prisma Client is hidden within the `Users` class, so you're no longer be able to call methods like `findMany` and `upsert`. + +This approach works well when you have a large application and you want to intentionally limit what your models can do. + +## Extending Prisma Client model object + +But what if you don't want to hide existing functionality but still want to group custom functions together? In this case, you can use `Object.assign` to extend Prisma Client without limiting its functionality: + +```tsx +import { PrismaClient, User } from '@prisma/client' + +type Signup = { + email: string + firstName: string + lastName: string +} + +function Users(prismaUser: PrismaClient['user']) { + return Object.assign(prismaUser, { + /** + * Signup the first user and create a new team of one. Return the User with + * a full name and without a password + */ + async signup(data: Signup): Promise { + return prismaUser.create({ data }) + }, + }) +} + +async function main() { + const prisma = new PrismaClient() + const users = Users(prisma.user) + const user = await users.signup({ + email: 'alice@prisma.io', + firstName: 'Alice', + lastName: 'Prisma', + }) + const numUsers = await users.count() + console.log(user, numUsers) +} +``` + +Now you can use your custom `signup` method alongside `count`, `updateMany`, `groupBy()` and all of the other wonderful methods that Prisma Client provides. Best of all, it's all type-safe! + +## Going further + +We recommend using [Prisma Client extensions](/orm/prisma-client/client-extensions) to extend your models with [custom model methods](https://github.com/prisma/prisma-client-extensions/tree/main/instance-methods). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/070-case-sensitivity.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/070-case-sensitivity.mdx new file mode 100644 index 0000000000..c1bc22a362 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/070-case-sensitivity.mdx @@ -0,0 +1,245 @@ +--- +title: 'Case sensitivity' +metaTitle: 'Case sensitivity (Reference)' +metaDescription: 'How Prisma Client handles case sensitivity when filtering and sorting.' +preview: false +--- + + + +Case sensitivity affects **filtering** and **sorting** of data, and is determined by your [database collation](#database-collation-and-case-sensitivity). Sorting and filtering data yields different results depending on your settings: + +| Action | Case sensitive | Case insensitive | +| --------------- | -------------------------------------------- | -------------------------------------------- | +| Sort ascending | `Apple`, `Banana`, `apple pie`, `banana pie` | `Apple`, `apple pie`, `Banana`, `banana pie` | +| Match `"apple"` | `apple` | `Apple`, `apple` | + +If you use a **relational database connector**, [Prisma Client](/orm/prisma-client) respects your database collation. Options and recommendations for supporting **case-insensitive** filtering and sorting with Prisma Client depend on your [database provider](#options-for-case-insensitive-filtering). + +If you use the MongoDB connector, [Prisma Client](/orm/prisma-client/queries) uses RegEx rules to enable case-insensitive filtering. The connector _does not_ use [MongoDB collation](https://www.mongodb.com/docs/manual/reference/collation/). + +> **Note**: Follow the progress of [case-insensitive sorting on GitHub](https://github.com/prisma/prisma-client-js/issues/841). + + + +## Database collation and case sensitivity + + + +In the context of Prisma Client, the following section refers to relational database connectors only. + + + +Collation specifies how data is **sorted and compared** in a database, which includes casing. Collation is something you choose when you set up a database. + +The following example demonstrates how to view the collation of a MySQL database: + + + + + +```sql no-lines +SELECT @@character_set_database, @@collation_database; +``` + + + + + +```no-lines no-copy + +--------------------------+----------------------+ + | @@character_set_database | @@collation_database | + +--------------------------+----------------------+ + | utf8mb4 | utf8mb4_0900_ai_ci | + +--------------------------+----------------------+ +``` + + + + + +The example collation, [`utf8mb4_0900_ai_ci`](https://dev.mysql.com/doc/refman/8.0/en/charset-collation-names.html), is: + +- Accent-insensitive (`ai`) +- Case-insensitive (`ci`). + +This means that `prisMa` will match `prisma`, `PRISMA`, `priSMA`, and so on: + + + + + +```sql no-lines +SELECT id, email FROM User WHERE email LIKE "%prisMa%" +``` + + + + + +```no-lines no-copy + +----+-----------------------------------+ + | id | email | + +----+-----------------------------------+ + | 61 | alice@prisma.io | + | 49 | birgitte@prisma.io | + +----+-----------------------------------+ +``` + + + + + +The same query with Prisma Client: + +```ts +const users = await prisma.user.findMany({ + where: { + email: { + contains: 'prisMa', + }, + }, + select: { + id: true, + name: true, + }, +}) +``` + +## Options for case-insensitive filtering + +The recommended way to support case-insensitive filtering with Prisma Client depends on your underlying provider. + +### PostgreSQL provider + +PostgreSQL uses [deterministic collation](https://www.postgresql.org/docs/current/collation.html#COLLATION-NONDETERMINISTIC) by default, which means that filtering is **case-sensitive**. To support case-insensitive filtering, use the `mode: 'insensitive'` property on a per-field basis. + +Use the `mode` property on a filter as shown: + +```ts highlight=5;normal +const users = await prisma.user.findMany({ + where: { + email: { + endsWith: 'prisma.io', + mode: 'insensitive', // Default value: default + }, + }, +}) +``` + +See also: [Filtering (Case-insensitive filtering)](/orm/prisma-client/queries/filtering-and-sorting#case-insensitive-filtering) + +#### Caveats + +- You cannot use case-insensitive filtering with C collation +- [`citext`](https://www.postgresql.org/docs/12/citext.html) columns are always case-insensitive and are not affected by `mode` + +#### Performance + +If you rely heavily on case-insensitive filtering, consider [creating indexes in the PostgreSQL database](https://www.postgresql.org/docs/current/indexes.html) to improve performance: + +- [Create an expression index](https://www.postgresql.org/docs/current/indexes-expressional.html) for Prisma Client queries that use `equals` or `not` +- Use the `pg_trgm` module to [create a trigram-based index](https://www.postgresql.org/docs/12/pgtrgm.html#id-1.11.7.40.7) for Prisma Client queries that use `startsWith`, `endsWith`, `contains` (maps to`LIKE` / `ILIKE` in PostgreSQL) + +### MySQL provider + +MySQL uses **case-insensitive collation** by default. Therefore, filtering with Prisma Client and MySQL is case-insensitive by default. + +`mode: 'insensitive'` property is not required and therefore not available in the generated Prisma Client API. + +#### Caveats + +- You _must_ use a case-insensitive (`_ci`) collation in order to support case-insensitive filtering. Prisma Client does no support the `mode` filter property for the MySQL provider. + +### MongoDB provider + +To support case-insensitive filtering, use the `mode: 'insensitive'` property on a per-field basis: + +```ts highlight=5;normal +const users = await prisma.user.findMany({ + where: { + email: { + endsWith: 'prisma.io', + mode: 'insensitive', // Default value: default + }, + }, +}) +``` + +The MongoDB uses a RegEx rule for case-insensitive filtering. + +### SQLite provider + +By default, text fields created by Prisma Client in SQLite databases do not support case-insensitive filtering. In SQLite, only [case-insensitive comparisons of ASCII characters](https://www.sqlite.org/faq.html#q18) are possible. + +To enable limited support (ASCII only) for case-insensitive filtering on a per-column basis, you will need to add `COLLATE NOCASE` when you define a text column. + +#### Adding case-insensitive filtering to a new column. + +To add case-insensitive filtering to a new column, you will need to modify the migration file that is created by Prisma Client. + +Taking the following Prisma Schema model: + +```prisma +model User { + id Int @id + email String +} +``` + +and using `prisma migrate dev --create-only` to create the following migration file: + +```sql +-- CreateTable +CREATE TABLE "User" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "email" TEXT NOT NULL +); +``` + +You would need to add `COLLATE NOCASE` to the `email` column in order to make case-insensitive filtering possible: + +```sql +-- CreateTable +CREATE TABLE "User" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + //highlight-next-line + "email" TEXT NOT NULL COLLATE NOCASE +); +``` + +#### Adding case-insensitive filtering to an existing column. + +Since columns cannot be updated in SQLite, `COLLATE NOCASE` can only be added to an existing column by creating a blank migration file and migrating data to a new table. + +Taking the following Prisma Schema model: + +```prisma +model User { + id Int @id + email String +} +``` + +and using `prisma migrate dev --create-only` to create an empty migration file, you will need to rename the current `User` table and create a new `User` table with `COLLATE NOCASE`. + +```sql +-- UpdateTable +ALTER TABLE "User" RENAME TO "User_old"; + +CREATE TABLE "User" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "email" TEXT NOT NULL COLLATE NOCASE +); + +INSERT INTO "User" (id, email) +SELECT id, email FROM "User_old"; + +DROP TABLE "User_old"; +``` + +### Microsoft SQL Server provider + +Microsoft SQL Server uses **case-insensitive collation** by default. Therefore, filtering with Prisma Client and Microsoft SQL Server is case-insensitive by default. + +`mode: 'insensitive'` property is not required and therefore not available in the generated Prisma Client API. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/100-query-optimization-performance.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/100-query-optimization-performance.mdx new file mode 100644 index 0000000000..5650052a69 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/100-query-optimization-performance.mdx @@ -0,0 +1,457 @@ +--- +title: 'Query optimization' +metaTitle: 'Query optimization' +metaDescription: 'How Prisma optimizes queries under the hood' +tocDepth: 3 +--- + +This guide shows how to identify and optimize query performance, debug performance issues, and address common challenges. + +## Debugging performance issues + +Several common practices can lead to slow queries and performance problems, such as: + +- Over-fetching data +- Missing indexes +- Not caching repeated queries +- Performing full table scans + +:::info + +For more potential causes of performance issues, visit [this page](/optimize/recommendations). + +::: + +[Prisma Optimize](/optimize) offers [recommendations](/optimize/recommendations) to identify and address the inefficiencies listed above and more, helping to improve query performance. + +To get started, follow the [integration guide](/optimize/getting-started) and add Prisma Optimize to your project to begin diagnosing slow queries. + +
+ +
+ +:::tip + +You can also [log query events at the client level](/orm/prisma-client/observability-and-logging/logging#event-based-logging) to view the generated queries, their parameters, and execution times. + +If you are particularly focused on monitoring query duration, consider using [logging middleware](/orm/prisma-client/client-extensions/middleware/logging-middleware). + +::: + +## Using bulk queries + +It is generally more performant to read and write large amounts of data in bulk - for example, inserting `50,000` records in batches of `1000` rather than as `50,000` separate inserts. `PrismaClient` supports the following bulk queries: + +- [`createMany()`](/orm/reference/prisma-client-reference#createmany) +- [`createManyAndReturn()`](/orm/reference/prisma-client-reference#createmanyandreturn) +- [`deleteMany()`](/orm/reference/prisma-client-reference#deletemany) +- [`updateMany()`](/orm/reference/prisma-client-reference#updatemany) +- [`findMany()`](/orm/reference/prisma-client-reference#findmany) + +## Reuse `PrismaClient` or use connection pooling to avoid database connection pool exhaustion + +Creating multiple instances of `PrismaClient` can exhaust your database connection pool, especially in serverless or edge environments, potentially slowing down other queries. Learn more in the [serverless challenge](/orm/prisma-client/setup-and-configuration/databases-connections#the-serverless-challenge). + +For applications with a traditional server, instantiate `PrismaClient` once and reuse it throughout your app instead of creating multiple instances. For example, instead of: + +```ts file=query.ts +async function getPosts() { + const prisma = new PrismaClient() + await prisma.post.findMany() +} + +async function getUsers() { + const prisma = new PrismaClient() + await prisma.user.findMany() +} +``` + +Define a single `PrismaClient` instance in a dedicated file and re-export it for reuse: + +```ts file=db.ts +export const prisma = new PrismaClient() +``` + +Then import the shared instance: + +```ts file=query.ts +import { prisma } from "db.ts" + +async function getPosts() { + await prisma.post.findMany() +} + +async function getUsers() { + await prisma.user.findMany() +} +``` + +For serverless development environments with frameworks that use HMR (Hot Module Replacement), ensure you properly handle a [single instance of Prisma in development](/orm/more/help-and-troubleshooting/nextjs-help#best-practices-for-using-prisma-client-in-development). + +## Solving the n+1 problem + +The n+1 problem occurs when you loop through the results of a query and perform one additional query **per result**, resulting in `n` number of queries plus the original (n+1). This is a common problem with ORMs, particularly in combination with GraphQL, because it is not always immediately obvious that your code is generating inefficient queries. + +### Solving n+1 in GraphQL with `findUnique()` and Prisma Client's dataloader + +
+ + + +
+ +The Prisma Client dataloader automatically _batches_ `findUnique()` queries that occur in the same [tick](https://nodejs.org/en/learn/asynchronous-work/event-loop-timers-and-nexttick#processnexttick) and have the same `where` and `include` parameters if: + +- All criteria of the `where` filter are on scalar fields (unique or non-unique) of the same model you're querying. +- All criteria use the `equal` filter, whether that's via the shorthand or explicit syntax `(where: { field: , field1: { equals: } })`. +- No boolean operators or relation filters are present. + +Automatic batching of `findUnique()` is particularly useful in a **GraphQL context**. GraphQL runs a separate resolver function for every field, which can make it difficult to optimize a nested query. + +For example - the following GraphQL runs the `allUsers` resolver to get all users, and the `posts` resolver **once per user** to get each user's posts (n+1): + +```js +query { + allUsers { + id, + posts { + id + } + } +} +``` + +The `allUsers` query uses `user.findMany(..)` to return all users: + +```ts highlight=7;normal +const Query = objectType({ + name: 'Query', + definition(t) { + t.nonNull.list.nonNull.field('allUsers', { + type: 'User', + resolve: (_parent, _args, context) => { + return context.prisma.user.findMany() + }, + }) + }, +}) +``` + +This results in a single SQL query: + +```js +{ + timestamp: 2021-02-19T09:43:06.332Z, + query: 'SELECT `dev`.`User`.`id`, `dev`.`User`.`email`, `dev`.`User`.`name` FROM `dev`.`User` WHERE 1=1 LIMIT ? OFFSET ?', + params: '[-1,0]', + duration: 0, + target: 'quaint::connector::metrics' +} +``` + +However, the resolver function for `posts` is then invoked **once per user**. This results in a `findMany()` query **✘ per user** rather than a single `findMany()` to return all posts by all users (expand CLI output to see queries). + + + + +```ts highlight=10-13;normal; +const User = objectType({ + name: 'User', + definition(t) { + t.nonNull.int('id') + t.string('name') + t.nonNull.string('email') + t.nonNull.list.nonNull.field('posts', { + type: 'Post', + resolve: (parent, _, context) => { + return context.prisma.post.findMany({ + where: { authorId: parent.id || undefined }, + }) + }, + }) + }, +}) +``` + + + + +```js no-copy +{ + timestamp: 2021-02-19T09:43:06.343Z, + query: 'SELECT `dev`.`Post`.`id`, `dev`.`Post`.`createdAt`, `dev`.`Post`.`updatedAt`, `dev`.`Post`.`title`, `dev`.`Post`.`content`, `dev`.`Post`.`published`, `dev`.`Post`.`viewCount`, `dev`.`Post`.`authorId` FROM `dev`.`Post` WHERE `dev`.`Post`.`authorId` = ? LIMIT ? OFFSET ?', + params: '[1,-1,0]', + duration: 0, + target: 'quaint::connector::metrics' +} +{ + timestamp: 2021-02-19T09:43:06.347Z, + query: 'SELECT `dev`.`Post`.`id`, `dev`.`Post`.`createdAt`, `dev`.`Post`.`updatedAt`, `dev`.`Post`.`title`, `dev`.`Post`.`content`, `dev`.`Post`.`published`, `dev`.`Post`.`viewCount`, `dev`.`Post`.`authorId` FROM `dev`.`Post` WHERE `dev`.`Post`.`authorId` = ? LIMIT ? OFFSET ?', + params: '[3,-1,0]', + duration: 0, + target: 'quaint::connector::metrics' +} +{ + timestamp: 2021-02-19T09:43:06.348Z, + query: 'SELECT `dev`.`Post`.`id`, `dev`.`Post`.`createdAt`, `dev`.`Post`.`updatedAt`, `dev`.`Post`.`title`, `dev`.`Post`.`content`, `dev`.`Post`.`published`, `dev`.`Post`.`viewCount`, `dev`.`Post`.`authorId` FROM `dev`.`Post` WHERE `dev`.`Post`.`authorId` = ? LIMIT ? OFFSET ?', + params: '[2,-1,0]', + duration: 0, + target: 'quaint::connector::metrics' +} +{ + timestamp: 2021-02-19T09:43:06.348Z, + query: 'SELECT `dev`.`Post`.`id`, `dev`.`Post`.`createdAt`, `dev`.`Post`.`updatedAt`, `dev`.`Post`.`title`, `dev`.`Post`.`content`, `dev`.`Post`.`published`, `dev`.`Post`.`viewCount`, `dev`.`Post`.`authorId` FROM `dev`.`Post` WHERE `dev`.`Post`.`authorId` = ? LIMIT ? OFFSET ?', + params: '[4,-1,0]', + duration: 0, + target: 'quaint::connector::metrics' +} +{ + timestamp: 2021-02-19T09:43:06.348Z, + query: 'SELECT `dev`.`Post`.`id`, `dev`.`Post`.`createdAt`, `dev`.`Post`.`updatedAt`, `dev`.`Post`.`title`, `dev`.`Post`.`content`, `dev`.`Post`.`published`, `dev`.`Post`.`viewCount`, `dev`.`Post`.`authorId` FROM `dev`.`Post` WHERE `dev`.`Post`.`authorId` = ? LIMIT ? OFFSET ?', + params: '[5,-1,0]', + duration: 0, + target: 'quaint::connector::metrics' +} +// And so on +``` + + + + +#### Solution 1: Batching queries with the fluent API + +Use `findUnique()` in combination with [the fluent API](/orm/prisma-client/queries/relation-queries#fluent-api) (`.posts()`) as shown to return a user's posts. Even though the resolver is called once per user, the Prisma dataloader in Prisma Client **✔ batches the `findUnique()` queries**. + +:::info + +It may seem counterintitive to use a `prisma.user.findUnique(...).posts()` query to return posts instead of `prisma.posts.findMany()` - particularly as the former results in two queries rather than one. + +The **only** reason you need to use the fluent API (`user.findUnique(...).posts()`) to return posts is that the dataloader in Prisma Client batches `findUnique()` queries and does not currently [batch `findMany()` queries](https://github.com/prisma/prisma/issues/1477). + +When the dataloader batches `findMany()` queries or your query has the `relationStrategy` set to `join`, you no longer need to use `findUnique()` with the fluent API in this way. + +::: + + + + +```ts highlight=13-18;add|10-12;delete +const User = objectType({ + name: 'User', + definition(t) { + t.nonNull.int('id') + t.string('name') + t.nonNull.string('email') + t.nonNull.list.nonNull.field('posts', { + type: 'Post', + resolve: (parent, _, context) => { + //delete-start + return context.prisma.post.findMany({ + where: { authorId: parent.id || undefined }, + }) + //delete-end + //add-start + return context.prisma.user + .findUnique({ + where: { id: parent.id || undefined }, + }) + .posts() + }, + //add-end + }) + }, +}) +``` + + + + +```js no-copy +{ + timestamp: 2021-02-19T09:59:46.340Z, + query: 'SELECT `dev`.`User`.`id`, `dev`.`User`.`email`, `dev`.`User`.`name` FROM `dev`.`User` WHERE 1=1 LIMIT ? OFFSET ?', + params: '[-1,0]', + duration: 0, + target: 'quaint::connector::metrics' +} +{ + timestamp: 2021-02-19T09:59:46.350Z, + query: 'SELECT `dev`.`User`.`id` FROM `dev`.`User` WHERE `dev`.`User`.`id` IN (?,?,?) LIMIT ? OFFSET ?', + params: '[1,2,3,-1,0]', + duration: 0, + target: 'quaint::connector::metrics' +} +{ + timestamp: 2021-02-19T09:59:46.350Z, + query: 'SELECT `dev`.`Post`.`id`, `dev`.`Post`.`createdAt`, `dev`.`Post`.`updatedAt`, `dev`.`Post`.`title`, `dev`.`Post`.`content`, `dev`.`Post`.`published`, `dev`.`Post`.`viewCount`, `dev`.`Post`.`authorId` FROM `dev`.`Post` WHERE `dev`.`Post`.`authorId` IN (?,?,?) LIMIT ? OFFSET ?', + params: '[1,2,3,-1,0]', + duration: 0, + target: 'quaint::connector::metrics' +} +``` + + + + +If the `posts` resolver is invoked once per user, the dataloader in Prisma Client groups `findUnique()` queries with the same parameters and selection set. Each group is optimized into a single `findMany()`. + +#### Solution 2: Using JOINs to perform queries + +You can perform the query with a [database join](/orm/prisma-client/queries/relation-queries#relation-load-strategies-preview) by setting `relationLoadStrategy` to `"join"`, ensuring that only **one** query is executed against the database. + +```ts +const User = objectType({ + name: 'User', + definition(t) { + t.nonNull.int('id') + t.string('name') + t.nonNull.string('email') + t.nonNull.list.nonNull.field('posts', { + type: 'Post', + resolve: (parent, _, context) => { + return context.prisma.post.findMany({ + relationLoadStrategy: "join", + where: { authorId: parent.id || undefined }, + }) + }, + }) + }, +}) +``` + +### n+1 in other contexts + +The n+1 problem is most commonly seen in a GraphQL context because you have to find a way to optimize a single query across multiple resolvers. However, you can just as easily introduce the n+1 problem by looping through results with `forEach` in your own code. + +The following code results in n+1 queries - one `findMany()` to get all users, and one `findMany()` **per user** to get each user's posts: + + + + +```ts +// One query to get all users +const users = await prisma.user.findMany({}) + +// One query PER USER to get all posts +users.forEach(async (usr) => { + const posts = await prisma.post.findMany({ + where: { + authorId: usr.id, + }, + }) + + // Do something with each users' posts +}) +``` + + + + +```sql no-copy +SELECT "public"."User"."id", "public"."User"."email", "public"."User"."name" FROM "public"."User" WHERE 1=1 OFFSET $1 +SELECT "public"."Post"."id", "public"."Post"."title" FROM "public"."Post" WHERE "public"."Post"."authorId" = $1 OFFSET $2 +SELECT "public"."Post"."id", "public"."Post"."title" FROM "public"."Post" WHERE "public"."Post"."authorId" = $1 OFFSET $2 +SELECT "public"."Post"."id", "public"."Post"."title" FROM "public"."Post" WHERE "public"."Post"."authorId" = $1 OFFSET $2 +SELECT "public"."Post"."id", "public"."Post"."title" FROM "public"."Post" WHERE "public"."Post"."authorId" = $1 OFFSET $2 +/* ..and so on .. */ +``` + + + + +This is not an efficient way to query. Instead, you can: + +- Use nested reads ([`include`](/orm/reference/prisma-client-reference#include) ) to return users and related posts +- Use the [`in`](/orm/reference/prisma-client-reference#in) filter +- Set the [`relationLoadStrategy`](/orm/prisma-client/queries/relation-queries#relation-load-strategies-preview) to `"join"` + +#### Solving n+1 with `include` + +You can use `include` to return each user's posts. This only results in **two** SQL queries - one to get users, and one to get posts. This is known as a [nested read](/orm/prisma-client/queries/relation-queries#nested-reads). + + + + +```ts +const usersWithPosts = await prisma.user.findMany({ + include: { + posts: true, + }, +}) +``` + + + + +```sql no-copy +SELECT "public"."User"."id", "public"."User"."email", "public"."User"."name" FROM "public"."User" WHERE 1=1 OFFSET $1 +SELECT "public"."Post"."id", "public"."Post"."title", "public"."Post"."authorId" FROM "public"."Post" WHERE "public"."Post"."authorId" IN ($1,$2,$3,$4) OFFSET $5 +``` + + + + +#### Solving n+1 with `in` + +If you have a list of user IDs, you can use the `in` filter to return all posts where the `authorId` is `in` that list of IDs: + + + + +```ts +const users = await prisma.user.findMany({}) + +const userIds = users.map((x) => x.id) + +const posts = await prisma.post.findMany({ + where: { + authorId: { + in: userIds, + }, + }, +}) +``` + + + + +```sql no-copy +SELECT "public"."User"."id", "public"."User"."email", "public"."User"."name" FROM "public"."User" WHERE 1=1 OFFSET $1 +SELECT "public"."Post"."id", "public"."Post"."createdAt", "public"."Post"."updatedAt", "public"."Post"."title", "public"."Post"."content", "public"."Post"."published", "public"."Post"."authorId" FROM "public"."Post" WHERE "public"."Post"."authorId" IN ($1,$2,$3,$4) OFFSET $5 +``` + + + + +#### Solving n+1 with `relationLoadStrategy: "join"` + +You can perform the query with a [database join](/orm/prisma-client/queries/relation-queries#relation-load-strategies-preview) by setting `relationLoadStrategy` to `"join"`, ensuring that only **one** query is executed against the database. + +```ts +const users = await prisma.user.findMany({}) + +const userIds = users.map((x) => x.id) + +const posts = await prisma.post.findMany({ + relationLoadStrategy: "join", + where: { + authorId: { + in: userIds, + }, + }, +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/index.mdx new file mode 100644 index 0000000000..befc525670 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/100-queries/index.mdx @@ -0,0 +1,10 @@ +--- +title: 'Queries' +metaTitle: 'Prisma Client Queries' +metaDescription: 'Learn about the database queries you can send with Prisma Client.' +hide_table_of_contents: true +--- + +## In this section + + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/100-typedsql.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/100-typedsql.mdx new file mode 100644 index 0000000000..c293364fa7 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/100-typedsql.mdx @@ -0,0 +1,230 @@ +--- +title: 'TypedSQL' +metaTitle: 'Writing Type-safe SQL with TypedSQL and Prisma Client' +metaDescription: 'Learn how to use TypedSQL to write fully type-safe SQL queries that are compatible with any SQL console and Prisma Client.' +sidebar_class_name: preview-badge +--- + +## Getting started with TypedSQL + +To start using TypedSQL in your Prisma project, follow these steps: + +1. Ensure you have `@prisma/client` and `prisma` installed and updated to at least version `5.19.0`. + + ```terminal + npm install @prisma/client@latest + npm install -D prisma@latest + ``` + +1. Add the `typedSql` preview feature flag to your `schema.prisma` file: + + ```prisma + generator client { + provider = "prisma-client-js" + previewFeatures = ["typedSql"] + } + ``` + +1. Create a `sql` directory inside your `prisma` directory. This is where you'll write your SQL queries. + + ```terminal + mkdir -p prisma/sql + ``` + +1. Create a new `.sql` file in your `prisma/sql` directory. For example, `getUsersWithPosts.sql`. Note that the file name must be a valid JS identifier and cannot start with a `$`. + +1. Write your SQL queries in your new `.sql` file. For example: + + ```sql title="prisma/sql/getUsersWithPosts.sql" + SELECT u.id, u.name, COUNT(p.id) as "postCount" + FROM "User" u + LEFT JOIN "Post" p ON u.id = p."authorId" + GROUP BY u.id, u.name + ``` + +1. Generate Prisma Client with the `sql` flag to ensure TypeScript functions and types for your SQL queries are created: + + :::warning + + Make sure that any pending migrations are applied before generating the client with the `sql` flag. + + ::: + + ```terminal + prisma generate --sql + ``` + + If you don't want to regenerate the client after every change, this command also works with the existing `--watch` flag: + + ```terminal + prisma generate --sql --watch + ``` + +1. Now you can import and use your SQL queries in your TypeScript code: + + ```typescript title="/src/index.ts" + import { PrismaClient } from '@prisma/client' + import { getUsersWithPosts } from '@prisma/client/sql' + + const prisma = new PrismaClient() + + const usersWithPostCounts = await prisma.$queryRawTyped(getUsersWithPosts()) + console.log(usersWithPostCounts) + ``` + +## Passing Arguments to TypedSQL Queries + +To pass arguments to your TypedSQL queries, you can use parameterized queries. This allows you to write flexible and reusable SQL statements while maintaining type safety. Here's how to do it: + +1. In your SQL file, use placeholders for the parameters you want to pass. The syntax for placeholders depends on your database engine: + + + + For PostgreSQL, use the positional placeholders `$1`, `$2`, etc.: + + ```sql title="prisma/sql/getUsersByAge.sql" + SELECT id, name, age + FROM users + WHERE age > $1 AND age < $2 + ``` + + + For MySQL, use the positional placeholders `?`: + + ```sql title="prisma/sql/getUsersByAge.sql" + SELECT id, name, age + FROM users + WHERE age > ? AND age < ? + ``` + + + In SQLite, there are a number of different placeholders you can use. Postional placeholders (`$1`, `$2`, etc.), general placeholders (`?`), and named placeholders (`:minAge`, `:maxAge`, etc.) are all available. For this example, we'll use named placeholders `:minAge` and `:maxAge`: + + ```sql title="prisma/sql/getUsersByAge.sql" + SELECT id, name, age + FROM users + WHERE age > :minAge AND age < :maxAge + ``` + + + + :::note + + See below for information on how to [define argument types in your SQL files](#defining-argument-types-in-your-sql-files). + + ::: + +1. When using the generated function in your TypeScript code, pass the arguments as additional parameters to `$queryRawTyped`: + + ```typescript title="/src/index.ts" + import { PrismaClient } from '@prisma/client' + import { getUsersByAge } from '@prisma/client/sql' + + const prisma = new PrismaClient() + + const minAge = 18 + const maxAge = 30 + const users = await prisma.$queryRawTyped(getUsersByAge(minAge, maxAge)) + console.log(users) + ``` + +By using parameterized queries, you ensure type safety and protect against SQL injection vulnerabilities. The TypedSQL generator will create the appropriate TypeScript types for the parameters based on your SQL query, providing full type checking for both the query results and the input parameters. + +### Passing array arguments to TypedSQL + +TypedSQL supports passing arrays as arguments for PostgreSQL. Use PostgreSQL's `ANY` operator with an array parameter. + +```sql title="prisma/sql/getUsersByIds.sql" +SELECT id, name, email +FROM users +WHERE id = ANY($1) +``` + +```typescript title="/src/index.ts" +import { PrismaClient } from '@prisma/client' +import { getUsersByIds } from '@prisma/client/sql' + +const prisma = new PrismaClient() + +const userIds = [1, 2, 3] +const users = await prisma.$queryRawTyped(getUsersByIds(userIds)) +console.log(users) +``` + +TypedSQL will generate the appropriate TypeScript types for the array parameter, ensuring type safety for both the input and the query results. + +:::note + +When passing array arguments, be mindful of the maximum number of placeholders your database supports in a single query. For very large arrays, you may need to split the query into multiple smaller queries. + +::: + +### Defining argument types in your SQL files + +Argument typing in TypedSQL is accomplished via specific comments in your SQL files. These comments are of the form: + +```sql +-- @param {Type} $N:alias optional description +``` + +Where `Type` is a valid database type, `N` is the position of the argument in the query, and `alias` is an optional alias for the argument that is used in the TypeScript type. + +As an example, if you needed to type a single string argument with the alias `name` and the description "The name of the user", you would add the following comment to your SQL file: +```sql +-- @param {String} $1:name The name of the user +``` + +Currently accepted types are `Int`, `BigInt`, `Float`, `Boolean`, `String`, `DateTime`, `Json`, `Bytes`, and `Decimal`. + +Taking the [example from above](#passing-arguments-to-typedsql-queries), the SQL file would look like this: + +```sql +-- @param {Int} $1:minAge +-- @param {Int} $2:maxAge +SELECT id, name, age +FROM users +WHERE age > $1 AND age < $2 +``` + +The format of argument type definitions is the same regardless of the database engine. + +:::note + +Manually argument type definitions are not supported for array arguments. For these arguments, you will need to rely on the type inference provided by TypedSQL. + +::: + +## Examples + +For practical examples of how to use TypedSQL in various scenarios, please refer to the [Prisma Examples repo](https://github.com/prisma/prisma-examples). This repo contains a collection of ready-to-run Prisma example projects that demonstrate best practices and common use cases, including TypedSQL implementations. + +## Limitations of TypedSQL + +### Supported Databases + +TypedSQL supports modern versions of MySQL and PostgreSQL without any further configuration. For MySQL versions older than 8.0 and all SQLite versions, you will need to manually [describe argument types](#defining-argument-types-in-your-sql-files) in your SQL files. The types of inputs are inferred in all supported versions of PostgreSQL and MySQL 8.0 and later. + +TypedSQL does not work with MongoDB, as it is specifically designed for SQL databases. + +### Active Database Connection Required + +TypedSQL requires an active database connection to function properly. This means you need to have a running database instance that Prisma can connect to when generating the client with the `--sql` flag. If a `directUrl` is provided in your Prisma configuration, TypedSQL will use that for the connection. + +### Dynamic SQL Queries with Dynamic Columns + +TypedSQL does not natively support constructing SQL queries with dynamically added columns. When you need to create a query where the columns are determined at runtime, you must use the `$queryRaw` and `$executeRaw` methods. These methods allow for the execution of raw SQL, which can include dynamic column selections. + +**Example of a query using dynamic column selection:** + +```typescript +const columns = 'name, email, age'; // Columns determined at runtime +const result = await prisma.$queryRawUnsafe( + `SELECT ${columns} FROM Users WHERE active = true` +); +``` + +In this example, the columns to be selected are defined dynamically and included in the SQL query. While this approach provides flexibility, it requires careful attention to security, particularly to [avoid SQL injection vulnerabilities](/orm/prisma-client/using-raw-sql/raw-queries#sql-injection-prevention). Additionally, using raw SQL queries means foregoing the type-safety and DX of TypedSQL. + +## Acknowledgements + +This feature was heavily inspired by [PgTyped](https://github.com/adelsz/pgtyped) and [SQLx](https://github.com/launchbadge/sqlx). Additionally, SQLite parsing is handled by SQLx. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/200-raw-queries.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/200-raw-queries.mdx new file mode 100644 index 0000000000..e0ff6126d1 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/200-raw-queries.mdx @@ -0,0 +1,867 @@ +--- +title: "Raw queries" +metaTitle: "Raw queries" +metaDescription: "Learn how you can send raw SQL and MongoDB queries to your database using the raw() methods from the Prisma Client API." +--- + +:::warning + +With Prisma ORM `5.19.0`, we have released [TypedSQL](/orm/prisma-client/using-raw-sql). TypedSQL is a new way to write SQL queries that are type-safe and even easier to add to your workflow. + +We strongly recommend using TypedSQL queries over the legacy raw queries described below whenever possible. + +::: + +Prisma Client supports the option of sending raw queries to your database. You may wish to use raw queries if: + +- you want to run a heavily optimized query +- you require a feature that Prisma Client does not yet support (please [consider raising an issue](https://github.com/prisma/prisma/issues/new/choose)) + +Raw queries are available for all relational databases Prisma ORM supports. In addition, from version `3.9.0` raw queries are supported in MongoDB. For more details, see the relevant sections: + +- [Raw queries with relational databases](#raw-queries-with-relational-databases) +- [Raw queries with MongoDB](#raw-queries-with-mongodb) + +## Raw queries with relational databases + +For relational databases, Prisma Client exposes four methods that allow you to send raw queries. You can use: + +- `$queryRaw` to return actual records (for example, using `SELECT`). +- `$executeRaw` to return a count of affected rows (for example, after an `UPDATE` or `DELETE`). +- `$queryRawUnsafe` to return actual records (for example, using `SELECT`) using a raw string. +- `$executeRawUnsafe` to return a count of affected rows (for example, after an `UPDATE` or `DELETE`) using a raw string. + +The methods with "Unsafe" in the name are a lot more flexible but are at **significant risk of making your code vulnerable to SQL injection**. + +The other two methods are safe to use with a simple template tag, no string building, and no concatenation. **However**, caution is required for more complex use cases as it is still possible to introduce SQL injection if these methods are used in certain ways. For more details, see the [SQL injection prevention](#sql-injection-prevention) section below. + +> **Note**: All methods in the above list can only run **one** query at a time. You cannot append a second query - for example, calling any of them with `select 1; select 2;` will not work. + +### `$queryRaw` + +`$queryRaw` returns actual database records. For example, the following `SELECT` query returns all fields for each record in the `User` table: + +```ts no-lines +const result = await prisma.$queryRaw`SELECT * FROM User`; +``` + +The method is implemented as a [tagged template](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates), which allows you to pass a template literal where you can easily insert your [variables](#using-variables). In turn, Prisma Client creates prepared statements that are safe from SQL injections: + +```ts no-lines +const email = "emelie@prisma.io"; +const result = await prisma.$queryRaw`SELECT * FROM User WHERE email = ${email}`; +``` + +You can also use the [`Prisma.sql`](#tagged-template-helpers) helper, in fact, the `$queryRaw` method will **only accept** a template string or the `Prisma.sql` helper: + +```ts no-lines +const email = "emelie@prisma.io"; +const result = await prisma.$queryRaw(Prisma.sql`SELECT * FROM User WHERE email = ${email}`); +``` + + + +If you use string building to incorporate untrusted input into queries passed to this method, then you open up the possibility for SQL injection attacks. SQL injection attacks can expose your data to modification or deletion. The preferred mechanism would be to include the text of the query at the point that you run this method. For more information on this risk and also examples of how to prevent it, see the [SQL injection prevention](#sql-injection-prevention) section below. + + + +#### Considerations + +Be aware that: + +- Template variables cannot be used inside SQL string literals. For example, the following query would **not** work: + + ```ts no-lines + const name = "Bob"; + await prisma.$queryRaw`SELECT 'My name is ${name}';`; + ``` + + Instead, you can either pass the whole string as a variable, or use string concatenation: + + ```ts no-lines + const name = "My name is Bob"; + await prisma.$queryRaw`SELECT ${name};`; + ``` + + ```ts no-lines + const name = "Bob"; + await prisma.$queryRaw`SELECT 'My name is ' || ${name};`; + ``` + +- Template variables can only be used for data values (such as `email` in the example above). Variables cannot be used for identifiers such as column names, table names or database names, or for SQL keywords. For example, the following two queries would **not** work: + + ```ts no-lines + const myTable = "user"; + await prisma.$queryRaw`SELECT * FROM ${myTable};`; + ``` + + ```ts no-lines + const ordering = "desc"; + await prisma.$queryRaw`SELECT * FROM Table ORDER BY ${ordering};`; + ``` + +- Prisma maps any database values returned by `$queryRaw` and `$queryRawUnsafe` to their corresponding JavaScript types. [Learn more](#raw-query-type-mapping). + +- `$queryRaw` does not support dynamic table names in PostgreSQL databases. [Learn more](#dynamic-table-names-in-postgresql) + +#### Return type + +`$queryRaw` returns an array. Each object corresponds to a database record: + +```json5 +[ + { id: 1, email: "emelie@prisma.io", name: "Emelie" }, + { id: 2, email: "yin@prisma.io", name: "Yin" }, +] +``` + +You can also [type the results of `$queryRaw`](#typing-queryraw-results). + +#### Signature + +```ts no-lines +$queryRaw(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): PrismaPromise; +``` + +#### Typing `$queryRaw` results + +`PrismaPromise` uses a [generic type parameter `T`](https://www.typescriptlang.org/docs/handbook/generics.html). You can determine the type of `T` when you invoke the `$queryRaw` method. In the following example, `$queryRaw` returns `User[]`: + +```ts +// import the generated `User` type from the `@prisma/client` module +import { User } from "@prisma/client"; + +const result = await prisma.$queryRaw`SELECT * FROM User`; +// result is of type: `User[]` +``` + +> **Note**: If you do not provide a type, `$queryRaw` defaults to `unknown`. + +If you are selecting **specific fields** of the model or want to include relations, refer to the documentation about [leveraging Prisma Client's generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types#problem-using-variations-of-the-generated-model-type) if you want to make sure that the results are properly typed. + +#### Type caveats when using raw SQL + +When you type the results of `$queryRaw`, the raw data might not always match the suggested TypeScript type. For example, the following Prisma model includes a `Boolean` field named `published`: + +```prisma highlight=3;normal +model Post { + id Int @id @default(autoincrement()) + //highlight-next-line + published Boolean @default(false) + title String + content String? +} +``` + +The following query returns all posts. It then prints out the value of the `published` field for each `Post`: + +```ts +const result = await prisma.$queryRaw`SELECT * FROM Post`; + +result.forEach((x) => { + console.log(x.published); +}); +``` + +For regular CRUD queries, the Prisma Client query engine standardizes the return type for all databases. **Using the raw queries does not**. If the database provider is MySQL, the returned values are `1` or `0`. However, if the database provider is PostgreSQL, the values are `true` or `false`. + +> **Note**: Prisma sends JavaScript integers to PostgreSQL as `INT8`. This might conflict with your user-defined functions that accept only `INT4` as input. If you use `$queryRaw` in conjunction with a PostgreSQL database, update the input types to `INT8`, or cast your query parameters to `INT4`. + +#### Dynamic table names in PostgreSQL + +[It is not possible to interpolate table names](#considerations). This means that you cannot use dynamic table names with `$queryRaw`. Instead, you must use [`$queryRawUnsafe`](#queryrawunsafe), as follows: + +```ts +let userTable = "User"; +let result = await prisma.$queryRawUnsafe(`SELECT * FROM ${userTable}`); +``` + +Note that if you use `$queryRawUnsafe` in conjunction with user inputs, you risk SQL injection attacks. [Learn more](#queryrawunsafe). + +### `$queryRawUnsafe()` + +The `$queryRawUnsafe()` method allows you to pass a raw string (or template string) to the database. + + + +If you use this method with user inputs (in other words, `SELECT * FROM table WHERE columnx = ${userInput}`), then you open up the possibility for SQL injection attacks. SQL injection attacks can expose your data to modification or deletion.

+ +Wherever possible you should use the `$queryRaw` method instead. When used correctly `$queryRaw` method is significantly safer but note that the `$queryRaw` method can also be made vulnerable in certain circumstances. For more information, see the [SQL injection prevention](#sql-injection-prevention) section below. + +
+ +The following query returns all fields for each record in the `User` table: + +```ts +// import the generated `User` type from the `@prisma/client` module +import { User } from "@prisma/client"; + +const result = await prisma.$queryRawUnsafe("SELECT * FROM User"); +``` + +You can also run a parameterized query. The following example returns all users whose email contains the string `emelie@prisma.io`: + +```ts +prisma.$queryRawUnsafe("SELECT * FROM users WHERE email = $1", "emelie@prisma.io"); +``` + +> **Note**: Prisma sends JavaScript integers to PostgreSQL as `INT8`. This might conflict with your user-defined functions that accept only `INT4` as input. If you use a parameterized `$queryRawUnsafe` query in conjunction with a PostgreSQL database, update the input types to `INT8`, or cast your query parameters to `INT4`. + +For more details on using parameterized queries, see the [parameterized queries](#parameterized-queries) section below. + +#### Signature + +```ts no-lines +$queryRawUnsafe(query: string, ...values: any[]): PrismaPromise; +``` + +### `$executeRaw` + +`$executeRaw` returns the _number of rows affected by a database operation_, such as `UPDATE` or `DELETE`. This function does **not** return database records. The following query updates records in the database and returns a count of the number of records that were updated: + +```ts +const result: number = + await prisma.$executeRaw`UPDATE User SET active = true WHERE emailValidated = true`; +``` + +The method is implemented as a [tagged template](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates), which allows you to pass a template literal where you can easily insert your [variables](#using-variables). In turn, Prisma Client creates prepared statements that are safe from SQL injections: + +```ts +const emailValidated = true; +const active = true; + +const result: number = + await prisma.$executeRaw`UPDATE User SET active = ${active} WHERE emailValidated = ${emailValidated};`; +``` + + + +If you use string building to incorporate untrusted input into queries passed to this method, then you open up the possibility for SQL injection attacks. SQL injection attacks can expose your data to modification or deletion. The preferred mechanism would be to include the text of the query at the point that you run this method. For more information on this risk and also examples of how to prevent it, see the [SQL injection prevention](#sql-injection-prevention) section below. + + + +#### Considerations + +Be aware that: + +- `$executeRaw` does not support multiple queries in a single string (for example, `ALTER TABLE` and `CREATE TABLE` together). +- Prisma Client submits prepared statements, and prepared statements only allow a subset of SQL statements. For example, `START TRANSACTION` is not permitted. You can learn more about [the syntax that MySQL allows in Prepared Statements here](https://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html). +- [`PREPARE` does not support `ALTER`](https://www.postgresql.org/docs/current/sql-prepare.html) - see the [workaround](#alter-limitation-postgresql). +- Template variables cannot be used inside SQL string literals. For example, the following query would **not** work: + + ```ts no-lines + const name = "Bob"; + await prisma.$executeRaw`UPDATE user SET greeting = 'My name is ${name}';`; + ``` + + Instead, you can either pass the whole string as a variable, or use string concatenation: + + ```ts no-lines + const name = "My name is Bob"; + await prisma.$executeRaw`UPDATE user SET greeting = ${name};`; + ``` + + ```ts no-lines + const name = "Bob"; + await prisma.$executeRaw`UPDATE user SET greeting = 'My name is ' || ${name};`; + ``` + +- Template variables can only be used for data values (such as `email` in the example above). Variables cannot be used for identifiers such as column names, table names or database names, or for SQL keywords. For example, the following two queries would **not** work: + + ```ts no-lines + const myTable = "user"; + await prisma.$executeRaw`UPDATE ${myTable} SET active = true;`; + ``` + + ```ts no-lines + const ordering = "desc"; + await prisma.$executeRaw`UPDATE User SET active = true ORDER BY ${desc};`; + ``` + +#### Return type + +`$executeRaw` returns a `number`. + +#### Signature + +```ts +$executeRaw(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): PrismaPromise; +``` + +### `$executeRawUnsafe()` + +The `$executeRawUnsafe()` method allows you to pass a raw string (or template string) to the database. Like `$executeRaw`, it does **not** return database records, but returns the number of rows affected. + + + +If you use this method with user inputs (in other words, `SELECT * FROM table WHERE columnx = ${userInput}`), then you open up the possibility for SQL injection attacks. SQL injection attacks can expose your data to modification or deletion.

+ +Wherever possible you should use the `$executeRaw` method instead. When used correctly `$executeRaw` method is significantly safer but note that the `$executeRaw` method can also be made vulnerable in certain circumstances. For more information, see the [SQL injection prevention](#sql-injection-prevention) section below. + +
+ +The following example uses a template string to update records in the database. It then returns a count of the number of records that were updated: + +```ts +const emailValidated = true; +const active = true; + +const result = await prisma.$executeRawUnsafe( + `UPDATE User SET active = ${active} WHERE emailValidated = ${emailValidated}` +); +``` + +The same can be written as a parameterized query: + +```ts +const result = prisma.$executeRawUnsafe( + "UPDATE User SET active = $1 WHERE emailValidated = $2", + "yin@prisma.io", + true +); +``` + +For more details on using parameterized queries, see the [parameterized queries](#parameterized-queries) section below. + +#### Signature + +```ts no-lines +$executeRawUnsafe(query: string, ...values: any[]): PrismaPromise; +``` + +### Raw query type mapping + +Prisma maps any database values returned by `$queryRaw` and `$queryRawUnsafe`to their corresponding [JavaScript types](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures). This behavior is the same as for regular Prisma query methods like `findMany()`. + + + +**Feature availability:** + +- In v3.14.x and v3.15.x, raw query type mapping was available with the preview feature `improvedQueryRaw`. We made raw query type mapping [Generally Available](/orm/more/releases#generally-available-ga) in version 4.0.0, so you do not need to use `improvedQueryRaw` in version 4.0.0 or later. +- Before version 4.0.0, raw query type mapping was not available for SQLite. + + + +As an example, take a raw query that selects columns with `BigInt`, `Bytes`, `Decimal` and `Date` types from a table: + + + + + +```ts +const result = await prisma.$queryRaw`SELECT bigint, bytes, decimal, date FROM "Table";`; + +console.log(result); +``` + + + + + +```terminal no-copy wrap +{ bigint: BigInt("123"), bytes: ), decimal: Decimal("12.34"), date: Date("") } +``` + + + + + +In the `result` object, the database values have been mapped to the corresponding JavaScript types. + +The following table shows the conversion between types used in the database and the JavaScript type returned by the raw query: + +| Database type | JavaScript type | +| ----------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| Text | `String` | +| 32-bit integer | `Number` | +| 32-bit unsigned integer | `BigInt` | +| Floating point number | `Number` | +| Double precision number | `Number` | +| 64-bit integer | `BigInt` | +| Decimal / numeric | `Decimal` | +| Bytes | `Uint8Array` ([before v6](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-6#usage-of-buffer): `Buffer`) | +| Json | `Object` | +| DateTime | `Date` | +| Date | `Date` | +| Time | `Date` | +| Uuid | `String` | +| Xml | `String` | + +Note that the exact name for each database type will vary between databases – for example, the boolean type is known as `boolean` in PostgreSQL and `STRING` in CockroachDB. See the [Scalar types reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for full details of type names for each database. + +### Raw query typecasting behavior + +Raw queries with Prisma Client might require parameters to be in the expected types of the SQL function or query. Prisma Client does not do subtle, implicit casts. + +As an example, take the following query using PostgreSQL's `LENGTH` function, which only accepts the `text` type as an input: + +```ts +await prisma.$queryRaw`SELECT LENGTH(${42});`; +``` + +This query returns an error: + +```terminal wrap +// ERROR: function length(integer) does not exist +// HINT: No function matches the given name and argument types. You might need to add explicit type casts. +``` + +The solution in this case is to explicitly cast `42` to the `text` type: + +```ts +await prisma.$queryRaw`SELECT LENGTH(${42}::text);`; +``` + +:::info + +**Feature availability:** This funtionality is [Generally Available](/orm/more/releases#generally-available-ga) since version 4.0.0. In v3.14.x and v3.15.x, it was available with the preview feature `improvedQueryRaw`. + +For the example above before version 4.0.0, Prisma ORM silently coerces `42` to `text` and does not require the explicit cast. + +On the other hand the following raw query now works correctly, returning an integer result, and failed before: + +```ts +await prisma.$queryRaw`SELECT ${1.5}::int as int`; + +// Now: [{ int: 2 }] +// Before: db error: ERROR: incorrect binary data format in bind parameter 1 +``` + +::: + +### Transactions + +In 2.10.0 and later, you can use `.$executeRaw()` and `.$queryRaw()` inside a [transaction](/orm/prisma-client/queries/transactions). + +### Using variables + +`$executeRaw` and `$queryRaw` are implemented as [**tagged templates**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates). Tagged templates are the recommended way to use variables with raw SQL in the Prisma Client. + +The following example includes a placeholder named `${userId}`: + +```ts +const userId = 42; +const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${userId};`; +``` + +✔ Benefits of using the tagged template versions of `$queryRaw` and `$executeRaw` include: + +- Prisma Client escapes all variables. +- Tagged templates are database-agnostic - you do not need to remember if variables should be written as `$1` (PostgreSQL) or `?` (MySQL). +- [SQL Template Tag](https://github.com/blakeembrey/sql-template-tag) give you access to [useful helpers](#tagged-template-helpers). +- Embedded, named variables are easier to read. + +> **Note**: You cannot pass a table or column name into a tagged template placeholder. For example, you cannot `SELECT ?` and pass in `*` or `id, name` based on some condition. + +#### Tagged template helpers + +Prisma Client specifically uses [SQL Template Tag](https://github.com/blakeembrey/sql-template-tag), which exposes a number of helpers. For example, the following query uses `join()` to pass in a list of IDs: + +```ts +import { Prisma } from "@prisma/client"; + +const ids = [1, 3, 5, 10, 20]; +const result = await prisma.$queryRaw`SELECT * FROM User WHERE id IN (${Prisma.join(ids)})`; +``` + +The following example uses the `empty` and `sql` helpers to change the query depending on whether `userName` is empty: + +```ts +import { Prisma } from "@prisma/client"; + +const userName = ""; +const result = await prisma.$queryRaw`SELECT * FROM User ${ + userName ? Prisma.sql`WHERE name = ${userName}` : Prisma.empty // Cannot use "" or NULL here! +}`; +``` + +#### `ALTER` limitation (PostgreSQL) + +PostgreSQL [does not support using `ALTER` in a prepared statement](https://www.postgresql.org/docs/current/sql-prepare.html), which means that the following queries **will not work**: + +```ts +await prisma.$executeRaw`ALTER USER prisma WITH PASSWORD "${password}"`; +await prisma.$executeRaw(Prisma.sql`ALTER USER prisma WITH PASSWORD "${password}"`); +``` + +You can use the following query, but be aware that this is potentially **unsafe** as `${password}` is not escaped: + +```ts +await prisma.$executeRawUnsafe('ALTER USER prisma WITH PASSWORD "$1"', password}) +``` + +### Unsupported types + +[`Unsupported` types](/orm/reference/prisma-schema-reference#unsupported) need to be cast to Prisma Client supported types before using them in `$queryRaw` or `$queryRawUnsafe`. For example, take the following model, which has a `location` field with an `Unsupported` type: + +```tsx +model Country { + location Unsupported("point")? +} +``` + +The following query on the unsupported field will **not** work: + +```tsx +await prisma.$queryRaw`SELECT location FROM Country;`; +``` + +Instead, cast `Unsupported` fields to any supported Prisma Client type, **if your `Unsupported` column supports the cast**. + +The most common type you may want to cast your `Unsupported` column to is `String`. For example, on PostgreSQL, this would map to the `text` type: + +```tsx +await prisma.$queryRaw`SELECT location::text FROM Country;`; +``` + +The database will thus provide a `String` representation of your data which Prisma Client supports. + +For details of supported Prisma types, see the [Prisma connector overview](/orm/overview/databases) for the relevant database. + +## SQL injection prevention + +The ideal way to avoid SQL injection in Prisma Client is to use the ORM models to perform queries wherever possible. + +Where this is not possible and raw queries are required, Prisma Client provides various raw methods, but it is important to use these methods safely. + +This section will provide various examples of using these methods safely and unsafely. You can test these examples in the [Prisma Playground](https://playground.prisma.io/examples). + +### In `$queryRaw` and `$executeRaw` + +#### Simple, safe use of `$queryRaw` and `$executeRaw` + +These methods can mitigate the risk of SQL injection by escaping all variables when you use tagged templates and sends all queries as prepared statements. + +```ts +$queryRaw`...`; // Tagged template +$executeRaw`...`; // Tagged template +``` + +The following example is safe ✅ from SQL Injection: + +```ts +const inputString = `'Sarah' UNION SELECT id, title FROM "Post"`; +const result = await prisma.$queryRaw`SELECT id, name FROM "User" WHERE name = ${inputString}`; + +console.log(result); +``` + +#### Unsafe use of `$queryRaw` and `$executeRaw` + +However, it is also possible to use these methods in unsafe ways. + +One way is by artificially generating a tagged template that unsafely concatenates user input. + +The following example is vulnerable ❌ to SQL Injection: + +```ts +// Unsafely generate query text +const inputString = `'Sarah' UNION SELECT id, title FROM "Post"`; // SQL Injection +const query = `SELECT id, name FROM "User" WHERE name = ${inputString}`; + +// Version for Typescript +const stringsArray: any = [...[query]]; + +// Version for Javascript +const stringsArray = [...[query]]; + +// Use the `raw` property to impersonate a tagged template +stringsArray.raw = [query]; + +// Use queryRaw +const result = await prisma.$queryRaw(stringsArray); +console.log(result); +``` + +Another way to make these methods vulnerable is misuse of the `Prisma.raw` function. + +The following examples are all vulnerable ❌ to SQL Injection: + +```ts +const inputString = `'Sarah' UNION SELECT id, title FROM "Post"`; +const result = await prisma.$queryRaw`SELECT id, name FROM "User" WHERE name = ${Prisma.raw( + inputString +)}`; +console.log(result); +``` + +```ts +const inputString = `'Sarah' UNION SELECT id, title FROM "Post"`; +const result = await prisma.$queryRaw( + Prisma.raw(`SELECT id, name FROM "User" WHERE name = ${inputString}`) +); +console.log(result); +``` + +```ts +const inputString = `'Sarah' UNION SELECT id, title FROM "Post"`; +const query = Prisma.raw(`SELECT id, name FROM "User" WHERE name = ${inputString}`); +const result = await prisma.$queryRaw(query); +console.log(result); +``` + +#### Safely using `$queryRaw` and `$executeRaw` in more complex scenarios + +##### Building raw queries separate to query execution + +If you want to build your raw queries elsewhere or separate to your parameters you will need to use one of the following methods. + +In this example, the `sql` helper method is used to build the query text by safely including the variable. It is safe ✅ from SQL Injection: + +```ts +// inputString can be untrusted input +const inputString = `'Sarah' UNION SELECT id, title FROM "Post"`; + +// Safe if the text query below is completely trusted content +const query = Prisma.sql`SELECT id, name FROM "User" WHERE name = ${inputString}`; + +const result = await prisma.$queryRaw(query); +console.log(result); +``` + +In this example which is safe ✅ from SQL Injection, the `sql` helper method is used to build the query text including a parameter marker for the input value. Each variable is represented by a marker symbol (`?` for MySQL, `$1`, `$2`, and so on for PostgreSQL). Note that the examples just show PostgreSQL queries. + +```ts +// Version for Typescript +const query: any; + +// Version for Javascript +const query; + +// Safe if the text query below is completely trusted content +query = Prisma.sql`SELECT id, name FROM "User" WHERE name = $1`; + +// inputString can be untrusted input +const inputString = `'Sarah' UNION SELECT id, title FROM "Post"`; +query.values = [inputString]; + +const result = await prisma.$queryRaw(query); +console.log(result); +``` + +> **Note**: PostgreSQL variables are represented by `$1`, etc + +##### Building raw queries elsewhere or in stages + +If you want to build your raw queries somewhere other than where the query is executed, the ideal way to do this is to create an `Sql` object from the segments of your query and pass it the parameter value. + +In the following example we have two variables to parameterize. The example is safe ✅ from SQL Injection as long as the query strings being passed to `Prisma.sql` only contain trusted content: + +```ts +// Example is safe if the text query below is completely trusted content +const query1 = `SELECT id, name FROM "User" WHERE name = `; // The first parameter would be inserted after this string +const query2 = ` OR name = `; // The second parameter would be inserted after this string + +const inputString1 = "Fred"; +const inputString2 = `'Sarah' UNION SELECT id, title FROM "Post"`; + +const query = Prisma.sql([query1, query2, ""], inputString1, inputString2); +const result = await prisma.$queryRaw(query); +console.log(result); +``` + +> Note: Notice that the string array being passed as the first parameter `Prisma.sql` needs to have an empty string at the end as the `sql` function expects one more query segment than the number of parameters. + +If you want to build your raw queries into one large string, this is still possible but requires some care as it is uses the potentially dangerous `Prisma.raw` method. You also need to build your query using the correct parameter markers for your database as Prisma won't be able to provide markers for the relevant database as it usually is. + +The following example is safe ✅ from SQL Injection as long as the query strings being passed to `Prisma.raw` only contain trusted content: + +```ts +// Version for Typescript +const query: any; + +// Version for Javascript +const query; + +// Example is safe if the text query below is completely trusted content +const query1 = `SELECT id, name FROM "User" `; +const query2 = `WHERE name = $1 `; + +query = Prisma.raw(`${query1}${query2}`); + +// inputString can be untrusted input +const inputString = `'Sarah' UNION SELECT id, title FROM "Post"`; +query.values = [inputString]; + +const result = await prisma.$queryRaw(query); +console.log(result); +``` + +### In `$queryRawUnsafe` and `$executeRawUnsafe` + +#### Using `$queryRawUnsafe` and `$executeRawUnsafe` unsafely + +If you cannot use tagged templates, you can instead use [`$queryRawUnsafe`](/orm/prisma-client/using-raw-sql/raw-queries#queryrawunsafe) or [`$executeRawUnsafe`](/orm/prisma-client/using-raw-sql/raw-queries#executerawunsafe). However, **be aware that these functions significantly increase the risk of SQL injection vulnerabilities in your code**. + +The following example concatenates `query` and `inputString`. Prisma Client ❌ **cannot** escape `inputString` in this example, which makes it vulnerable to SQL injection: + +```ts +const inputString = '"Sarah" UNION SELECT id, title, content FROM Post'; // SQL Injection +const query = "SELECT id, name, email FROM User WHERE name = " + inputString; +const result = await prisma.$queryRawUnsafe(query); + +console.log(result); +``` + +#### Parameterized queries + +As an alternative to tagged templates, `$queryRawUnsafe` supports standard parameterized queries where each variable is represented by a symbol (`?` for MySQL, `$1`, `$2`, and so on for PostgreSQL). Note that the examples just show PostgreSQL queries. + +The following example is safe ✅ from SQL Injection: + +```ts +const userName = "Sarah"; +const email = "sarah@prisma.io"; +const result = await prisma.$queryRawUnsafe( + "SELECT * FROM User WHERE (name = $1 OR email = $2)", + userName, + email +); +``` + +> **Note**: PostgreSQL variables are represented by `$1` and `$2` + +As with tagged templates, Prisma Client escapes all variables when they are provided in this way. + +> **Note**: You cannot pass a table or column name as a variable into a parameterized query. For example, you cannot `SELECT ?` and pass in `*` or `id, name` based on some condition. + +##### Parameterized PostgreSQL `ILIKE` query + +When you use `ILIKE`, the `%` wildcard character(s) should be included in the variable itself, not the query (`string`). This example is safe ✅ from SQL Injection. + +```ts +const userName = "Sarah"; +const emailFragment = "prisma.io"; +const result = await prisma.$queryRawUnsafe( + 'SELECT * FROM "User" WHERE (name = $1 OR email ILIKE $2)', + userName, + `%${emailFragment}` +); +``` + +> **Note**: Using `%$2` as an argument would not work + +## Raw queries with MongoDB + +For MongoDB in versions `3.9.0` and later, Prisma Client exposes three methods that allow you to send raw queries. You can use: + +- `$runCommandRaw` to run a command against the database +- `.findRaw` to find zero or more documents that match the filter. +- `.aggregateRaw` to perform aggregation operations on a collection. + +### `$runCommandRaw()` + +`$runCommandRaw()` runs a raw MongoDB command against the database. As input, it accepts all [MongoDB database commands](https://www.mongodb.com/docs/manual/reference/command/), with the following exceptions: + +- `find` (use [`findRaw()`](#findraw) instead) +- `aggregate` (use [`aggregateRaw()`](#aggregateraw) instead) + +When you use `$runCommandRaw()` to run a MongoDB database command, note the following: + +- The object that you pass when you invoke `$runCommandRaw()` must follow the syntax of the MongoDB database command. +- You must connect to the database with an appropriate role for the MongoDB database command. + +In the following example, a query inserts two records with the same `_id`. This bypasses normal document validation. + +```ts no-lines +prisma.$runCommandRaw({ + insert: "Pets", + bypassDocumentValidation: true, + documents: [ + { + _id: 1, + name: "Felinecitas", + type: "Cat", + breed: "Russian Blue", + age: 12, + }, + { + _id: 1, + name: "Nao Nao", + type: "Dog", + breed: "Chow Chow", + age: 2, + }, + ], +}); +``` + +:::warning + +Do not use `$runCommandRaw()` for queries which contain the `"find"` or `"aggregate"` commands, because you might be unable to fetch all data. This is because MongoDB returns a [cursor](https://www.mongodb.com/docs/manual/tutorial/iterate-a-cursor/) that is attached to your MongoDB session, and you might not hit the same MongoDB session every time. For these queries, you should use the specialised [`findRaw()`](#findraw) and [`aggregateRaw()`](#aggregateraw) methods instead. + +::: + +#### Return type + +`$runCommandRaw()` returns a `JSON` object whose shape depends on the inputs. + +#### Signature + +```ts no-lines +$runCommandRaw(command: InputJsonObject): PrismaPromise; +``` + +### `findRaw()` + +`.findRaw()` returns actual database records. It will find zero or more documents that match the filter on the `User` collection: + +```ts no-lines +const result = await prisma.user.findRaw({ + filter: { age: { $gt: 25 } }, + options: { projection: { _id: false } }, +}); +``` + +#### Return type + +`.findRaw()` returns a `JSON` object whose shape depends on the inputs. + +#### Signature + +```ts no-lines +.findRaw(args?: {filter?: InputJsonObject, options?: InputJsonObject}): PrismaPromise; +``` + +- `filter`: The query predicate filter. If unspecified, then all documents in the collection will match the [predicate](https://www.mongodb.com/docs/manual/reference/operator/query). +- `options`: Additional options to pass to the [`find` command](https://www.mongodb.com/docs/manual/reference/command/find/#command-fields). + +### `aggregateRaw()` + +`.aggregateRaw()` returns aggregated database records. It will perform aggregation operations on the `User` collection: + +```ts no-lines +const result = await prisma.user.aggregateRaw({ + pipeline: [ + { $match: { status: "registered" } }, + { $group: { _id: "$country", total: { $sum: 1 } } }, + ], +}); +``` + +#### Return type + +`.aggregateRaw()` returns a `JSON` object whose shape depends on the inputs. + +#### Signature + +```ts no-lines +.aggregateRaw(args?: {pipeline?: InputJsonObject[], options?: InputJsonObject}): PrismaPromise; +``` + +- `pipeline`: An array of aggregation stages to process and transform the document stream via the [aggregation pipeline](https://www.mongodb.com/docs/manual/reference/operator/aggregation-pipeline). +- `options`: Additional options to pass to the [`aggregate` command](https://www.mongodb.com/docs/manual/reference/command/aggregate/#command-fields). + +#### Caveats + +When working with custom objects like `ObjectId` or `Date,` you will have to pass them according to the [MongoDB extended JSON Spec](https://www.mongodb.com/docs/manual/reference/mongodb-extended-json/#type-representations). +Example: +```ts no-lines +const result = await prisma.user.aggregateRaw({ + pipeline: [ + { $match: { _id: { $oid: id } } } +// ^ notice the $oid convention here + ], +}); + +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/300-safeql.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/300-safeql.mdx new file mode 100644 index 0000000000..8192708195 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/300-safeql.mdx @@ -0,0 +1,383 @@ +--- +title: 'SafeQL & Prisma Client' +metaTitle: 'Integrate SafeQL with Prisma Client' +metaDescription: 'Learn how to use SafeQL and Prisma Client extensions to work around features not natively supported by Prisma, such as PostGIS.' +--- + +## Overview + +This page explains how to improve the experience of writing raw SQL in Prisma ORM. It uses [Prisma Client extensions](/orm/prisma-client/client-extensions) and [SafeQL](https://safeql.dev) to create custom, type-safe Prisma Client queries which abstract custom SQL that your app might need (using `$queryRaw`). + +The example will be using [PostGIS](https://postgis.net/) and PostgreSQL, but is applicable to any raw SQL queries that you might need in your application. + +:::note + +This page builds on the [legacy raw query methods](/orm/prisma-client/using-raw-sql/raw-queries) available in Prisma Client. While many use cases for raw SQL in Prisma Client are covered by [TypedSQL](/orm/prisma-client/using-raw-sql/typedsql), using these legacy methods is still the recommended approach for working with `Unsupported` fields. + +::: + +## What is SafeQL? + +[SafeQL](https://safeql.dev/) allows for advanced linting and type safety within raw SQL queries. After setup, SafeQL works with Prisma Client `$queryRaw` and `$executeRaw` to provide type safety when raw queries are required. + +SafeQL runs as an [ESLint](https://eslint.org/) plugin and is configured using ESLint rules. This guide doesn't cover setting up ESLint and we will assume that you already having it running in your project. + +## Prerequisites + +To follow along, you will be expected to have: + +- A [PostgreSQL](https://www.postgresql.org/) database with PostGIS installed +- Prisma ORM set up in your project +- ESLint set up in your project + +## Geographic data support in Prisma ORM + +At the time of writing, Prisma ORM does not support working with geographic data, specifically using [PostGIS](https://github.com/prisma/prisma/issues/2789). + +A model that has geographic data columns will be stored using the [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) data type. Fields with `Unsupported` types are present in the generated Prisma Client and will be typed as `any`. A model with a required `Unsupported` type does not expose write operations such as `create`, and `update`. + +Prisma Client supports write operations on models with a required `Unsupported` field using `$queryRaw` and `$executeRaw`. You can use Prisma Client extensions and SafeQL to improve the type-safety when working with geographical data in raw queries. + +## 1. Set up Prisma ORM for use with PostGIS + +If you haven't already, enable the `postgresqlExtensions` Preview feature and add the `postgis` PostgreSQL extension in your Prisma schema: + +```prisma +generator client { + provider = "prisma-client-js" + //add-next-line + previewFeatures = ["postgresqlExtensions"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + //add-next-line + extensions = [postgis] +} +``` + + + +If you are not using a hosted database provider, you will likely need to install the `postgis` extension. Refer to [PostGIS's docs](http://postgis.net/documentation/getting_started/#installing-postgis) to learn more about how to get started with PostGIS. If you're using Docker Compose, you can use the following snippet to set up a PostgreSQL database that has PostGIS installed: + +```yaml +version: '3.6' +services: + pgDB: + image: postgis/postgis:13-3.1-alpine + restart: always + ports: + - '5432:5432' + volumes: + - db_data:/var/lib/postgresql/data + environment: + POSTGRES_PASSWORD: password + POSTGRES_DB: geoexample +volumes: + db_data: +``` + + + +Next, create a migration and execute a migration to enable the extension: + +```terminal +npx prisma migrate dev --name add-postgis +``` + +For reference, the output of the migration file should look like the following: + +```sql file=migrations/TIMESTAMP_add_postgis/migration.sql +-- CreateExtension +CREATE EXTENSION IF NOT EXISTS "postgis"; +``` + +You can double-check that the migration has been applied by running `prisma migrate status`. + +## 2. Create a new model that uses a geographic data column + +Add a new model with a column with a `geography` data type once the migration is applied. For this guide, we'll use a model called `PointOfInterest`. + +```prisma +model PointOfInterest { + id Int @id @default(autoincrement()) + name String + location Unsupported("geography(Point, 4326)") +} +``` + +You'll notice that the `location` field uses an [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) type. This means that we lose a lot of the benefits of Prisma ORM when working with `PointOfInterest`. We'll be using [SafeQL](https://safeql.dev/) to fix this. + +Like before, create and execute a migration using the `prisma migrate dev` command to create the `PointOfInterest` table in your database: + +```terminal +npx prisma migrate dev --name add-poi +``` + +For reference, here is the output of the SQL migration file generated by Prisma Migrate: + +```sql file=migrations/TIMESTAMP_add_poi/migration.sql +-- CreateTable +CREATE TABLE "PointOfInterest" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "location" geography(Point, 4326) NOT NULL, + + CONSTRAINT "PointOfInterest_pkey" PRIMARY KEY ("id") +); +``` + +## 3. Integrate SafeQL + +SafeQL is easily integrated with Prisma ORM in order to lint `$queryRaw` and `$executeRaw` Prisma operations. You can reference [SafeQL's integration guide](https://safeql.dev/compatibility/prisma.html) or follow the steps below. + +### 3.1. Install the `@ts-safeql/eslint-plugin` npm package + +```terminal +npm install -D @ts-safeql/eslint-plugin +``` + +This ESLint plugin is what will allow for queries to be linted. + +### 3.2. Add `@ts-safeql/eslint-plugin` to your ESLint plugins + +Next, add `@ts-safeql/eslint-plugin` to your list of ESLint plugins. In our example we are using an `.eslintrc.js` file, but this can be applied to any way that you [configure ESLint](https://eslint.org/docs/latest/use/configure/). + +```js file=.eslintrc.js highlight=3 +/** @type {import('eslint').Linter.Config} */ +module.exports = { + "plugins": [..., "@ts-safeql/eslint-plugin"], + ... +} +``` + +### 3.3 Add `@ts-safeql/check-sql` rules + +Now, setup the rules that will enable SafeQL to mark invalid SQL queries as ESLint errors. + +```js file=.eslintrc.js highlight=4-22;add +/** @type {import('eslint').Linter.Config} */ +module.exports = { + plugins: [..., '@ts-safeql/eslint-plugin'], + //add-start + rules: { + '@ts-safeql/check-sql': [ + 'error', + { + connections: [ + { + // The migrations path: + migrationsDir: './prisma/migrations', + targets: [ + // This makes `prisma.$queryRaw` and `prisma.$executeRaw` commands linted + { tag: 'prisma.+($queryRaw|$executeRaw)', transform: '{type}[]' }, + ], + }, + ], + }, + ], + }, +} +//add-end +``` + +> **Note**: If your `PrismaClient` instance is called something different than `prisma`, you need to adjust the value for `tag` accordingly. For example, if it is called `db`, the value for `tag` should be `'db.+($queryRaw|$executeRaw)'`. + +### 3.4. Connect to your database + +Finally, set up a `connectionUrl` for SafeQL so that it can introspect your database and retrieve the table and column names you use in your schema. SafeQL then uses this information for linting and highlighting problems in your raw SQL statements. + +Our example relies on the [`dotenv`](https://github.com/motdotla/dotenv) package to get the same connection string that is used by Prisma ORM. We recommend this in order to keep your database URL out of version control. + +If you haven't installed `dotenv` yet, you can install it as follows: + +```terminal +npm install dotenv +``` + +Then update your ESLint config as follows: + +```js file=.eslintrc.js highlight=1,6-9,16;add +//add-next-line +require('dotenv').config() + +/** @type {import('eslint').Linter.Config} */ +module.exports = { + plugins: ['@ts-safeql/eslint-plugin'], + //add-start + // exclude `parserOptions` if you are not using TypeScript + parserOptions: { + project: './tsconfig.json', + }, + //add-end + rules: { + '@ts-safeql/check-sql': [ + 'error', + { + connections: [ + { + //add-next-line + connectionUrl: process.env.DATABASE_URL, + // The migrations path: + migrationsDir: './prisma/migrations', + targets: [ + // what you would like SafeQL to lint. This makes `prisma.$queryRaw` and `prisma.$executeRaw` + // commands linted + { tag: 'prisma.+($queryRaw|$executeRaw)', transform: '{type}[]' }, + ], + }, + ], + }, + ], + }, +} +``` + +SafeQL is now fully configured to help you write better raw SQL using Prisma Client. + +## 4. Creating extensions to make raw SQL queries type-safe + +In this section, we'll create two [`model`](/orm/prisma-client/client-extensions/model) extensions with custom queries to be able to work conveniently with the `PointOfInterest` model: + +1. A `create` query that allows us to create new `PointOfInterest` records in the database +1. A `findClosestPoints` query that returns the `PointOfInterest` records that are closest to a given coordinate + +### 4.1. Adding an extension to create `PointOfInterest` records + +The `PointOfInterest` model in the Prisma schema uses an `Unsupported` type. As a consequence, the generated `PointOfInterest` type in Prisma Client can't be used to carry values for latitude and longitude. + +We will resolve this by defining two custom types that better represent our model in TypeScript: + +```ts +type MyPoint = { + latitude: number + longitude: number +} + +type MyPointOfInterest = { + name: string + location: MyPoint +} +``` + +Next, you can add a `create` query to the `pointOfInterest` property of your Prisma Client: + +```ts highlight=19;normal +const prisma = new PrismaClient().$extends({ + model: { + pointOfInterest: { + async create(data: { + name: string + latitude: number + longitude: number + }) { + // Create an object using the custom types from above + const poi: MyPointOfInterest = { + name: data.name, + location: { + latitude: data.latitude, + longitude: data.longitude, + }, + } + + // Insert the object into the database + const point = `POINT(${poi.location.longitude} ${poi.location.latitude})` + await prisma.$queryRaw` + INSERT INTO "PointOfInterest" (name, location) VALUES (${poi.name}, ST_GeomFromText(${point}, 4326)); + ` + + // Return the object + return poi + }, + }, + }, +}) +``` + +Notice that the SQL in the line that's highlighted in the code snippet gets checked by SafeQL! For example, if you change the name of the table from `"PointOfInterest"` to `"PointOfInterest2"`, the following error appears: + +``` +error Invalid Query: relation "PointOfInterest2" does not exist @ts-safeql/check-sql +``` + +This also works with the column names `name` and `location`. + +You can now create new `PointOfInterest` records in your code as follows: + +```ts +const poi = await prisma.pointOfInterest.create({ + name: 'Berlin', + latitude: 52.52, + longitude: 13.405, +}) +``` + +### 4.2. Adding an extension to query for closest to `PointOfInterest` records + +Now let's make a Prisma Client extension in order to query this model. We will be making an extension that finds the closest points of interest to a given longitude and latitude. + +```ts +const prisma = new PrismaClient().$extends({ + model: { + pointOfInterest: { + async create(data: { + name: string + latitude: number + longitude: number + }) { + // ... same code as before + }, + + async findClosestPoints(latitude: number, longitude: number) { + // Query for clostest points of interests + const result = await prisma.$queryRaw< + { + id: number | null + name: string | null + st_x: number | null + st_y: number | null + }[] + >`SELECT id, name, ST_X(location::geometry), ST_Y(location::geometry) + FROM "PointOfInterest" + ORDER BY ST_DistanceSphere(location::geometry, ST_MakePoint(${longitude}, ${latitude})) DESC` + + // Transform to our custom type + const pois: MyPointOfInterest[] = result.map((data) => { + return { + name: data.name, + location: { + latitude: data.st_x || 0, + longitude: data.st_y || 0, + }, + } + }) + + // Return data + return pois + }, + }, + }, +}) +``` + +Now, you can use our Prisma Client as normal to find close points of interest to a given longitude and latitude using the custom method created on the `PointOfInterest` model. + +```ts +const closestPointOfInterest = await prisma.pointOfInterest.findClosestPoints( + 53.5488, + 9.9872 +) +``` + +Similar to before, we again have the benefit of SafeQL to add extra type safety to our raw queries. For example, if we removed the cast to `geometry` for `location` by changing `location::geometry` to just `location`, we would get linting errors in the `ST_X`, `ST_Y` or `ST_DistanceSphere` functions respectively. + +```terminal +error Invalid Query: function st_distancesphere(geography, geometry) does not exist @ts-safeql/check-sql +``` + +## Conclusion + +While you may sometimes need to drop down to raw SQL when using Prisma ORM, you can use various techniques to make the experience of writing raw SQL queries with Prisma ORM better. + +In this article, you have used SafeQL and Prisma Client extensions to create custom, type-safe Prisma Client queries to abstract PostGIS operations which are currently not natively supported in Prisma ORM. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/index.mdx new file mode 100644 index 0000000000..b598c28e4c --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/150-using-raw-sql/index.mdx @@ -0,0 +1,71 @@ +--- +title: 'Write your own SQL' +metaTitle: 'Write Your Own SQL in Prisma Client' +metaDescription: 'Learn how to use raw SQL queries in Prisma Client.' +--- + +While the Prisma Client API aims to make all your database queries intuitive, type-safe, and convenient, there may still be situations where raw SQL is the best tool for the job. + +This can happen for various reasons, such as the need to optimize the performance of a specific query or because your data requirements can't be fully expressed by Prisma Client's query API. + +In most cases, [TypedSQL](#writing-type-safe-queries-with-prisma-client-and-typedsql) allows you to express your query in SQL while still benefiting from Prisma Client's excellent user experience. However, since TypedSQL is statically typed, it may not handle certain scenarios, such as dynamically generated `WHERE` clauses. In these cases, you will need to use [`$queryRaw`](/orm/prisma-client/using-raw-sql/raw-queries#queryraw) or [`$executeRaw`](/orm/prisma-client/using-raw-sql/raw-queries#executeraw), or their unsafe counterparts. + +## Writing type-safe queries with Prisma Client and TypedSQL + +:::info + +TypedSQL is available in Prisma ORM 5.19.0 and later. For raw database access in previous versions, see [our raw queries documentation](/orm/prisma-client/using-raw-sql/raw-queries). + +::: + +### What is TypedSQL? + +TypedSQL is a new feature of Prisma ORM that allows you to write your queries in `.sql` files while still enjoying the great developer experience of Prisma Client. You can write the code you're comfortable with and benefit from fully-typed inputs and outputs. + +With TypedSQL, you can: + +1. Write complex SQL queries using familiar syntax +2. Benefit from full IDE support and syntax highlighting for SQL +3. Import your SQL queries as fully typed functions in your TypeScript code +4. Maintain the flexibility of raw SQL with the safety of Prisma's type system + +TypedSQL is particularly useful for: + +- Complex reporting queries that are difficult to express using Prisma's query API +- Performance-critical operations that require fine-tuned SQL +- Leveraging database-specific features not yet supported in Prisma's API + +By using TypedSQL, you can write efficient, type-safe database queries without sacrificing the power and flexibility of raw SQL. This feature allows you to seamlessly integrate custom SQL queries into your Prisma-powered applications, ensuring type safety and improving developer productivity. + +For a detailed guide on how to get started with TypedSQL, including setup instructions and usage examples, please refer to our [TypedSQL documentation](/orm/prisma-client/using-raw-sql/typedsql). + +## Raw queries + +Prior to version 5.19.0, Prisma Client only supported raw SQL queries that were not type-safe and required manual mapping of the query result to the desired type. + +While not as ergonomic as [TypedSQL](#writing-type-safe-queries-with-prisma-client-and-typedsql), these queries are still supported and are useful when TypedSQL queries are not possible either due to features not yet supported in TypedSQL or when the query is dynamically generated. + +### Alternative approaches to raw SQL queries in relational databases + +Prisma ORM supports four methods to execute raw SQL queries in relational databases: + +- [`$queryRaw`](/orm/prisma-client/using-raw-sql/raw-queries#queryraw) +- [`$executeRaw`](/orm/prisma-client/using-raw-sql/raw-queries#executeraw) +- [`$queryRawUnsafe`](/orm/prisma-client/using-raw-sql/raw-queries#queryrawunsafe) +- [`$executeRawUnsafe`](/orm/prisma-client/using-raw-sql/raw-queries#executerawunsafe) + +These commands are similar to using TypedSQL, but they are not type-safe and are written as strings in your code rather than in dedicated `.sql` files. + +### Alternative approaches to raw queries in document databases + +For MongoDB, Prisma ORM supports three methods to execute raw queries: + +- [`$runCommandRaw`](/orm/prisma-client/using-raw-sql/raw-queries#runcommandraw) +- [`.findRaw`](/orm/prisma-client/using-raw-sql/raw-queries#findraw) +- [`.aggregateRaw`](/orm/prisma-client/using-raw-sql/raw-queries#aggregateraw) + +These methods allow you to execute raw MongoDB commands and queries, providing flexibility when you need to use MongoDB-specific features or optimizations. + +`$runCommandRaw` is used to execute database commands, `.findRaw` is used to find documents that match a filter, and `.aggregateRaw` is used for aggregation operations. All three methods are available from Prisma version 3.9.0 and later. + +Similar to raw queries in relational databases, these methods are not type-safe and require manual handling of the query results. \ No newline at end of file diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/057-composite-types.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/057-composite-types.mdx new file mode 100644 index 0000000000..fb67569058 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/057-composite-types.mdx @@ -0,0 +1,799 @@ +--- +title: 'Composite types' +metaTitle: 'Composite types' +metaDescription: 'Composite types' +tocDepth: 3 +--- + + + + + +Composite types are only available with MongoDB. + + + +[Composite types](/orm/prisma-schema/data-model/models#defining-composite-types), known as [embedded documents](https://www.mongodb.com/docs/manual/data-modeling/#embedded-data) in MongoDB, allow you to embed records within other records. + +We made composite types [Generally Available](/orm/more/releases#generally-available-ga) in v3.12.0. They were previously available in [Preview](/orm/reference/preview-features) from v3.10.0. + +This page explains how to: + +- [find](#finding-records-that-contain-composite-types-with-find-and-findmany) records that contain composite types using `findFirst` and `findMany` +- [create](#creating-records-with-composite-types-using-create-and-createmany) new records with composite types using `create` and `createMany` +- [update](#changing-composite-types-within-update-and-updatemany) composite types within existing records using `update` and `updateMany` +- [delete](#deleting-records-that-contain-composite-types-with-delete-and-deletemany) records with composite types using `delete` and `deleteMany` + + + +## Example schema + +We’ll use this schema for the examples that follow: + +```prisma file=schema.prisma showLineNumbers +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +model Product { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String @unique + price Float + colors Color[] + sizes Size[] + photos Photo[] + orders Order[] +} + +model Order { + id String @id @default(auto()) @map("_id") @db.ObjectId + product Product @relation(fields: [productId], references: [id]) + color Color + size Size + shippingAddress Address + billingAddress Address? + productId String @db.ObjectId +} + +enum Color { + Red + Green + Blue +} + +enum Size { + Small + Medium + Large + XLarge +} + +type Photo { + height Int @default(200) + width Int @default(100) + url String +} + +type Address { + street String + city String + zip String +} +``` + +In this schema, the `Product` model has a `Photo[]` composite type, and the `Order` model has two composite `Address` types. The `shippingAddress` is required, but the `billingAddress` is optional. + +## Considerations when using composite types + +There are currently some limitations when using composite types in Prisma Client: + +- [`findUnique()`](/orm/reference/prisma-client-reference#findunique) can't filter on composite types +- [`aggregate`](/orm/prisma-client/queries/aggregation-grouping-summarizing#aggregate), [`groupBy()`](/orm/prisma-client/queries/aggregation-grouping-summarizing#group-by), [`count`](/orm/prisma-client/queries/aggregation-grouping-summarizing#count) don’t support composite operations + +## Default values for required fields on composite types + +From version 4.0.0, if you carry out a database read on a composite type when all of the following conditions are true, then Prisma Client inserts the default value into the result. + +Conditions: + +- A field on the composite type is [required](/orm/prisma-schema/data-model/models#optional-and-mandatory-fields), and +- this field has a [default value](/orm/prisma-schema/data-model/models#defining-a-default-value), and +- this field is not present in the returned document or documents. + +Note: + +- This is the same behavior as with [model fields](/orm/reference/prisma-schema-reference#model-field-scalar-types). +- On read operations, Prisma Client inserts the default value into the result, but does not insert the default value into the database. + +In our example schema, suppose that you add a required field to `photo`. This field, `bitDepth`, has a default value: + +```prisma file=schema.prisma highlight=4;add +... +type Photo { + ... + //add-next-line + bitDepth Int @default(8) +} + +... +``` + +Suppose that you then run `npx prisma db push` to [update your database](/orm/reference/prisma-cli-reference#db-push) and regenerate your Prisma Client with `npx prisma generate`. Then, you run the following application code: + +```ts +console.dir(await prisma.product.findMany({}), { depth: Infinity }) +``` + +The `bitDepth` field has no content because you have only just added this field, so the query returns the default value of `8`. + +** Earlier versions ** + +Before version 4.0.0, Prisma ORM threw a P2032 error as follows: + +``` +Error converting field "bitDepth" of expected non-nullable +type "int", found incompatible value of "null". +``` + +## Finding records that contain composite types with `find` and `findMany` + +Records can be filtered by a composite type within the `where` operation. + +The following section describes the operations available for filtering by a single type or multiple types, and gives examples of each. + +### Filtering for one composite type + +Use the `is`, `equals`, `isNot` and `isSet` operations to change a single composite type: + +- `is`: Filter results by matching composite types. Requires one or more fields to be present _(e.g. Filter orders by the street name on the shipping address)_ +- `equals`: Filter results by matching composite types. Requires all fields to be present. _(e.g. Filter orders by the full shipping address)_ +- `isNot`: Filter results by non-matching composite types +- `isSet` : Filter optional fields to include only results that have been set (either set to a value, or explicitly set to `null`). Setting this filter to `true` will exclude `undefined` results that are not set at all. + +For example, use `is` to filter for orders with a street name of `'555 Candy Cane Lane'`: + +```ts +const orders = await prisma.order.findMany({ + where: { + shippingAddress: { + is: { + street: '555 Candy Cane Lane', + }, + }, + }, +}) +``` + +Use `equals` to filter for orders which match on all fields in the shipping address: + +```ts +const orders = await prisma.order.findMany({ + where: { + shippingAddress: { + equals: { + street: '555 Candy Cane Lane', + city: 'Wonderland', + zip: '52337', + }, + }, + }, +}) +``` + +You can also use a shorthand notation for this query, where you leave out the `equals`: + +```ts +const orders = await prisma.order.findMany({ + where: { + shippingAddress: { + street: '555 Candy Cane Lane', + city: 'Wonderland', + zip: '52337', + }, + }, +}) +``` + +Use `isNot` to filter for orders that do not have a `zip` code of `'52337'`: + +```ts +const orders = await prisma.order.findMany({ + where: { + shippingAddress: { + isNot: { + zip: '52337', + }, + }, + }, +}) +``` + +Use `isSet` to filter for orders where the optional `billingAddress` has been set (either to a value or to `null`): + +```ts +const orders = await prisma.order.findMany({ + where: { + billingAddress: { + isSet: true, + }, + }, +}) +``` + +### Filtering for many composite types + +Use the `equals`, `isEmpty`, `every`, `some` and `none` operations to filter for multiple composite types: + +- `equals`: Checks exact equality of the list +- `isEmpty`: Checks if the list is empty +- `every`: Every item in the list must match the condition +- `some`: One or more of the items in the list must match the condition +- `none`: None of the items in the list can match the condition +- `isSet` : Filter optional fields to include only results that have been set (either set to a value, or explicitly set to `null`). Setting this filter to `true` will exclude `undefined` results that are not set at all. + +For example, you can use `equals` to find products with a specific list of photos (all `url`, `height` and `width` fields must match): + +```ts +const product = prisma.product.findMany({ + where: { + photos: { + equals: [ + { + url: '1.jpg', + height: 200, + width: 100, + }, + { + url: '2.jpg', + height: 200, + width: 100, + }, + ], + }, + }, +}) +``` + +You can also use a shorthand notation for this query, where you leave out the `equals` and specify just the fields that you want to filter for: + +```ts +const product = prisma.product.findMany({ + where: { + photos: [ + { + url: '1.jpg', + height: 200, + width: 100, + }, + { + url: '2.jpg', + height: 200, + width: 100, + }, + ], + }, +}) +``` + +Use `isEmpty` to filter for products with no photos: + +```ts +const product = prisma.product.findMany({ + where: { + photos: { + isEmpty: true, + }, + }, +}) +``` + +Use `some` to filter for products where one or more photos has a `url` of `"2.jpg"`: + +```ts +const product = prisma.product.findFirst({ + where: { + photos: { + some: { + url: '2.jpg', + }, + }, + }, +}) +``` + +Use `none` to filter for products where no photos have a `url` of `"2.jpg"`: + +```ts +const product = prisma.product.findFirst({ + where: { + photos: { + none: { + url: '2.jpg', + }, + }, + }, +}) +``` + +## Creating records with composite types using `create` and `createMany` + + + +When you create a record with a composite type that has a unique restraint, note that MongoDB does not enforce unique values inside a record. [Learn more](#duplicate-values-in-unique-fields-of-composite-types). + + + +Composite types can be created within a `create` or `createMany` method using the `set` operation. For example, you can use `set` within `create` to create an `Address` composite type inside an `Order`: + +```ts +const order = await prisma.order.create({ + data: { + // Normal relation + product: { connect: { id: 'some-object-id' } }, + color: 'Red', + size: 'Large', + // Composite type + shippingAddress: { + set: { + street: '1084 Candycane Lane', + city: 'Silverlake', + zip: '84323', + }, + }, + }, +}) +``` + +You can also use a shorthand notation where you leave out the `set` and specify just the fields that you want to create: + +```ts +const order = await prisma.order.create({ + data: { + // Normal relation + product: { connect: { id: 'some-object-id' } }, + color: 'Red', + size: 'Large', + // Composite type + shippingAddress: { + street: '1084 Candycane Lane', + city: 'Silverlake', + zip: '84323', + }, + }, +}) +``` + +For an optional type, like the `billingAddress`, you can also set the value to `null`: + +```ts +const order = await prisma.order.create({ + data: { + // Normal relation + product: { connect: { id: 'some-object-id' } }, + color: 'Red', + size: 'Large', + // Composite type + shippingAddress: { + street: '1084 Candycane Lane', + city: 'Silverlake', + zip: '84323', + }, + // Embedded optional type, set to null + billingAddress: { + set: null, + }, + }, +}) +``` + +To model the case where an `product` contains a list of multiple `photos`, you can `set` multiple composite types at once: + +```ts +const product = await prisma.product.create({ + data: { + name: 'Forest Runners', + price: 59.99, + colors: ['Red', 'Green'], + sizes: ['Small', 'Medium', 'Large'], + // New composite type + photos: { + set: [ + { height: 100, width: 200, url: '1.jpg' }, + { height: 100, width: 200, url: '2.jpg' }, + ], + }, + }, +}) +``` + +You can also use a shorthand notation where you leave out the `set` and specify just the fields that you want to create: + +```ts +const product = await prisma.product.create({ + data: { + name: 'Forest Runners', + price: 59.99, + // Scalar lists that we already support + colors: ['Red', 'Green'], + sizes: ['Small', 'Medium', 'Large'], + // New composite type + photos: [ + { height: 100, width: 200, url: '1.jpg' }, + { height: 100, width: 200, url: '2.jpg' }, + ], + }, +}) +``` + +These operations also work within the `createMany` method. For example, you can create multiple `product`s which each contain a list of `photos`: + +```ts +const product = await prisma.product.createMany({ + data: [ + { + name: 'Forest Runners', + price: 59.99, + colors: ['Red', 'Green'], + sizes: ['Small', 'Medium', 'Large'], + photos: [ + { height: 100, width: 200, url: '1.jpg' }, + { height: 100, width: 200, url: '2.jpg' }, + ], + }, + { + name: 'Alpine Blazers', + price: 85.99, + colors: ['Blue', 'Red'], + sizes: ['Large', 'XLarge'], + photos: [ + { height: 100, width: 200, url: '1.jpg' }, + { height: 150, width: 200, url: '4.jpg' }, + { height: 200, width: 200, url: '5.jpg' }, + ], + }, + ], +}) +``` + +## Changing composite types within `update` and `updateMany` + + + +When you update a record with a composite type that has a unique restraint, note that MongoDB does not enforce unique values inside a record. [Learn more](#duplicate-values-in-unique-fields-of-composite-types). + + + +Composite types can be set, updated or removed within an `update` or `updateMany` method. The following section describes the operations available for updating a single type or multiple types at once, and gives examples of each. + +### Changing a single composite type + +Use the `set`, `unset` `update` and `upsert` operations to change a single composite type: + +- Use `set` to set a composite type, overriding any existing value +- Use `unset` to unset a composite type. Unlike `set: null`, `unset` removes the field entirely +- Use `update` to update a composite type +- Use `upsert` to `update` an existing composite type if it exists, and otherwise `set` the composite type + +For example, use `update` to update a required `shippingAddress` with an `Address` composite type inside an `Order`: + +```ts +const order = await prisma.order.update({ + where: { + id: 'some-object-id', + }, + data: { + shippingAddress: { + // Update just the zip field + update: { + zip: '41232', + }, + }, + }, +}) +``` + +For an optional embedded type, like the `billingAddress`, use `upsert` to create a new record if it does not exist, and update the record if it does: + +```ts +const order = await prisma.order.update({ + where: { + id: 'some-object-id', + }, + data: { + billingAddress: { + // Create the address if it doesn't exist, + // otherwise update it + upsert: { + set: { + street: '1084 Candycane Lane', + city: 'Silverlake', + zip: '84323', + }, + update: { + zip: '84323', + }, + }, + }, + }, +}) +``` + +You can also use the `unset` operation to remove an optional embedded type. The following example uses `unset` to remove the `billingAddress` from an `Order`: + +```ts +const order = await prisma.order.update({ + where: { + id: 'some-object-id', + }, + data: { + billingAddress: { + // Unset the billing address + // Removes "billingAddress" field from order + unset: true, + }, + }, +}) +``` + +You can use [filters](/orm/prisma-client/special-fields-and-types/composite-types#finding-records-that-contain-composite-types-with-find-and-findmany) within `updateMany` to update all records that match a composite type. The following example uses the `is` filter to match the street name from a shipping address on a list of orders: + +```ts +const orders = await prisma.order.updateMany({ + where: { + shippingAddress: { + is: { + street: '555 Candy Cane Lane', + }, + }, + }, + data: { + shippingAddress: { + update: { + street: '111 Candy Cane Drive', + }, + }, + }, +}) +``` + +### Changing multiple composite types + +Use the `set`, `push`, `updateMany` and `deleteMany` operations to change a list of composite types: + +- `set`: Set an embedded list of composite types, overriding any existing list +- `push`: Push values to the end of an embedded list of composite types +- `updateMany`: Update many composite types at once +- `deleteMany`: Delete many composite types at once + +For example, use `push` to add a new photo to the `photos` list: + +```ts +const product = prisma.product.update({ + where: { + id: '62de6d328a65d8fffdae2c18', + }, + data: { + photos: { + // Push a photo to the end of the photos list + push: [{ height: 100, width: 200, url: '1.jpg' }], + }, + }, +}) +``` + +Use `updateMany` to update photos with a `url` of `1.jpg` or `2.png`: + +```ts +const product = prisma.product.update({ + where: { + id: '62de6d328a65d8fffdae2c18', + }, + data: { + photos: { + updateMany: { + where: { + url: '1.jpg', + }, + data: { + url: '2.png', + }, + }, + }, + }, +}) +``` + +The following example uses `deleteMany` to delete all photos with a `height` of 100: + +```ts +const product = prisma.product.update({ + where: { + id: '62de6d328a65d8fffdae2c18', + }, + data: { + photos: { + deleteMany: { + where: { + height: 100, + }, + }, + }, + }, +}) +``` + +## Upserting composite types with `upsert` + + + +When you create or update the values in a composite type that has a unique restraint, note that MongoDB does not enforce unique values inside a record. [Learn more](#duplicate-values-in-unique-fields-of-composite-types). + + + +To create or update a composite type, use the `upsert` method. You can use the same composite operations as the `create` and `update` methods above. + +For example, use `upsert` to either create a new product or add a photo to an existing product: + +```ts +const product = await prisma.product.upsert({ + where: { + name: 'Forest Runners', + }, + create: { + name: 'Forest Runners', + price: 59.99, + colors: ['Red', 'Green'], + sizes: ['Small', 'Medium', 'Large'], + photos: [ + { height: 100, width: 200, url: '1.jpg' }, + { height: 100, width: 200, url: '2.jpg' }, + ], + }, + update: { + photos: { + push: { height: 300, width: 400, url: '3.jpg' }, + }, + }, +}) +``` + +## Deleting records that contain composite types with `delete` and `deleteMany` + +To remove records which embed a composite type, use the `delete` or `deleteMany` methods. This will also remove the embedded composite type. + +For example, use `deleteMany` to delete all products with a `size` of `"Small"`. This will also delete any embedded `photos`. + +```ts +const deleteProduct = await prisma.product.deleteMany({ + where: { + sizes: { + equals: 'Small', + }, + }, +}) +``` + +You can also use [filters](/orm/prisma-client/special-fields-and-types/composite-types#finding-records-that-contain-composite-types-with-find-and-findmany) to delete records that match a composite type. The example below uses the `some` filter to delete products that contain a certain photo: + +```ts +const product = await prisma.product.deleteMany({ + where: { + photos: { + some: { + url: '2.jpg', + }, + }, + }, +}) +``` + +## Ordering composite types + +You can use the `orderBy` operation to sort results in ascending or descending order. + +For example, the following command finds all orders and orders them by the city name in the shipping address, in ascending order: + +```ts +const orders = await prisma.order.findMany({ + orderBy: { + shippingAddress: { + city: 'asc', + }, + }, +}) +``` + +## Duplicate values in unique fields of composite types + +Be careful when you carry out any of the following operations on a record with a composite type that has a unique constraint. In this situation, MongoDB does not enforce unique values inside a record. + +- When you create the record +- When you add data to the record +- When you update data in the record + +If your schema has a composite type with a `@@unique` constraint, MongoDB prevents you from storing the same value for the constrained value in two or more of the records that contain this composite type. However, MongoDB does does not prevent you from storing multiple copies of the same field value in a single record. + +Note that you can [use Prisma ORM relations to work around this issue](#use-prisma-orm-relations-to-enforce-unique-values-in-a-record). + +For example, in the following schema, `MailBox` has a composite type, `addresses`, which has a `@@unique` constraint on the `email` field. + +```prisma +type Address { + email String +} + +model MailBox { + name String + addresses Address[] + + @@unique([addresses.email]) +} +``` + +The following code creates a record with two identical values in `address`. MongoDB does not throw an error in this situation, and it stores `alice@prisma.io` in `addresses` twice. + +```ts +await prisma.MailBox.createMany({ + data: [ + { + name: 'Alice', + addresses: { + set: [ + { + address: 'alice@prisma.io', // Not unique + }, + { + address: 'alice@prisma.io', // Not unique + }, + ], + }, + }, + ], +}) +``` + +Note: MongoDB throws an error if you try to store the same value in two separate records. In our example above, if you try to store the email address `alice@prisma.io` for the user Alice and for the user Bob, MongoDB does not store the data and throws an error. + +### Use Prisma ORM relations to enforce unique values in a record + +In the example above, MongoDB did not enforce the unique constraint on a nested address name. However, you can model your data differently to enforce unique values in a record. To do so, use Prisma ORM [relations](/orm/prisma-schema/data-model/relations) to turn the composite type into a collection. Set a relationship to this collection and place a unique constraint on the field that you want to be unique. + +In the following example, MongoDB enforces unique values in a record. There is a relation between `Mailbox` and the `Address` model. Also, the `name` field in the `Address` model has a unique constraint. + +```prisma +model Address { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + mailbox Mailbox? @relation(fields: [mailboxId], references: [id]) + mailboxId String? @db.ObjectId + + @@unique([name]) +} + +model Mailbox { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + addresses Address[] @relation +} +``` + +```ts +await prisma.MailBox.create({ + data: { + name: 'Alice', + addresses: { + create: [ + { name: 'alice@prisma.io' }, // Not unique + { name: 'alice@prisma.io' }, // Not unique + ], + }, + }, +}) +``` + +If you run the above code, MongoDB enforces the unique constraint. It does not allow your application to add two addresses with the name `alice@prisma.io`. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/080-null-and-undefined.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/080-null-and-undefined.mdx new file mode 100644 index 0000000000..ad56f159ae --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/080-null-and-undefined.mdx @@ -0,0 +1,485 @@ +--- +title: 'Null and undefined' +metaTitle: 'Null and undefined in Prisma Client (Reference)' +metaDescription: 'How Prisma Client handles null and undefined' +preview: false +--- + +:::warning + +Prior to Prisma ORM 5.20.0, `undefined` was treated as a special value that would not be included in the generated query. This behavior could lead to unexpected results and data loss. If you are using an older version of Prisma ORM, we strongly recommend updating to 5.20.0 or later to take advantage of the new `strictUndefinedChecks` feature. + +For documentation on the legacy behavior, see [Legacy behavior](#legacy-behavior). + +::: + +## Strict undefined checks (Preview feature) + +Prisma ORM 5.20.0 introduces a new Preview feature called `strictUndefinedChecks`. This feature changes how Prisma Client handles `undefined` values, offering better protection against accidental data loss or unintended query behavior. + +### Enabling strict undefined checks + +To enable this feature, add the following to your Prisma schema: + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["strictUndefinedChecks"] +} +``` + +### Using strict undefined checks + +When this feature is enabled: + +1. Explicitly setting a field to `undefined` in a query will cause a runtime error. +2. To skip a field in a query, use the new `Prisma.skip` symbol instead of `undefined`. + +Example usage: + +```typescript +// This will throw an error +prisma.user.create({ + data: { + name: 'Alice', + email: undefined // Error: Cannot explicitly use undefined here + } +}) + +// Use `Prisma.skip` (a symbol provided by Prisma) to omit a field +prisma.user.create({ + data: { + name: 'Alice', + email: Prisma.skip // This field will be omitted from the query + } +}) +``` + +This change helps prevent accidental deletions or updates, such as: + +```typescript +// Before: This would delete all users +prisma.user.deleteMany({ + where: { + id: undefined + } +}) + +// After: This will throw an error +Invalid \`prisma.user.deleteMany()\` invocation in +/client/tests/functional/strictUndefinedChecks/test.ts:0:0 + XX }) + XX + XX test('throws on undefined input field', async () => { +→ XX const result = prisma.user.deleteMany({ + where: { + id: undefined + ~~~~~~~~~ + } + }) +Invalid value for argument \`where\`: explicitly \`undefined\` values are not allowed." +``` + +### Migration path + +To migrate existing code: + +```typescript +// Before +let optionalEmail: string | undefined + +prisma.user.create({ + data: { + name: 'Alice', + email: optionalEmail + } +}) + +// After +prisma.user.create({ + data: { + name: 'Alice', + // highlight-next-line + email: optionalEmail ?? Prisma.skip + } +}) +``` + +This new behavior is intended to become the default in Prisma ORM 6. + +### `exactOptionalPropertyTypes` + +In addition to `strictUndefinedChecks`, we also recommend enabling the TypeScript compiler option `exactOptionalPropertyTypes`. This option enforces that optional properties must match exactly, which can help catch potential issues with `undefined` values in your code. While `strictUndefinedChecks` will raise runtime errors for invalid `undefined` usage, `exactOptionalPropertyTypes` will catch these issues during the build process. + +Learn more about `exactOptionalPropertyTypes` in the [TypeScript documentation](https://www.typescriptlang.org/tsconfig/#exactOptionalPropertyTypes). + +### Feedback + +As always, we welcome your feedback on this feature. Please share your thoughts and suggestions in the [GitHub discussion for this Preview feature](https://github.com/prisma/prisma/discussions/25271). + +## Legacy behavior + +:::warning + +This section is relevant if you are using Prisma ORM 5.19.1 or earlier. + +::: + +Prisma Client differentiates between `null` and `undefined`: + +- `null` is a **value** +- `undefined` means **do nothing** + + + +This is particularly important to account for in [a **Prisma ORM with GraphQL context**, where `null` and `undefined` are interchangeable](#null-and-undefined-in-a-graphql-resolver). + + + +The data below represents a `User` table. This set of data will be used in all of the examples below: + +| id | name | email | +| --- | ------- | ----------------- | +| 1 | Nikolas | nikolas@gmail.com | +| 2 | Martin | martin@gmail.com | +| 3 | _empty_ | sabin@gmail.com | +| 4 | Tyler | tyler@gmail.com | + +### `null` and `undefined` in queries that affect _many_ records + +This section will cover how `undefined` and `null` values affect the behavior of queries that interact with or create multiple records in a database. + +#### Null + +Consider the following Prisma Client query which searches for all users whose `name` value matches the provided `null` value: + + + + + +```ts +const users = await prisma.user.findMany({ + where: { + name: null, + }, +}) +``` + + + + + +```json +[ + { + "id": 3, + "name": null, + "email": "sabin@gmail.com" + } +] +``` + + + + + +Because `null` was provided as the filter for the `name` column, Prisma Client will generate a query that searches for all records in the `User` table whose `name` column is _empty_. + +#### Undefined + +Now consider the scenario where you run the same query with `undefined` as the filter value on the `name` column: + + + + + +```ts +const users = await prisma.user.findMany({ + where: { + name: undefined, + }, +}) +``` + + + + +```json +[ + { + "id": 1, + "name": "Nikolas", + "email": "nikolas@gmail.com" + }, + { + "id": 2, + "name": "Martin", + "email": "martin@gmail.com" + }, + { + "id": 3, + "name": null, + "email": "sabin@gmail.com" + }, + { + "id": 4, + "name": "Tyler", + "email": "tyler@gmail.com" + } +] +``` + + + + +Using `undefined` as a value in a filter essentially tells Prisma Client you have decided _not to define a filter_ for that column. + +An equivalent way to write the above query would be: + +```ts +const users = await prisma.user.findMany() +``` + +This query will select every row from the `User` table. + + + +**Note**: Using `undefined` as the value of any key in a Prisma Client query's parameter object will cause Prisma ORM to act as if that key was not provided at all. + + + +Although this section's examples focused on the `findMany` function, the same concepts apply to any function that can affect multiple records, such as `updateMany` and `deleteMany`. + +### `null` and `undefined` in queries that affect _one_ record + +This section will cover how `undefined` and `null` values affect the behavior of queries that interact with or create a single record in a database. + + + +**Note**: `null` is not a valid filter value in a `findUnique()` query. + + + +The query behavior when using `null` and `undefined` in the filter criteria of a query that affects a single record is very similar to the behaviors described in the previous section. + +#### Null + +Consider the following query where `null` is used to filter the `name` column: + + + + + +```ts +const user = await prisma.user.findFirst({ + where: { + name: null, + }, +}) +``` + + + + + +```json +[ + { + "id": 3, + "name": null, + "email": "sabin@gmail.com" + } +] +``` + + + + +Because `null` was used as the filter on the `name` column, Prisma Client will generate a query that searches for the first record in the `User` table whose `name` value is _empty_. + +#### Undefined + +If `undefined` is used as the filter value on the `name` column instead, _the query will act as if no filter criteria was passed to that column at all_. + +Consider the query below: + + + + + +```ts +const user = await prisma.user.findFirst({ + where: { + name: undefined, + }, +}) +``` + + + + + +```json +[ + { + "id": 1, + "name": "Nikolas", + "email": "nikolas@gmail.com" + } +] +``` + + + + +In this scenario, the query will return the very first record in the database. + +Another way to represent the above query is: + +```ts +const user = await prisma.user.findFirst() +``` + +Although this section's examples focused on the `findFirst` function, the same concepts apply to any function that affects a single record. + +### `null` and `undefined` in a GraphQL resolver + +For this example, consider a database based on the following Prisma schema: + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? +} +``` + +In the following GraphQL mutation that updates a user, both `authorEmail` and `name` accept `null`. From a GraphQL perspective, this means that fields are **optional**: + +```ts +type Mutation { + // Update author's email or name, or both - or neither! + updateUser(id: Int!, authorEmail: String, authorName: String): User! +} +``` + +However, if you pass `null` values for `authorEmail` or `authorName` on to Prisma Client, the following will happen: + +- If `args.authorEmail` is `null`, the query will **fail**. `email` does not accept `null`. +- If `args.authorName` is `null`, Prisma Client changes the value of `name` to `null`. This is probably not how you want an update to work. + +```ts +updateUser: (parent, args, ctx: Context) => { + return ctx.prisma.user.update({ + where: { id: Number(args.id) }, + data: { + //highlight-start + email: args.authorEmail, // email cannot be null + name: args.authorName // name set to null - potentially unwanted behavior + //highlight-end + }, + }) +}, +``` + +Instead, set the value of `email` and `name` to `undefined` if the input value is `null`. Doing this is the same as not updating the field at all: + +```ts +updateUser: (parent, args, ctx: Context) => { + return ctx.prisma.user.update({ + where: { id: Number(args.id) }, + data: { + //highlight-start + email: args.authorEmail != null ? args.authorEmail : undefined, // If null, do nothing + name: args.authorName != null ? args.authorName : undefined // If null, do nothing + //highlight-end + }, + }) +}, +``` + +### The effect of `null` and `undefined` on conditionals + +There are some caveats to filtering with conditionals which might produce unexpected results. When filtering with conditionals you might expect one result but receive another given how Prisma Client treats nullable values. + +The following table provides a high-level overview of how the different operators handle 0, 1 and `n` filters. + +| Operator | 0 filters | 1 filter | n filters | +| -------- | ----------------- | ---------------------- | -------------------- | +| `OR` | return empty list | validate single filter | validate all filters | +| `AND` | return all items | validate single filter | validate all filters | +| `NOT` | return all items | validate single filter | validate all filters | + +This example shows how an `undefined` parameter impacts the results returned by a query that uses the [`OR`](/orm/reference/prisma-client-reference#or) operator. + +```ts +interface FormData { + name: string + email?: string +} + +const formData: FormData = { + name: 'Emelie', +} + +const users = await prisma.user.findMany({ + where: { + OR: [ + { + email: { + contains: formData.email, + }, + }, + ], + }, +}) + +// returns: [] +``` + +The query receives filters from a formData object, which includes an optional email property. In this instance, the value of the email property is `undefined`. When this query is run no data is returned. + +This is in contrast to the [`AND`](/orm/reference/prisma-client-reference#and) and [`NOT`](/orm/reference/prisma-client-reference#not-1) operators, which will both return all the users +if you pass in an `undefined` value. + +> This is because passing an `undefined` value to an `AND` or `NOT` operator is the same +> as passing nothing at all, meaning the `findMany` query in the example will run without any filters and return all the users. + +```ts +interface FormData { + name: string + email?: string +} + +const formData: FormData = { + name: 'Emelie', +} + +const users = await prisma.user.findMany({ + where: { + AND: [ + { + email: { + contains: formData.email, + }, + }, + ], + }, +}) + +// returns: { id: 1, email: 'ems@boop.com', name: 'Emelie' } + +const users = await prisma.user.findMany({ + where: { + NOT: [ + { + email: { + contains: formData.email, + }, + }, + ], + }, +}) + +// returns: { id: 1, email: 'ems@boop.com', name: 'Emelie' } +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/100-working-with-json-fields.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/100-working-with-json-fields.mdx new file mode 100644 index 0000000000..3601592a1a --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/100-working-with-json-fields.mdx @@ -0,0 +1,1018 @@ +--- +title: 'Working with Json fields' +metaTitle: 'Working with Json fields (Concepts)' +metaDescription: 'How to read, write, and filter by Json fields.' +tocDepth: 3 +--- + + + +Use the [`Json`](/orm/reference/prisma-schema-reference#json) Prisma ORM field type to read, write, and perform basic filtering on JSON types in the underlying database. In the following example, the `User` model has an optional `Json` field named `extendedPetsData`: + +```prisma highlight=6;normal +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + //highlight-next-line + extendedPetsData Json? +} +``` + +Example field value: + +```json +{ + "pet1": { + "petName": "Claudine", + "petType": "House cat" + }, + "pet2": { + "petName": "Sunny", + "petType": "Gerbil" + } +} +``` + +> **Note**: The `Json` field is only supported if the [underlying database](/orm/overview) has a corresponding JSON data type. + +The `Json` field supports a few additional types, such as `string` and `boolean`. These additional types exist to match the types supported by [`JSON.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse): + +```ts +export declare type JsonValue = + | string + | number + | boolean + | null + | JsonObject + | JsonArray +``` + + + +## Use cases for JSON fields + +Reasons to store data as JSON rather than representing data as related models include: + +- You need to store data that does not have a consistent structure +- You are importing data from another system and do not want to map that data to Prisma models + +## Reading a `Json` field + +You can use the `Prisma.JsonArray` and `Prisma.JsonObject` utility classes to work with the contents of a `Json` field: + +```ts +const { PrismaClient, Prisma } = require('@prisma/client') + +const user = await prisma.user.findFirst({ + where: { + id: 9, + }, +}) + +// Example extendedPetsData data: +// [{ name: 'Bob the dog' }, { name: 'Claudine the cat' }] + +if ( + user?.extendedPetsData && + typeof user?.extendedPetsData === 'object' && + Array.isArray(user?.extendedPetsData) +) { + const petsObject = user?.extendedPetsData as Prisma.JsonArray + + const firstPet = petsObject[0] +} +``` + +See also: [Advanced example: Update a nested JSON key value](#advanced-example-update-a-nested-json-key-value) + +## Writing to a `Json` field + +The following example writes a JSON object to the `extendedPetsData` field: + +```ts +var json = [ + { name: 'Bob the dog' }, + { name: 'Claudine the cat' }, +] as Prisma.JsonArray + +const createUser = await prisma.user.create({ + data: { + email: 'birgitte@prisma.io', + extendedPetsData: json, + }, +}) +``` + +> **Note**: JavaScript objects (for example, `{ extendedPetsData: "none"}`) are automatically converted to JSON. + +See also: [Advanced example: Update a nested JSON key value](#advanced-example-update-a-nested-json-key-value) + +## Filter on a `Json` field (simple) + +You can filter rows of `Json` type. + +### Filter on exact field value + +The following query returns all users where the value of `extendedPetsData` matches the `json` variable exactly: + +```ts +var json = { [{ name: 'Bob the dog' }, { name: 'Claudine the cat' }] } + +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + equals: json, + }, + }, +}) +``` + +The following query returns all users where the value of `extendedPetsData` does **not** match the `json` variable exactly: + +```ts +var json = { + extendedPetsData: [{ name: 'Bob the dog' }, { name: 'Claudine the cat' }], +} + +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + not: json, + }, + }, +}) +``` + +## Filter on a `Json` field (advanced) + +You can also filter rows by the data inside a `Json` field. We call this **advanced `Json` filtering**. This functionality is supported by [PostgreSQL](/orm/overview/databases/postgresql) and [MySQL](/orm/overview/databases/mysql) only with [different syntaxes for the `path` option](#path-syntax-depending-on-database). + + + +PostgreSQL does not support [filtering on object key values in arrays](#filtering-on-object-key-value-inside-array). + + + + + +The availability of advanced `Json` filtering depends on your Prisma version: + +- v4.0.0 or later: advanced `Json` filtering is [generally available](/orm/more/releases#generally-available-ga). +- From v2.23.0, but before v4.0.0: advanced `Json` filtering is a [preview feature](/orm/reference/preview-features/client-preview-features). Add `previewFeatures = ["filterJson"]` to your schema. [Learn more](/orm/reference/preview-features/client-preview-features#enabling-a-prisma-client-preview-feature). +- Before v2.23.0: you can [filter on the exact `Json` field value](#filter-on-exact-field-value), but you cannot use the other features described in this section. + + + +### `path` syntax depending on database + +The filters below use a `path` option to select specific parts of the `Json` value to filter on. The implementation of that filtering differs between connectors: + +- The [MySQL connector](/orm/overview/databases/mysql) uses [MySQL's implementation of JSON path](https://dev.mysql.com/doc/refman/8.0/en/json.html#json-path-syntax) +- The [PostgreSQL connector](/orm/overview/databases/postgresql) uses the custom JSON functions and operators [supported in version 12 _and earlier_](https://www.postgresql.org/docs/11/functions-json.html) + +For example, the following is a valid MySQL `path` value: + +``` +$petFeatures.petName +``` + +The following is a valid PostgreSQL `path` value: + +``` +["petFeatures", "petName"] +``` + +### Filter on object property + +You can filter on a specific property inside a block of JSON. In the following examples, the value of `extendedPetsData` is a one-dimensional, unnested JSON object: + +```json highlight=11;normal +{ + "petName": "Claudine", + "petType": "House cat" +} +``` + +The following query returns all users where the value of `petName` is `"Claudine"`: + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: ['petName'], + equals: 'Claudine', + }, + }, +}) +``` + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: '$.petName', + equals: 'Claudine', + }, + }, +}) +``` + + + + + +The following query returns all users where the value of `petType` _contains_ `"cat"`: + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: ['petType'], + string_contains: 'cat', + }, + }, +}) +``` + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: '$.petType', + string_contains: 'cat', + }, + }, +}) +``` + + + + +The following string filters are available: + +- [`string_contains`](/orm/reference/prisma-client-reference#string_contains) +- [`string_starts_with`](/orm/reference/prisma-client-reference#string_starts_with) +- [`string_ends_with`](/orm/reference/prisma-client-reference#string_ends_with) . + +### Filter on nested object property + +You can filter on nested JSON properties. In the following examples, the value of `extendedPetsData` is a JSON object with several levels of nesting. + +```json +{ + "pet1": { + "petName": "Claudine", + "petType": "House cat" + }, + "pet2": { + "petName": "Sunny", + "petType": "Gerbil", + "features": { + "eyeColor": "Brown", + "furColor": "White and black" + } + } +} +``` + +The following query returns all users where `"pet2"` → `"petName"` is `"Sunny"`: + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: ['pet2', 'petName'], + equals: 'Sunny', + }, + }, +}) +``` + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: '$.pet2.petName', + equals: 'Sunny', + }, + }, +}) +``` + + + + +The following query returns all users where: + +- `"pet2"` → `"petName"` is `"Sunny"` +- `"pet2"` → `"features"` → `"furColor"` contains `"black"` + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + AND: [ + { + extendedPetsData: { + path: ['pet2', 'petName'], + equals: 'Sunny', + }, + }, + { + extendedPetsData: { + path: ['pet2', 'features', 'furColor'], + string_contains: 'black', + }, + }, + ], + }, +}) +``` + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + AND: [ + { + extendedPetsData: { + path: '$.pet2.petName', + equals: 'Sunny', + }, + }, + { + extendedPetsData: { + path: '$.pet2.features.furColor', + string_contains: 'black', + }, + }, + ], + }, +}) +``` + + + + + +### Filtering on an array value + +You can filter on the presence of a specific value in a scalar array (strings, integers). In the following example, the value of `extendedPetsData` is an array of strings: + +```json +["Claudine", "Sunny"] +``` + +The following query returns all users with a pet named `"Claudine"`: + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + array_contains: ['Claudine'], + }, + }, +}) +``` + + + +**Note**: In PostgreSQL, the value of `array_contains` must be an array and not a string, even if the array only contains a single value. + + + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + array_contains: 'Claudine', + }, + }, +}) +``` + + + + + +The following array filters are available: + +- [`array_contains`](/orm/reference/prisma-client-reference#array_contains) +- [`array_starts_with`](/orm/reference/prisma-client-reference#array_starts_with) +- [`array_ends_with`](/orm/reference/prisma-client-reference#array_ends_with) + +### Filtering on nested array value + +You can filter on the presence of a specific value in a scalar array (strings, integers). In the following examples, the value of `extendedPetsData` includes nested scalar arrays of names: + +```json +{ + "cats": { "owned": ["Bob", "Sunny"], "fostering": ["Fido"] }, + "dogs": { "owned": ["Ella"], "fostering": ["Prince", "Empress"] } +} +``` + +#### Scalar value arrays + +The following query returns all users that foster a cat named `"Fido"`: + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: ['cats', 'fostering'], + array_contains: ['Fido'], + }, + }, +}) +``` + + + +**Note**: In PostgreSQL, the value of `array_contains` must be an array and not a string, even if the array only contains a single value. + + + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: '$.cats.fostering', + array_contains: 'Fido', + }, + }, +}) +``` + + + + +The following query returns all users that foster cats named `"Fido"` _and_ `"Bob"`: + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: ['cats', 'fostering'], + array_contains: ['Fido', 'Bob'], + }, + }, +}) +``` + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: '$.cats.fostering', + array_contains: ['Fido', 'Bob'], + }, + }, +}) +``` + + + + +#### JSON object arrays + + + + +```ts +const json = [{ status: 'expired', insuranceID: 92 }] + +const checkJson = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: ['insurances'], + array_contains: json, + }, + }, +}) +``` + + + + +```ts +const json = { status: 'expired', insuranceID: 92 } + +const checkJson = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: '$.insurances', + array_contains: json, + }, + }, +}) +``` + + + + +- If you are using PostgreSQL, you must pass in an array of objects to match, even if that array only contains one object: + + ```json5 + [{ status: 'expired', insuranceID: 92 }] + // PostgreSQL + ``` + + If you are using MySQL, you must pass in a single object to match: + + ```json5 + { status: 'expired', insuranceID: 92 } + // MySQL + ``` + +- If your filter array contains multiple objects, PostgreSQL will only return results if _all_ objects are present - not if at least one object is present. + +- You must set `array_contains` to a JSON object, not a string. If you use a string, Prisma Client escapes the quotation marks and the query will not return results. For example: + + ```ts + array_contains: '[{"status": "expired", "insuranceID": 92}]' + ``` + + is sent to the database as: + + ``` + [{\"status\": \"expired\", \"insuranceID\": 92}] + ``` + +### Targeting an array element by index + +You can filter on the value of an element in a specific position. + +```json +{ "owned": ["Bob", "Sunny"], "fostering": ["Fido"] } +``` + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + comments: { + path: ['owned', '1'], + string_contains: 'Bob', + }, + }, +}) +``` + + + + + +```ts +const getUsers = await prisma.user.findMany({ + where: { + comments: { + path: '$.owned[1]', + string_contains: 'Bob', + }, + }, +}) +``` + + + + + +### Filtering on object key value inside array + +Depending on your provider, you can filter on the key value of an object inside an array. + + + +Filtering on object key values within an array is **only** supported by the [MySQL database connector](/orm/overview/databases/mysql). However, you can still [filter on the presence of entire JSON objects](#json-object-arrays). + + + +In the following example, the value of `extendedPetsData` is an array of objects with a nested `insurances` array, which contains two objects: + +```json +[ + { + "petName": "Claudine", + "petType": "House cat", + "insurances": [ + { "insuranceID": 92, "status": "expired" }, + { "insuranceID": 12, "status": "active" } + ] + }, + { + "petName": "Sunny", + "petType": "Gerbil" + }, + { + "petName": "Gerald", + "petType": "Corn snake" + }, + { + "petName": "Nanna", + "petType": "Moose" + } +] +``` + +The following query returns all users where at least one pet is a moose: + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: '$[*].petType', + array_contains: 'Moose', + }, + }, +}) +``` + +- `$[*]` is the root array of pet objects +- `petType` matches the `petType` key in any pet object + +The following query returns all users where at least one pet has an expired insurance: + +```ts +const getUsers = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: '$[*].insurances[*].status', + array_contains: 'expired', + }, + }, +}) +``` + +- `$[*]` is the root array of pet objects +- `insurances[*]` matches any `insurances` array inside any pet object +- `status` matches any `status` key in any insurance object + +## Advanced example: Update a nested JSON key value + +The following example assumes that the value of `extendedPetsData` is some variation of the following: + +```json +{ + "petName": "Claudine", + "petType": "House cat", + "insurances": [ + { "insuranceID": 92, "status": "expired" }, + { "insuranceID": 12, "status": "active" } + ] +} +``` + +The following example: + +1. Gets all users +1. Change the `"status"` of each insurance object to `"expired"` +1. Get all users that have an expired insurance where the ID is `92` + + + + +```ts +const userQueries: string | any[] = [] + +getUsers.forEach((user) => { + if ( + user.extendedPetsData && + typeof user.extendedPetsData === 'object' && + !Array.isArray(user.extendedPetsData) + ) { + const petsObject = user.extendedPetsData as Prisma.JsonObject + + const i = petsObject['insurances'] + + if (i && typeof i === 'object' && Array.isArray(i)) { + const insurancesArray = i as Prisma.JsonArray + + insurancesArray.forEach((i) => { + if (i && typeof i === 'object' && !Array.isArray(i)) { + const insuranceObject = i as Prisma.JsonObject + + insuranceObject['status'] = 'expired' + } + }) + + const whereClause = Prisma.validator()({ + id: user.id, + }) + + const dataClause = Prisma.validator()({ + extendedPetsData: petsObject, + }) + + userQueries.push( + prisma.user.update({ + where: whereClause, + data: dataClause, + }) + ) + } + } +}) + +if (userQueries.length > 0) { + console.log(userQueries.length + ' queries to run!') + await prisma.$transaction(userQueries) +} + +const json = [{ status: 'expired', insuranceID: 92 }] + +const checkJson = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: ['insurances'], + array_contains: json, + }, + }, +}) + +console.log(checkJson.length) +``` + + + + + +```ts +const userQueries: string | any[] = [] + +getUsers.forEach((user) => { + if ( + user.extendedPetsData && + typeof user.extendedPetsData === 'object' && + !Array.isArray(user.extendedPetsData) + ) { + const petsObject = user.extendedPetsData as Prisma.JsonObject + + const insuranceList = petsObject['insurances'] // is a Prisma.JsonArray + + if (Array.isArray(insuranceList)) { + insuranceList.forEach((insuranceItem) => { + if ( + insuranceItem && + typeof insuranceItem === 'object' && + !Array.isArray(insuranceItem) + ) { + insuranceItem['status'] = 'expired' // is a Prisma.JsonObject + } + }) + + const whereClause = Prisma.validator()({ + id: user.id, + }) + + const dataClause = Prisma.validator()({ + extendedPetsData: petsObject, + }) + + userQueries.push( + prisma.user.update({ + where: whereClause, + data: dataClause, + }) + ) + } + } +}) + +if (userQueries.length > 0) { + console.log(userQueries.length + ' queries to run!') + await prisma.$transaction(userQueries) +} + +const json = { status: 'expired', insuranceID: 92 } + +const checkJson = await prisma.user.findMany({ + where: { + extendedPetsData: { + path: '$.insurances', + array_contains: json, + }, + }, +}) + +console.log(checkJson.length) +``` + + + + +## Using `null` Values + +There are two types of `null` values possible for a `JSON` field in an SQL database. + +- Database `NULL`: The value in the database is a `NULL`. +- JSON `null`: The value in the database contains a JSON value that is `null`. + +To differentiate between these possibilities, we've introduced three _null enums_ you can use: + +- `JsonNull`: Represents the `null` value in JSON. +- `DbNull`: Represents the `NULL` value in the database. +- `AnyNull`: Represents both `null` JSON values and `NULL` database values. (Only when filtering) + + + +From v4.0.0, `JsonNull`, `DbNull`, and `AnyNull` are objects. Before v4.0.0, they were strings. + + + + + +- When filtering using any of the _null enums_ you can not use a shorthand and leave the `equals` operator off. +- These _null enums_ do not apply to MongoDB because there the difference between a JSON `null` and a database `NULL` does not exist. +- The _null enums_ do not apply to the `array_contains` operator in all databases because there can only be a JSON `null` within a JSON array. Since there cannot be a database `NULL` within a JSON array, `{ array_contains: null }` is not ambiguous. + + + +For example: + +```prisma +model Log { + id Int @id + meta Json +} +``` + +Here is an example of using `AnyNull`: + +```ts highlight=7;normal +import { Prisma } from '@prisma/client' + +prisma.log.findMany({ + where: { + data: { + meta: { + equals: Prisma.AnyNull, + }, + }, + }, +}) +``` + +### Inserting `null` Values + +This also applies to `create`, `update` and `upsert`. To insert a `null` value +into a `Json` field, you would write: + +```ts highlight=5;normal +import { Prisma } from '@prisma/client' + +prisma.log.create({ + data: { + meta: Prisma.JsonNull, + }, +}) +``` + +And to insert a database `NULL` into a `Json` field, you would write: + +```ts highlight=5;normal +import { Prisma } from '@prisma/client' + +prisma.log.create({ + data: { + meta: Prisma.DbNull, + }, +}) +``` + +### Filtering by `null` Values + +To filter by `JsonNull` or `DbNull`, you would write: + +```ts highlight=6;normal +import { Prisma } from '@prisma/client' + +prisma.log.findMany({ + where: { + meta: { + equals: Prisma.AnyNull, + }, + }, +}) +``` + + + +These _null enums_ do not apply to MongoDB because MongoDB does not differentiate between a JSON `null` and a database `NULL`. They also do not apply to the `array_contains` operator in all databases because there can only be a JSON `null` within a JSON array. Since there cannot be a database `NULL` within a JSON array, `{ array_contains: null }` is not ambiguous. + + + +## Typed `Json` + +By default, `Json` fields are not typed in Prisma models. To accomplish strong typing inside of these fields, you will need to use an external package like [prisma-json-types-generator](https://www.npmjs.com/package/prisma-json-types-generator) to accomplish this. + +### Using `prisma-json-types-generator` + +First, install and configure `prisma-json-types-generator` [according to the package's instructions](https://www.npmjs.com/package/prisma-json-types-generator#using-it). + +Then, assuming you have a model like the following: + +```prisma no-copy +model Log { + id Int @id + meta Json +} +``` + +You can update it and type it by using [abstract syntax tree comments](/orm/prisma-schema/overview#comments) + +```prisma highlight=4;normal file=schema.prisma showLineNumbers +model Log { + id Int @id + + //highlight-next-line + /// [LogMetaType] + meta Json +} +``` + +Then, make sure you define the above type in a type declaration file included in your `tsconfig.json` + +```ts file=types.ts showLineNumbers +declare global { + namespace PrismaJson { + type LogMetaType = { timestamp: number; host: string } + } +} +``` + +Now, when working with `Log.meta` it will be strongly typed! + +## `Json` FAQs + +### Can you select a subset of JSON key/values to return? + +No - it is not yet possible to [select which JSON elements to return](https://github.com/prisma/prisma/issues/2431). Prisma Client returns the entire JSON object. + +### Can you filter on the presence of a specific key? + +No - it is not yet possible to filter on the presence of a specific key. + +### Is case insensitive filtering supported? + +No - [case insensitive filtering](https://github.com/prisma/prisma/issues/7390) is not yet supported. + +### Can you sort an object property within a JSON value? + +No, [sorting object properties within a JSON value](https://github.com/prisma/prisma/issues/10346) (order-by-prop) is not currently supported. + +### How to set a default value for JSON fields? + +When you want to set a `@default` value the `Json` type, you need to enclose it with double-quotes inside the `@default` attribute (and potentially escape any "inner" double-quotes using a backslash), for example: + +```prisma +model User { + id Int @id @default(autoincrement()) + json1 Json @default("[]") + json2 Json @default("{ \"hello\": \"world\" }") +} +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/200-working-with-scalar-lists-arrays.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/200-working-with-scalar-lists-arrays.mdx new file mode 100644 index 0000000000..6682d03c9d --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/200-working-with-scalar-lists-arrays.mdx @@ -0,0 +1,221 @@ +--- +title: 'Working with scalar lists' +metaTitle: 'Working with scalar lists/arrays (Concepts)' +metaDescription: 'How to read, write, and filter by scalar lists / arrays.' +tocDepth: 3 +--- + + + +[Scalar lists](/orm/reference/prisma-schema-reference#-modifier) are represented by the `[]` modifier and are only available if the underlying database supports scalar lists. The following example has one scalar `String` list named `pets`: + + + + +```prisma highlight=4;normal +model User { + id Int @id @default(autoincrement()) + name String + //highlight-next-line + pets String[] +} +``` + + + + +```prisma highlight=4;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + //highlight-next-line + pets String[] +} +``` + + + + +Example field value: + +```json5 +['Fido', 'Snoopy', 'Brian'] +``` + + + +## Setting the value of a scalar list + +The following example demonstrates how to [`set`](/orm/reference/prisma-client-reference#set-1) the value of a scalar list (`coinflips`) when you create a model: + +```ts +const createdUser = await prisma.user.create({ + data: { + email: 'eloise@prisma.io', + coinflips: [true, true, true, false, true], + }, +}) +``` + +## Unsetting the value of a scalar list + + + +This method is available on MongoDB only in versions +[3.11.1](https://github.com/prisma/prisma/releases/tag/3.11.1) and later. + + + +The following example demonstrates how to [`unset`](/orm/reference/prisma-client-reference#unset) the value of a scalar list (`coinflips`): + +```ts +const createdUser = await prisma.user.create({ + data: { + email: 'eloise@prisma.io', + coinflips: { + unset: true, + }, + }, +}) +``` + +Unlike `set: null`, `unset` removes the list entirely. + +## Adding items to a scalar list + + + +Available for: + +- PostgreSQL in versions [2.15.0](https://github.com/prisma/prisma/releases/tag/2.15.0) and later +- CockroachDB in versions [3.9.0](https://github.com/prisma/prisma/releases/tag/3.9.0) and later +- MongoDB in versions [3.11.0](https://github.com/prisma/prisma/releases/tag/3.11.0) and later + + + +Use the [`push`](/orm/reference/prisma-client-reference#push) method to add a single value to a scalar list: + +```ts +const userUpdate = await prisma.user.update({ + where: { + id: 9, + }, + data: { + coinflips: { + push: true, + }, + }, +}) +``` + +In earlier versions, you have to overwrite the entire value. The following example retrieves user, uses `push()` to add three new coin flips, and overwrites the `coinflips` field in an `update`: + +```ts +const user = await prisma.user.findUnique({ + where: { + email: 'eloise@prisma.io', + }, +}) + +if (user) { + console.log(user.coinflips) + + user.coinflips.push(true, true, false) + + const updatedUser = await prisma.user.update({ + where: { + email: 'eloise@prisma.io', + }, + data: { + coinflips: user.coinflips, + }, + }) + + console.log(updatedUser.coinflips) +} +``` + +## Filtering scalar lists + + + +Available for: + +- PostgreSQL in versions [2.15.0](https://github.com/prisma/prisma/releases/tag/2.15.0) and later +- CockroachDB in versions [3.9.0](https://github.com/prisma/prisma/releases/tag/3.9.0) and later +- MongoDB in versions [3.11.0](https://github.com/prisma/prisma/releases/tag/3.11.0) and later + + + +Use [scalar list filters](/orm/reference/prisma-client-reference#scalar-list-filters) to filter for records with scalar lists that match a specific condition. The following example returns all posts where the tags list includes `databases` _and_ `typescript`: + +```ts +const posts = await prisma.post.findMany({ + where: { + tags: { + hasEvery: ['databases', 'typescript'], + }, + }, +}) +``` + +### `NULL` values in arrays + + + +This section applies to: + +- PostgreSQL in versions [2.15.0](https://github.com/prisma/prisma/releases/tag/2.15.0) and later +- CockroachDB in versions [3.9.0](https://github.com/prisma/prisma/releases/tag/3.9.0) and later + + + +When using scalar list filters with a relational database connector, array fields with a `NULL` value are not considered by the following conditions: + +- `NOT` (array does not contain X) +- `isEmpty` (array is empty) + +This means that records you might expect to see are not returned. Consider the following examples: + +- The following query returns all posts where the `tags` **do not** include `databases`: + + ```ts + const posts = await prisma.post.findMany({ + where: { + NOT: { + tags: { + has: 'databases', + }, + }, + }, + }) + ``` + + - ✔ Arrays that do not contain `"databases"`, such as `{"typescript", "graphql"}` + - ✔ Empty arrays, such as `[]` + + The query does not return: + + - ✘ `NULL` arrays, even though they do not contain `"databases"` + +The following query returns all posts where `tags` is empty: + +```ts +const posts = await prisma.post.findMany({ + where: { + tags: { + isEmpty: true, + }, + }, +}) +``` + +The query returns: + +- ✔ Empty arrays, such as `[]` + +The query does not return: + +- ✘ `NULL` arrays, even though they could be considered empty + +To work around this issue, you can set the default value of array fields to `[]`. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/300-working-with-composite-ids-and-constraints.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/300-working-with-composite-ids-and-constraints.mdx new file mode 100644 index 0000000000..d687f60a12 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/300-working-with-composite-ids-and-constraints.mdx @@ -0,0 +1,208 @@ +--- +title: 'Working with compound IDs and unique constraints' +metaTitle: 'Working with compound IDs and unique constraints (Concepts)' +metaDescription: 'How to read, write, and filter by compound IDs and unique constraints.' +tocDepth: 2 +--- + + + +Composite IDs and compound unique constraints can be defined in your Prisma schema using the [`@@id`](/orm/reference/prisma-schema-reference#id-1) and [`@@unique`](/orm/reference/prisma-schema-reference#unique-1) attributes. + + + +**MongoDB does not support `@@id`**
+MongoDB does not support composite IDs, which means you cannot identify a model with a `@@id` attribute. + +
+ +A composite ID or compound unique constraint uses the combined values of two fields as a primary key or identifier in your database table. In the following example, the `postId` field and `userId` field are used as a composite ID for a `Like` table: + +```prisma highlight=22;normal +model User { + id Int @id @default(autoincrement()) + name String + post Post[] + likes Like[] +} + +model Post { + id Int @id @default(autoincrement()) + content String + User User? @relation(fields: [userId], references: [id]) + userId Int? + likes Like[] +} + +model Like { + postId Int + userId Int + User User @relation(fields: [userId], references: [id]) + Post Post @relation(fields: [postId], references: [id]) + + //highlight-next-line + @@id([postId, userId]) +} +``` + +Querying for records from the `Like` table (e.g. using `prisma.like.findMany()`) would return objects that look as follows: + +```json +{ + "postId": 1, + "userId": 1 +} +``` + +Although there are only two fields in the response, those two fields make up a compound ID named `postId_userId`. + +You can also create a named compound ID or compound unique constraint by using the `@@id` or `@@unique` attributes' `name` field. For example: + +```prisma highlight=7;normal +model Like { + postId Int + userId Int + User User @relation(fields: [userId], references: [id]) + Post Post @relation(fields: [postId], references: [id]) + + //highlight-next-line + @@id(name: "likeId", [postId, userId]) +} +``` + +
+ +## Where you can use compound IDs and unique constraints + +Compound IDs and compound unique constraints can be used when working with _unique_ data. + +Below is a list of Prisma Client functions that accept a compound ID or compound unique constraint in the `where` filter of the query: + +- `findUnique()` +- `findUniqueOrThrow` +- `delete` +- `update` +- `upsert` + +A composite ID and a composite unique constraint is also usable when creating relational data with `connect` and `connectOrCreate`. + +## Filtering records by a compound ID or unique constraint + +Although your query results will not display a compound ID or unique constraint as a field, you can use these compound values to filter your queries for unique records: + +```ts highlight=3-6;normal +const like = await prisma.like.findUnique({ + where: { + likeId: { + userId: 1, + postId: 1, + }, + }, +}) +``` + + + +Note composite ID and compound unique constraint keys are only available as filter options for _unique_ queries such as `findUnique()` and `findUniqueOrThrow`. See the [section](/orm/prisma-client/special-fields-and-types/working-with-composite-ids-and-constraints#where-you-can-use-compound-ids-and-unique-constraints) above for a list of places these fields may be used. + + + +## Deleting records by a compound ID or unique constraint + +A compound ID or compound unique constraint may be used in the `where` filter of a `delete` query: + +```ts highlight=3-6;normal +const like = await prisma.like.delete({ + where: { + likeId: { + userId: 1, + postId: 1, + }, + }, +}) +``` + +## Updating and upserting records by a compound ID or unique constraint + +A compound ID or compound unique constraint may be used in the `where` filter of an `update` query: + +```ts highlight=3-6;normal +const like = await prisma.like.update({ + where: { + likeId: { + userId: 1, + postId: 1, + }, + }, + data: { + postId: 2, + }, +}) +``` + +They may also be used in the `where` filter of an `upsert` query: + +```ts highlight=3-6;normal +await prisma.like.upsert({ + where: { + likeId: { + userId: 1, + postId: 1, + }, + }, + update: { + userId: 2, + }, + create: { + userId: 2, + postId: 1, + }, +}) +``` + +## Filtering relation queries by a compound ID or unique constraint + +Compound IDs and compound unique constraint can also be used in the `connect` and `connectOrCreate` keys used when connecting records to create a relationship. + +For example, consider this query: + +```ts highlight=6-9;normal +await prisma.user.create({ + data: { + name: 'Alice', + likes: { + connect: { + likeId: { + postId: 1, + userId: 2, + }, + }, + }, + }, +}) +``` + +The `likeId` compound ID is used as the identifier in the `connect` object that is used to locate the `Like` table's record that will be linked to the new user: `"Alice"`. + +Similarly, the `likeId` can be used in `connectOrCreate`'s `where` filter to attempt to locate an existing record in the `Like` table: + +```ts highlight=10-13;normal +await prisma.user.create({ + data: { + name: 'Alice', + likes: { + connectOrCreate: { + create: { + postId: 1, + }, + where: { + likeId: { + postId: 1, + userId: 1, + }, + }, + }, + }, + }, +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/index.mdx new file mode 100644 index 0000000000..00848bc961 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/200-special-fields-and-types/index.mdx @@ -0,0 +1,180 @@ +--- +title: 'Fields & types' +metaTitle: 'Fields & types' +metaDescription: 'Learn how to use about special fields and types with Prisma Client.' +tocDepth: 3 +--- + +This section covers various special fields and types you can use with Prisma Client. + +## Working with `Decimal` + +`Decimal` fields are represented by the [`Decimal.js` library](https://mikemcl.github.io/decimal.js/). The following example demonstrates how to import and use `Prisma.Decimal`: + +```ts +import { PrismaClient, Prisma } from '@prisma/client' + +const newTypes = await prisma.sample.create({ + data: { + cost: new Prisma.Decimal(24.454545), + }, +}) +``` + +
+ +You can also perform arithmetic operations: + +```ts +import { PrismaClient, Prisma } from '@prisma/client' + +const newTypes = await prisma.sample.create({ + data: { + cost: new Prisma.Decimal(24.454545).plus(1), + }, +}) +``` + +`Prisma.Decimal` uses Decimal.js, see [Decimal.js docs](https://mikemcl.github.io/decimal.js) to learn more. + + +:::warning + +The use of the `Decimal` field [is not currently supported in MongoDB](https://github.com/prisma/prisma/issues/12637). + +::: + +## Working with `BigInt` + +### Overview + +`BigInt` fields are represented by the [`BigInt` type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) (Node.js 10.4.0+ required). The following example demonstrates how to use the `BigInt` type: + +```ts +import { PrismaClient, Prisma } from '@prisma/client' + +const newTypes = await prisma.sample.create({ + data: { + revenue: BigInt(534543543534), + }, +}) +``` + +### Serializing `BigInt` + +Prisma Client returns records as plain JavaScript objects. If you attempt to use `JSON.stringify` on an object that includes a `BigInt` field, you will see the following error: + +``` +Do not know how to serialize a BigInt +``` + +To work around this issue, use a customized implementation of `JSON.stringify`: + +```js +JSON.stringify( + this, + (key, value) => (typeof value === 'bigint' ? value.toString() : value) // return everything else unchanged +) +``` + +## Working with `Bytes` + +`Bytes` fields are represented by the [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) type. The following example demonstrates how to use the `Uint8Array` type: + +```ts +import { PrismaClient, Prisma } from '@prisma/client' + +const newTypes = await prisma.sample.create({ + data: { + myField: new Uint8Array([1, 2, 3, 4]), + }, +}) +``` + +Note that **before Prisma v6**, `Bytes` were represented by the [`Buffer`](https://nodejs.org/api/buffer.html) type: + +```ts +import { PrismaClient, Prisma } from '@prisma/client' + +const newTypes = await prisma.sample.create({ + data: { + myField: Buffer.from([1, 2, 3, 4]), + }, +}) +``` + +Learn more in the [upgrade guide to v6](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-6). + +## Working with `DateTime` + +:::note + +There currently is a [bug](https://github.com/prisma/prisma/issues/9516) that doesn't allow you to pass in `DateTime` values as strings and produces a runtime error when you do. `DateTime` values need to be passed as [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) objects (i.e. `new Date('2024-12-04')` instead of `'2024-12-04'`). + +::: + +When creating records that have fields of type [`DateTime`](/orm/reference/prisma-schema-reference#datetime), Prisma Client accepts values as [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) objects adhering to the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) standard. + +Consider the following schema: + +```prisma +model User { + id Int @id @default(autoincrement()) + birthDate DateTime? +} +``` + +Here are some examples for creating new records: + +##### Jan 01, 1998; 00 h 00 min and 000 ms + +```ts +await prisma.user.create({ + data: { + birthDate: new Date('1998') + } +}) +``` + +##### Dec 01, 1998; 00 h 00 min and 000 ms + +```ts +await prisma.user.create({ + data: { + birthDate: new Date('1998-12') + } +}) +``` + +##### Dec 24, 1998; 00 h 00 min and 000 ms + +```ts +await prisma.user.create({ + data: { + birthDate: new Date('1998-12-24') + } +}) +``` + +##### Dec 24, 1998; 22 h 33 min and 444 ms + +```ts +await prisma.user.create({ + data: { + birthDate: new Date('1998-12-24T06:22:33.444Z') + } +}) +``` + + +## Working with `Json` + +See: [Working with `Json` fields](/orm/prisma-client/special-fields-and-types/working-with-json-fields) + +## Working with scalar lists / scalar arrays + +See: [Working with scalar lists / arrays](/orm/prisma-client/special-fields-and-types/working-with-scalar-lists-arrays) + +## Working with composite IDs and compound unique constraints + +See: [Working with composite IDs and compound unique constraints](/orm/prisma-client/special-fields-and-types/working-with-composite-ids-and-constraints) diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/100-model.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/100-model.mdx new file mode 100644 index 0000000000..f245f1ba7e --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/100-model.mdx @@ -0,0 +1,162 @@ +--- +title: '`model`: Add custom methods to your models' +metaTitle: 'Prisma Client extensions: model component' +metaDescription: 'Extend the functionality of Prisma Client, model component' +toc_max_heading_level: 4 +--- + + + + + +Prisma Client extensions are Generally Available from versions 4.16.0 and later. They were introduced in Preview in version 4.7.0. Make sure you enable the `clientExtensions` Preview feature flag if you are running on a version earlier than 4.16.0. + + + +You can use the `model` [Prisma Client extensions](/orm/prisma-client/client-extensions) component type to add custom methods to your models. + +Possible uses for the `model` component include the following: + +- New operations to operate alongside existing Prisma Client operations, such as `findMany` +- Encapsulated business logic +- Repetitive operations +- Model-specific utilities + + + +## Add a custom method + +Use the `$extends` [client-level method](/orm/reference/prisma-client-reference#client-methods) to create an _extended client_. An extended client is a variant of the standard Prisma Client that is wrapped by one or more extensions. Use the `model` extension component to add methods to models in your schema. + +### Add a custom method to a specific model + +To extend a specific model in your schema, use the following structure. This example adds a method to the `user` model. + +```ts +const prisma = new PrismaClient().$extends({ + name?: '', // (optional) names the extension for error logs + model?: { + user: { ... } // in this case, we extend the `user` model + }, +}); +``` + +#### Example + +The following example adds a method called `signUp` to the `user` model. This method creates a new user with the specified email address: + +```ts +const prisma = new PrismaClient().$extends({ + model: { + user: { + async signUp(email: string) { + await prisma.user.create({ data: { email } }) + }, + }, + }, +}) +``` + +You would call `signUp` in your application as follows: + +```ts +const user = await prisma.user.signUp('john@prisma.io') +``` + +### Add a custom method to all models in your schema + +To extend _all_ models in your schema, use the following structure: + +```ts +const prisma = new PrismaClient().$extends({ + name?: '', // `name` is an optional field that you can use to name the extension for error logs + model?: { + $allModels: { ... } + }, +}) +``` + +#### Example + +The following example adds an `exists` method to all models. + +```ts +const prisma = new PrismaClient().$extends({ + model: { + $allModels: { + async exists( + this: T, + where: Prisma.Args['where'] + ): Promise { + // Get the current model at runtime + const context = Prisma.getExtensionContext(this) + + const result = await (context as any).findFirst({ where }) + return result !== null + }, + }, + }, +}) +``` + +You would call `exists` in your application as follows: + +```ts +// `exists` method available on all models +await prisma.user.exists({ name: 'Alice' }) +await prisma.post.exists({ + OR: [{ title: { contains: 'Prisma' } }, { content: { contains: 'Prisma' } }], +}) +``` + +## Call a custom method from another custom method + +You can call a custom method from another custom method, if the two methods are declared on the same model. For example, you can call a custom method on the `user` model from another custom method on the `user` model. It does not matter if the two methods are declared in the same extension or in different extensions. + +To do so, use `Prisma.getExtensionContext(this).methodName`. Note that you cannot use `prisma.user.methodName`. This is because `prisma` is not extended yet, and therefore does not contain the new method. + +For example: + +```ts +const prisma = new PrismaClient().$extends({ + model: { + user: { + firstMethod() { + ... + }, + secondMethod() { + Prisma.getExtensionContext(this).firstMethod() + } + } + } +}) +``` + +## Get the current model name at runtime + + + +This feature is available from version 4.9.0. + + + +You can get the name of the current model at runtime with `Prisma.getExtensionContext(this).$name`. You might use this to write out the model name to a log, to send the name to another service, or to branch your code based on the model. + +For example: + +```ts +// `context` refers to the current model +const context = Prisma.getExtensionContext(this) + +// `context.name` returns the name of the current model +console.log(context.name) + +// Usage +await(context as any).findFirst({ args }) +``` + +Refer to [Add a custom method to all models in your schema](#example-1) for a concrete example for retrieving the current model name at runtime. + +## Advanced type safety: type utilities for defining generic extensions + +You can improve the type-safety of `model` components in your shared extensions with [type utilities](/orm/prisma-client/client-extensions/type-utilities). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/110-client.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/110-client.mdx new file mode 100644 index 0000000000..5aad99108e --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/110-client.mdx @@ -0,0 +1,67 @@ +--- +title: '`client`: Add methods to Prisma Client' +metaTitle: 'Prisma Client extensions: client component' +metaDescription: 'Extend the functionality of Prisma Client, client component' +toc_max_heading_level: 4 +--- + + + + + +Prisma Client extensions are Generally Available from versions 4.16.0 and later. They were introduced in Preview in version 4.7.0. Make sure you enable the `clientExtensions` Preview feature flag if you are running on a version earlier than 4.16.0. + + + +You can use the `client` [Prisma Client extensions](/orm/prisma-client/client-extensions) component to add top-level methods to Prisma Client. + + + +## Extend Prisma Client + +Use the `$extends` [client-level method](/orm/reference/prisma-client-reference#client-methods) to create an _extended client_. An extended client is a variant of the standard Prisma Client that is wrapped by one or more extensions. Use the `client` extension component to add top-level methods to Prisma Client. + +To add a top-level method to Prisma Client, use the following structure: + +```ts +const prisma = new PrismaClient().$extends({ + client?: { ... } +}) +``` + +### Example + +The following example uses the `client` component to add two methods to Prisma Client: + +- `$log` outputs a message. +- `$totalQueries` returns the number of queries executed by the current client instance. It uses the [metrics](/orm/prisma-client/observability-and-logging/metrics) feature to collect this information. + + + +To use metrics in your project, you must enable the `metrics` feature flag in the `generator` block of your `schema.prisma` file. [Learn more](/orm/prisma-client/observability-and-logging/metrics#2-enable-the-feature-flag-in-the-prisma-schema-file). + + + +```ts +const prisma = new PrismaClient().$extends({ + client: { + $log: (s: string) => console.log(s), + async $totalQueries() { + const index_prisma_client_queries_total = 0 + // Prisma.getExtensionContext(this) in the following block + // returns the current client instance + const metricsCounters = await ( + await Prisma.getExtensionContext(this).$metrics.json() + ).counters + + return metricsCounters[index_prisma_client_queries_total].value + }, + }, +}) + +async function main() { + prisma.$log('Hello world') + const totalQueries = await prisma.$totalQueries() + console.log(totalQueries) +} +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/120-query.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/120-query.mdx new file mode 100644 index 0000000000..72cbd01d7f --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/120-query.mdx @@ -0,0 +1,299 @@ +--- +title: '`query`: Create custom Prisma Client queries' +metaTitle: 'Prisma Client extensions: query component' +metaDescription: 'Extend the functionality of Prisma Client, query component' +toc_max_heading_level: 4 +--- + + + + + +Prisma Client extensions are Generally Available from versions 4.16.0 and later. They were introduced in Preview in version 4.7.0. Make sure you enable the `clientExtensions` Preview feature flag if you are running on a version earlier than 4.16.0. + + + +You can use the `query` [Prisma Client extensions](/orm/prisma-client/client-extensions) component type to hook into the query life-cycle and modify an incoming query or its result. + +You can use Prisma Client extensions `query` component to create independent clients. This provides an alternative to [middlewares](/orm/prisma-client/client-extensions/middleware). You can bind one client to a specific filter or user, and another client to another filter or user. For example, you might do this to get [user isolation](/orm/prisma-client/client-extensions#extended-clients) in a row-level security (RLS) extension. In addition, unlike middlewares the `query` extension component gives you end-to-end type safety. [Learn more about `query` extensions versus middlewares](#query-extensions-versus-middlewares). + + + +## Extend Prisma Client query operations + +Use the `$extends` [client-level method](/orm/reference/prisma-client-reference#client-methods) to create an [extended client](/orm/prisma-client/client-extensions#about-prisma-client-extensions). An extended client is a variant of the standard Prisma Client that is wrapped by one or more extensions. + +Use the `query` extension component to modify queries. You can modify a custom query in the following: + +- [A specific operation in a specific model](#modify-a-specific-operation-in-a-specific-model) +- [A specific operation in all models of your schema](#modify-a-specific-operation-in-all-models-of-your-schema) +- [All Prisma Client operations](#modify-all-prisma-client-operations) +- [All operations in a specific model](#modify-all-operations-in-a-specific-model) +- [All operations in all models of your schema](#modify-all-operations-in-all-models-of-your-schema) +- [A specific top-level raw query operation](#modify-a-top-level-raw-query-operation) + +To create a custom query, use the following structure: + +```ts +const prisma = new PrismaClient().$extends({ + name?: 'name', + query?: { + user: { ... } // in this case, we add a query to the `user` model + }, +}); +``` + +The properties are as follows: + +- `name`: (optional) specifies a name for the extension that appears in error logs. +- `query`: defines a custom query. + +### Modify a specific operation in a specific model + +The `query` object can contain functions that map to the names of the [Prisma Client operations](/orm/reference/prisma-client-reference#model-queries), such as `findUnique()`, `findFirst`, `findMany`, `count`, and `create`. The following example modifies `user.findMany` to a use a customized query that finds only users who are older than 18 years: + +```ts +const prisma = new PrismaClient().$extends({ + query: { + user: { + async findMany({ model, operation, args, query }) { + // take incoming `where` and set `age` + args.where = { ...args.where, age: { gt: 18 } } + + return query(args) + }, + }, + }, +}) + +await prisma.user.findMany() // returns users whose age is greater than 18 +``` + +In the above example, a call to `prisma.user.findMany` triggers `query.user.findMany`. Each callback receives a type-safe `{ model, operation, args, query }` object that describes the query. This object has the following properties: + +- `model`: the name of the containing model for the query that we want to extend. + + In the above example, the `model` is a string of type `"User"`. + +- `operation`: the name of the operation being extended and executed. + + In the above example, the `operation` is a string of type `"findMany"`. + +- `args`: the specific query input information to be extended. + + This is a type-safe object that you can mutate before the query happens. You can mutate any of the properties in `args`. Exception: you cannot mutate `include` or `select` because that would change the expected output type and break type safety. + +- `query`: a promise for the result of the query. + + - You can use `await` and then mutate the result of this promise, because its value is type-safe. TypeScript catches any unsafe mutations on the object. + +### Modify a specific operation in all models of your schema + +To extend the queries in all the models of your schema, use `$allModels` instead of a specific model name. For example: + +```ts +const prisma = new PrismaClient().$extends({ + query: { + $allModels: { + async findMany({ model, operation, args, query }) { + // set `take` and fill with the rest of `args` + args = { ...args, take: 100 } + + return query(args) + }, + }, + }, +}) +``` + +### Modify all operations in a specific model + +Use `$allOperations` to extend all operations in a specific model. + +For example, the following code applies a custom query to all operations on the `user` model: + +```ts +const prisma = new PrismaClient().$extends({ + query: { + user: { + $allOperations({ model, operation, args, query }) { + /* your custom logic here */ + return query(args) + }, + }, + }, +}) +``` + +### Modify all Prisma Client operations + +Use the `$allOperations` method to modify all query methods present in Prisma Client. The `$allOperations` can be used on both model operations and raw queries. + +You can modify all methods as follows: + +```ts +const prisma = new PrismaClient().$extends({ + query: { + $allOperations({ model, operation, args, query }) { + /* your custom logic for modifying all Prisma Client operations here */ + return query(args) + }, + }, +}) +``` + +In the event a [raw query](/orm/prisma-client/using-raw-sql/raw-queries) is invoked, the `model` argument passed to the callback will be `undefined`. + +For example, you can use the `$allOperations` method to log queries as follows: + +```ts +const prisma = new PrismaClient().$extends({ + query: { + async $allOperations({ operation, model, args, query }) { + const start = performance.now() + const result = await query(args) + const end = performance.now() + const time = end - start + console.log( + util.inspect( + { model, operation, args, time }, + { showHidden: false, depth: null, colors: true } + ) + ) + return result + }, + }, +}) +``` + +### Modify all operations in all models of your schema + +Use `$allModels` and `$allOperations` to extend all operations in all models of your schema. + +To apply a custom query to all operations on all models of your schema: + +```ts +const prisma = new PrismaClient().$extends({ + query: { + $allModels: { + $allOperations({ model, operation, args, query }) { + /* your custom logic for modifying all operations on all models here */ + return query(args) + }, + }, + }, +}) +``` + +### Modify a top-level raw query operation + +To apply custom behavior to a specific top-level raw query operation, use the name of a top-level raw query function instead of a model name: + + + + +```ts copy +const prisma = new PrismaClient().$extends({ + query: { + $queryRaw({ args, query, operation }) { + // handle $queryRaw operation + return query(args) + }, + $executeRaw({ args, query, operation }) { + // handle $executeRaw operation + return query(args) + }, + $queryRawUnsafe({ args, query, operation }) { + // handle $queryRawUnsafe operation + return query(args) + }, + $executeRawUnsafe({ args, query, operation }) { + // handle $executeRawUnsafe operation + return query(args) + }, + }, +}) +``` + + + + +```ts copy +const prisma = new PrismaClient().$extends({ + query: { + $runCommandRaw({ args, query, operation }) { + // handle $runCommandRaw operation + return query(args) + }, + }, +}) +``` + + + + +### Mutate the result of a query + +You can use `await` and then mutate the result of the `query` promise. + +```ts +const prisma = new PrismaClient().$extends({ + query: { + user: { + async findFirst({ model, operation, args, query }) { + const user = await query(args) + + if (user.password !== undefined) { + user.password = '******' + } + + return user + }, + }, + }, +}) +``` + + + +We include the above example to show that this is possible. However, for performance reasons we recommend that you use the [`result` component type](/orm/prisma-client/client-extensions/result) to override existing fields. The `result` component type usually gives better performance in this situation because it computes only on access. The `query` component type computes after query execution. + + + +## Wrap a query into a batch transaction + +You can wrap your extended queries into a [batch transaction](/orm/prisma-client/queries/transactions). For example, you can use this to enact row-level security (RLS). + +The following example extends `findFirst` so that it runs in a batch transaction. + +```ts +const prisma = new PrismaClient().$extends({ + query: { + user: { + // Get the input `args` and a callback to `query` + async findFirst({ args, query, operation }) { + const [result] = await prisma.$transaction([query(args)]) // wrap the query in a batch transaction, and destructure the result to return an array + return result // return the first result found in the array + }, + }, + }, +}) +``` + +## Query extensions versus middlewares + +You can use query extensions or [middlewares](/orm/prisma-client/client-extensions/middleware) to hook into the query life-cycle and modify an incoming query or its result. Client extensions and middlewares differ in the following ways: + +- Middlewares always apply globally to the same client. Client extensions are isolated, unless you deliberately combine them. [Learn more about client extensions](/orm/prisma-client/client-extensions#about-prisma-client-extensions). + - For example, in a row-level security (RLS) scenario, you can keep each user in an entirely separate client. With middlewares, all users are active in the same client. +- During application execution, with extensions you can choose from one or more extended clients, or the standard Prisma Client. With middlewares, you cannot choose which client to use, because there is only one global client. +- Extensions benefit from end-to-end type safety and inference, but middlewares don't. + +You can use Prisma Client extensions in all scenarios where middlewares can be used. + +### If you use the `query` extension component and middlewares + +If you use the `query` extension component and middlewares in your project, then the following rules and priorities apply: + +- In your application code, you must declare all your middlewares on the main Prisma Client instance. You cannot declare them on an extended client. +- In situations where middlewares and extensions with a `query` component execute, Prisma Client executes the middlewares before it executes the extensions with the `query` component. Prisma Client executes the individual middlewares and extensions in the order in which you instantiated them with `$use` or `$extends`. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/130-result.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/130-result.mdx new file mode 100644 index 0000000000..04543b1989 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/130-result.mdx @@ -0,0 +1,223 @@ +--- +title: '`result`: Add custom fields and methods to query results' +metaTitle: 'Prisma Client extensions: result component' +metaDescription: 'Extend the functionality of Prisma Client, result component' +toc_max_heading_level: 4 +--- + + + + + +Prisma Client extensions are Generally Available from versions 4.16.0 and later. They were introduced in Preview in version 4.7.0. Make sure you enable the `clientExtensions` Preview feature flag if you are running on a version earlier than 4.16.0. + + + +You can use the `result` [Prisma Client extensions](/orm/prisma-client/client-extensions) component type to add custom fields and methods to query results. + + + +Use the `$extends` [client-level method](/orm/reference/prisma-client-reference#client-methods) to create an _extended client_. An extended client is a variant of the standard Prisma Client that is wrapped by one or more extensions. + +To add a custom [field](#add-a-custom-field-to-query-results) or [method](#add-a-custom-method-to-the-result-object) to query results, use the following structure. In this example, we add the custom field `myComputedField` to the result of a `user` model query. + +```ts +const prisma = new PrismaClient().$extends({ + name?: 'name', + result?: { + user: { // in this case, we extend the `user` model + myComputedField: { // the name of the new computed field + needs: { ... }, + compute() { ... } + }, + }, + }, +}); +``` + +The parameters are as follows: + +- `name`: (optional) specifies a name for the extension that appears in error logs. +- `result`: defines new fields and methods to the query results. +- `needs`: an object which describes the dependencies of the result field. +- `compute`: a method that defines how the virtual field is computed when it is accessed. + +## Add a custom field to query results + +You can use the `result` extension component to add fields to query results. These fields are computed at runtime and are type-safe. + +In the following example, we add a new virtual field called `fullName` to the `user` model. + +```ts +const prisma = new PrismaClient().$extends({ + result: { + user: { + fullName: { + // the dependencies + needs: { firstName: true, lastName: true }, + compute(user) { + // the computation logic + return `${user.firstName} ${user.lastName}` + }, + }, + }, + }, +}) + +const user = await prisma.user.findFirst() + +// return the user's full name, such as "John Doe" +console.log(user.fullName) +``` + +In above example, the input `user` of `compute` is automatically typed according to the object defined in `needs`. `firstName` and `lastName` are of type `string`, because they are specified in `needs`. If they are not specified in `needs`, then they cannot be accessed. + +## Re-use a computed field in another computed field + +The following example computes a user's title and full name in a type-safe way. `titleFullName` is a computed field that reuses the `fullName` computed field. + +```ts +const prisma = new PrismaClient() + .$extends({ + result: { + user: { + fullName: { + needs: { firstName: true, lastName: true }, + compute(user) { + return `${user.firstName} ${user.lastName}` + }, + }, + }, + }, + }) + .$extends({ + result: { + user: { + titleFullName: { + needs: { title: true, fullName: true }, + compute(user) { + return `${user.title} (${user.fullName})` + }, + }, + }, + }, + }) +``` + +### Considerations for fields + +- For performance reasons, Prisma Client computes results on access, not on retrieval. +- You can only create computed fields that are based on scalar fields. +- You can only use computed fields with `select` and you cannot aggregate them. For example: + + ```ts + const user = await prisma.user.findFirst({ + select: { email: true }, + }) + console.log(user.fullName) // undefined + ``` + +## Add a custom method to the result object + +You can use the `result` component to add methods to query results. The following example adds a new method, `save` to the result object. + +```ts +const prisma = new PrismaClient().$extends({ + result: { + user: { + save: { + needs: { id: true }, + compute(user) { + return () => + prisma.user.update({ where: { id: user.id }, data: user }) + }, + }, + }, + }, +}) + +const user = await prisma.user.findUniqueOrThrow({ where: { id: someId } }) +user.email = 'mynewmail@mailservice.com' +await user.save() +``` + +## Using `omit` query option with `result` extension component + +You can use the [`omit` (Preview) option](/orm/reference/prisma-client-reference#omit-preview) with [custom fields](#add-a-custom-field-to-query-results) and fields needed by custom fields. + +### `omit` fields needed by custom fields from query result + +If you `omit` a field that is a dependency of a custom field, it will still be read from the database even though it will not be included in the query result. + +The following example omits the `password` field, which is a dependency of the custom field `sanitizedPassword`: + +```ts +const xprisma = prisma.$extends({ + result: { + user: { + sanitizedPassword: { + needs: { password: true }, + compute(user) { + return sanitize(user.password) + }, + }, + }, + }, +}) + +const user = await xprisma.user.findFirstOrThrow({ + omit: { + password: true, + }, +}) +``` + +In this case, although `password` is omitted from the result, it will still be queried from the database because it is a dependency of the `sanitizedPassword` custom field. + +### `omit` custom field and dependencies from query result + +To ensure omitted fields are not queried from the database at all, you must omit both the custom field and its dependencies. + +The following example omits both the custom field `sanitizedPassword` and the dependent `password` field: + +```ts +const xprisma = prisma.$extends({ + result: { + user: { + sanitizedPassword: { + needs: { password: true }, + compute(user) { + return sanitize(user.password) + }, + }, + }, + }, +}) + +const user = await xprisma.user.findFirstOrThrow({ + omit: { + sanitizedPassword: true, + password: true, + }, +}) +``` +In this case, omitting both `password` and `sanitizedPassword` will exclude both from the result as well as prevent the `password` field from being read from the database. + +## Limitation +As of now, Prisma Client's result extension component does not support relation fields. This means that you cannot create custom fields or methods based on related models or fields in a relational relationship (e.g., user.posts, post.author). The needs parameter can only reference scalar fields within the same model. Follow [issue #20091 on GitHub](https://github.com/prisma/prisma/issues/20091). + + +```ts +const prisma = new PrismaClient().$extends({ + result: { + user: { + postsCount: { + needs: { posts: true }, // This will not work because posts is a relation field + compute(user) { + return user.posts.length; // Accessing a relation is not allowed + }, + }, + }, + }, +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/140-shared-extensions.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/140-shared-extensions.mdx new file mode 100644 index 0000000000..0f97a223d2 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/140-shared-extensions.mdx @@ -0,0 +1,155 @@ +--- +title: 'Shared Prisma Client extensions' +metaTitle: 'Shared Prisma Client extensions' +metaDescription: 'Share extensions or import shared extensions into your Prisma project' +toc_max_heading_level: 4 +--- + + + +You can share your [Prisma Client extensions](/orm/prisma-client/client-extensions) with other users, either as packages or as modules, and import extensions that other users create into your project. + +If you would like to build a shareable extension, we also recommend using the [`prisma-client-extension-starter`](https://github.com/prisma/prisma-client-extension-starter) template. + + + +## Install a shared, packaged extension + +In your project, you can install any Prisma Client extension that another user has published to `npm`. To do so, run the following command: + +```terminal +npm install prisma-extension- +``` + +For example, if the package name for an available extension is `prisma-extension-find-or-create`, you could install it as follows: + +```terminal +npm install prisma-extension-find-or-create +``` + +To import the `find-or-create` extension from the example above, and wrap your client instance with it, you could use the following code. This example assumes that the extension name is `findOrCreate`. + +```ts +import findOrCreate from 'prisma-extension-find-or-create' + +const prisma = new PrismaClient().$extends(findOrCreate) +const user = await prisma.user.findOrCreate() +``` + +When you call a method in an extension, use the constant name from your `$extends` statement, not `prisma`. In the above example,`xprisma.user.findOrCreate` works, but `prisma.user.findOrCreate` does not, because the original `prisma` is not modified. + +## Create a shareable extension + +When you want to create extensions other users can use, and that are not tailored just for your schema, Prisma ORM provides utilities to allow you to create shareable extensions. + +To create a shareable extension: + +1. Define the extension as a module using `Prisma.defineExtension` +2. Use one of the methods that begin with the `$all` prefix such as [`$allModels`](/orm/prisma-client/client-extensions/model#add-a-custom-method-to-all-models-in-your-schema) or [`$allOperations`](/orm/prisma-client/client-extensions/query#modify-all-prisma-client-operations) + +### Define an extension + +Use the `Prisma.defineExtension` method to make your extension shareable. You can use it to package the extension to either separate your extensions into a separate file or share it with other users as an npm package. + +The benefit of `Prisma.defineExtension` is that it provides strict type checks and auto completion for authors of extension in development and users of shared extensions. + +### Use a generic method + +Extensions that contain methods under `$allModels` apply to every model instead of a specific one. Similarly, methods under `$allOperations` apply to a client instance as a whole and not to a named component, e.g. `result` or `query`. + +You do not need to use the `$all` prefix with the [`client`](/orm/prisma-client/client-extensions/client) component, because the `client` component always applies to the client instance. + +For example, a generic extension might take the following form: + +```ts +export default Prisma.defineExtension({ + name: 'prisma-extension-find-or-create', //Extension name + model: { + $allModels: { + // new method + findOrCreate(/* args */) { + /* code for the new method */ + return query(args) + }, + }, + }, +}) +``` + +Refer to the following pages to learn the different ways you can modify Prisma Client operations: + +- [Modify all Prisma Client operations](/orm/prisma-client/client-extensions/query#modify-all-prisma-client-operations) +- [Modify a specific operation in all models of your schema](/orm/prisma-client/client-extensions/query#modify-a-specific-operation-in-all-models-of-your-schema) +- [Modify all operations in all models of your schema](/orm/prisma-client/client-extensions/query#modify-all-operations-in-all-models-of-your-schema) + +
+ For versions earlier than 4.16.0 + +The `Prisma` import is available from a different path shown in the snippet below: + +```ts +import { Prisma } from '@prisma/client/scripts/default-index' + +export default Prisma.defineExtension({ + name: 'prisma-extension-', +}) +``` + +
+ +### Publishing the shareable extension to npm + +You can then share the extension on `npm`. When you choose a package name, we recommend that you use the `prisma-extension-` convention, to make it easier to find and install. + +### Call a client-level method from your packaged extension + + +:::warning + +There's currently a limitation for extensions that reference a `PrismaClient` and call a client-level method, like the example below. + +If you trigger the extension from inside a [transaction](/orm/prisma-client/queries/transactions) (interactive or batched), the extension code will issue the queries in a new connection and ignore the current transaction context. + +Learn more in this issue on GitHub: [Client extensions that require use of a client-level method silently ignore transactions](https://github.com/prisma/prisma/issues/20678). + +::: + + +In the following situations, you need to refer to a Prisma Client instance that your extension wraps: + +- When you want to use a [client-level method](/orm/reference/prisma-client-reference#client-methods), such as `$queryRaw`, in your packaged extension. +- When you want to chain multiple `$extends` calls in your packaged extension. + +However, when someone includes your packaged extension in their project, your code cannot know the details of the Prisma Client instance. + +You can refer to this client instance as follows: + +```ts +Prisma.defineExtension((client) => { + // The Prisma Client instance that the extension user applies the extension to + return client.$extends({ + name: 'prisma-extension-', + }) +}) +``` + +For example: + +```ts +export default Prisma.defineExtension((client) => { + return client.$extends({ + name: 'prisma-extension-find-or-create', + query: { + $allModels: { + async findOrCreate({ args, query, operation }) { + return (await client.$transaction([query(args)]))[0] + }, + }, + }, + }) +}) +``` + +### Advanced type safety: type utilities for defining generic extensions + +You can improve the type-safety of your shared extensions using [type utilities](/orm/prisma-client/client-extensions/type-utilities). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/150-type-utilities.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/150-type-utilities.mdx new file mode 100644 index 0000000000..e8086d3c03 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/150-type-utilities.mdx @@ -0,0 +1,101 @@ +--- +title: 'Type utilities' +metaTitle: 'Prisma Client Extensions: Type utilities' +metaDescription: 'Advanced type safety: improve type safety in your custom model methods' +--- + + + +Several type utilities exist within Prisma Client that can assist in the creation of highly type-safe extensions. + + + +## Type Utilities + +[Prisma Client type utilities](/orm/prisma-client/type-safety) are utilities available within your application and Prisma Client extensions and provide useful ways of constructing safe and extendable types for your extension. + +The type utilities available are: + +- `Exact`: Enforces strict type safety on `Input`. `Exact` makes sure that a generic type `Input` strictly complies with the type that you specify in `Shape`. It [narrows](https://www.typescriptlang.org/docs/handbook/2/narrowing.html) `Input` down to the most precise types. +- `Args`: Retrieves the input arguments for any given model and operation. This is particularly useful for extension authors who want to do the following: + - Re-use existing types to extend or modify them. + - Benefit from the same auto-completion experience as on existing operations. +- `Result`: Takes the input arguments and provides the result for a given model and operation. You would usually use this in conjunction with `Args`. As with `Args`, `Result` helps you to re-use existing types to extend or modify them. +- `Payload`: Retrieves the entire structure of the result, as scalars and relations objects for a given model and operation. For example, you can use this to determine which keys are scalars or objects at a type level. + +The following example creates a new operation, `exists`, based on `findFirst`. It has all of the arguments that `findFirst`. + +```ts +const prisma = new PrismaClient().$extends({ + model: { + $allModels: { + // Define a new `exists` operation on all models + // T is a generic type that corresponds to the current model + async exists( + // `this` refers to the current type, e.g. `prisma.user` at runtime + this: T, + + // The `exists` function will use the `where` arguments from the current model, `T`, and the `findFirst` operation + where: Prisma.Args['where'] + ): Promise { + // Retrieve the current model at runtime + const context = Prisma.getExtensionContext(this) + + // Prisma Client query that retrieves data based + const result = await (context as any).findFirst({ where }) + return result !== null + }, + }, + }, +}) + +async function main() { + const user = await prisma.user.exists({ name: 'Alice' }) + const post = await prisma.post.exists({ + OR: [ + { title: { contains: 'Prisma' } }, + { content: { contains: 'Prisma' } }, + ], + }) +} +``` + +## Add a custom property to a method + +The following example illustrates how you can add custom arguments, to a method in an extension: + +```ts highlight=16 +type CacheStrategy = { + swr: number + ttl: number +} + +const prisma = new PrismaClient().$extends({ + model: { + $allModels: { + findMany( + this: T, + args: Prisma.Exact< + A, + // For the `findMany` method, use the arguments from model `T` and the `findMany` method + // and intersect it with `CacheStrategy` as part of `findMany` arguments + Prisma.Args & CacheStrategy + > + ): Prisma.Result { + // method implementation with the cache strategy + }, + }, + }, +}) + +async function main() { + await prisma.post.findMany({ + cacheStrategy: { + ttl: 360, + swr: 60, + }, + }) +} +``` + +The example here is only conceptual. For the actual caching to work, you will have to implement the logic. If you're interested in a caching extension/ service, we recommend taking a look at [Prisma Accelerate](https://www.prisma.io/accelerate). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/200-extension-examples.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/200-extension-examples.mdx new file mode 100644 index 0000000000..04d710ff93 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/200-extension-examples.mdx @@ -0,0 +1,69 @@ +--- +title: 'Shared packages & examples' +metaTitle: 'Prisma Client extensions | Shared packages & examples' +metaDescription: 'Explore the Prisma Client extensions that have been built by Prisma and its community' +--- + +## Extensions made by Prisma + +The following is a list of extensions we've built at Prisma: + +| Extension | Description | +| :------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [`@prisma/extension-accelerate`](https://www.npmjs.com/package/@prisma/extension-accelerate) | Enables [Accelerate](https://www.prisma.io/accelerate), a global database cache available in 300+ locations with built-in connection pooling | +| [`@prisma/extension-pulse`](https://www.npmjs.com/package/@prisma/extension-pulse) | Enables [Pulse](https://www.prisma.io/pulse), a service that captures change events from your database and delivers them instantly to your applications. | +| [`@prisma/extension-read-replicas`](https://github.com/prisma/extension-read-replicas) | Adds read replica support to Prisma Client | + +## Extensions made by Prisma's community + +The following is a list of extensions created by the community. If you want to create your own package, refer to the [Shared Prisma Client extensions](/orm/prisma-client/client-extensions/shared-extensions) documentation. + +| Extension | Description | +| :--------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [`prisma-extension-supabase-rls`](https://github.com/dthyresson/prisma-extension-supabase-rls) | Adds support for Supabase Row Level Security with Prisma | +| [`prisma-extension-bark`](https://github.com/adamjkb/bark) | Implements the Materialized Path pattern that allows you to easily create and interact with tree structures in Prisma | +| [`prisma-cursorstream`](https://github.com/etabits/prisma-cursorstream) | Adds cursor-based streaming | +| [`prisma-gpt`](https://github.com/aliyeysides/prisma-gpt) | Lets you query your database using natural language | +| [`prisma-extension-caching`](https://github.com/isaev-the-poetry/prisma-extension-caching) | Adds the ability to cache complex queries | +| [`prisma-extension-cache-manager`](https://github.com/random42/prisma-extension-cache-manager) | Caches model queries with any [cache-manager](https://www.npmjs.com/package/cache-manager) compatible cache | +| [`prisma-extension-random`](https://github.com/nkeil/prisma-extension-random) | Lets you query for random rows in your database | +| [`prisma-paginate`](https://github.com/sandrewTx08/prisma-paginate) | Adds support for paginating read queries | +| [`prisma-extension-streamdal`](https://github.com/streamdal/prisma-extension-streamdal) | Adds support for Code-Native data pipelines using Streamdal | +| [`prisma-rbac`](https://github.com/multipliedtwice/prisma-rbac) | Adds customizable role-based access control | +| [`prisma-extension-redis`](https://github.com/yxx4c/prisma-extension-redis) | Extensive Prisma extension designed for efficient caching and cache invalidation using Redis and Dragonfly Databases | +| [`prisma-cache-extension`](https://github.com/Shikhar97/prisma-cache) | Prisma extension for caching and invalidating cache with Redis(other Storage options to be supported) | +| [`prisma-extension-casl`](https://github.com/dennemark/prisma-extension-casl) | Prisma client extension that utilizes CASL to enforce authorization logic on most simple and nested queries. | + +If you have built an extension and would like to see it featured, feel free to add it to the list by opening a pull request. + +## Examples + + + +The following example extensions are provided as examples only, and without warranty. They are supposed to show how Prisma Client extensions can be created using approaches documented here. We recommend using these examples as a source of inspiration for building your own extensions. + + + +| Example | Description | +| :------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------ | +| [`audit-log-context`](https://github.com/prisma/prisma-client-extensions/tree/main/audit-log-context) | Provides the current user's ID as context to Postgres audit log triggers | +| [`callback-free-itx`](https://github.com/prisma/prisma-client-extensions/tree/main/callback-free-itx) | Adds a method to start interactive transactions without callbacks | +| [`computed-fields`](https://github.com/prisma/prisma-client-extensions/tree/main/computed-fields) | Adds virtual / computed fields to result objects | +| [`input-transformation`](https://github.com/prisma/prisma-client-extensions/tree/main/input-transformation) | Transforms the input arguments passed to Prisma Client queries to filter the result set | +| [`input-validation`](https://github.com/prisma/prisma-client-extensions/tree/main/input-validation) | Runs custom validation logic on input arguments passed to mutation methods | +| [`instance-methods`](https://github.com/prisma/prisma-client-extensions/tree/main/instance-methods) | Adds Active Record-like methods like `save()` and `delete()` to result objects | +| [`json-field-types`](https://github.com/prisma/prisma-client-extensions/tree/main/json-field-types) | Uses strongly-typed runtime parsing for data stored in JSON columns | +| [`model-filters`](https://github.com/prisma/prisma-client-extensions/tree/main/model-filters) | Adds reusable filters that can composed into complex `where` conditions for a model | +| [`obfuscated-fields`](https://github.com/prisma/prisma-client-extensions/tree/main/obfuscated-fields) | Prevents sensitive data (e.g. `password` fields) from being included in results | +| [`query-logging`](https://github.com/prisma/prisma-client-extensions/tree/main/query-logging) | Wraps Prisma Client queries with simple query timing and logging | +| [`readonly-client`](https://github.com/prisma/prisma-client-extensions/tree/main/readonly-client) | Creates a client that only allows read operations | +| [`retry-transactions`](https://github.com/prisma/prisma-client-extensions/tree/main/retry-transactions) | Adds a retry mechanism to transactions with exponential backoff and jitter | +| [`row-level-security`](https://github.com/prisma/prisma-client-extensions/tree/main/row-level-security) | Uses Postgres row-level security policies to isolate data a multi-tenant application | +| [`static-methods`](https://github.com/prisma/prisma-client-extensions/tree/main/static-methods) | Adds custom query methods to Prisma Client models | +| [`transformed-fields`](https://github.com/prisma/prisma-client-extensions/tree/main/transformed-fields) | Demonstrates how to use result extensions to transform query results and add i18n to an app | +| [`exists-method`](https://github.com/prisma/prisma-client-extensions/tree/main/exists-fn) | Demonstrates how to add an `exists` method to all your models | +| [`update-delete-ignore-not-found `](https://github.com/prisma/prisma-client-extensions/tree/main/update-delete-ignore-not-found) | Demonstrates how to add the `updateIgnoreOnNotFound` and `deleteIgnoreOnNotFound` methods to all your models. | + +## Going further + +- Learn more about [Prisma Client extensions](/orm/prisma-client/client-extensions). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/100-soft-delete-middleware.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/100-soft-delete-middleware.mdx new file mode 100644 index 0000000000..b44123c383 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/100-soft-delete-middleware.mdx @@ -0,0 +1,672 @@ +--- +title: 'Middleware sample: soft delete' +metaTitle: 'Middleware sample: soft delete (Reference)' +metaDescription: 'How to use middleware to intercept deletes and set a field value instead of deleting the record.' +toc_max_heading_level: 4 +--- + + + +The following sample uses [middleware](/orm/prisma-client/client-extensions/middleware) to perform a **soft delete**. Soft delete means that a record is **marked as deleted** by changing a field like `deleted` to `true` rather than actually being removed from the database. Reasons to use a soft delete include: + +- Regulatory requirements that mean you have to keep data for a certain amount of time +- 'Trash' / 'bin' functionality that allows users to restore content that was deleted + + + +**Note:** This page demonstrates a sample use of middleware. We do not intend the sample to be a fully functional soft delete feature and it does not cover all edge cases. For example, the middleware does not work with nested writes and therefore won't capture situations where you use `delete` or `deleteMany` as an option e.g. in an `update` query. + + + +This sample uses the following schema - note the `deleted` field on the `Post` model: + +```prisma highlight=28;normal +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id Int @id @default(autoincrement()) + name String? + email String @unique + posts Post[] + followers User[] @relation("UserToUser") + user User? @relation("UserToUser", fields: [userId], references: [id]) + userId Int? +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? + user User? @relation(fields: [userId], references: [id]) + userId Int? + tags Tag[] + views Int @default(0) + //highlight-next-line + deleted Boolean @default(false) +} + +model Category { + id Int @id @default(autoincrement()) + parentCategory Category? @relation("CategoryToCategory", fields: [categoryId], references: [id]) + category Category[] @relation("CategoryToCategory") + categoryId Int? +} + +model Tag { + tagName String @id // Must be unique + posts Post[] +} +``` + + + +## Step 1: Store status of record + +Add a field named `deleted` to the `Post` model. You can choose between two field types depending on your requirements: + +- `Boolean` with a default value of `false`: + + ```prisma highlight=4;normal + model Post { + id Int @id @default(autoincrement()) + ... + //highlight-next-line + deleted Boolean @default(false) + } + ``` + +- Create a nullable `DateTime` field so that you know exactly _when_ a record was marked as deleted - `NULL` indicates that a record has not been deleted. In some cases, storing when a record was removed may be a regulatory requirement: + + ```prisma highlight=4;normal + model Post { + id Int @id @default(autoincrement()) + ... + //highlight-next-line + deleted DateTime? + } + ``` + +> **Note**: Using two separate fields (`isDeleted` and `deletedDate`) may result in these two fields becoming out of sync - for example, a record may be marked as deleted but have no associated date.) + +This sample uses a `Boolean` field type for simplicity. + +## Step 2: Soft delete middleware + +Add a middleware that performs the following tasks: + +- Intercepts `delete()` and `deleteMany()` queries for the `Post` model +- Changes the `params.action` to `update` and `updateMany` respectively +- Introduces a `data` argument and sets `{ deleted: true }`, preserving other filter arguments if they exist + +Run the following sample to test the soft delete middleware: + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient({}) + +async function main() { + /***********************************/ + /* SOFT DELETE MIDDLEWARE */ + /***********************************/ + + prisma.$use(async (params, next) => { + // Check incoming query type + if (params.model == 'Post') { + if (params.action == 'delete') { + // Delete queries + // Change action to an update + params.action = 'update' + params.args['data'] = { deleted: true } + } + if (params.action == 'deleteMany') { + // Delete many queries + params.action = 'updateMany' + if (params.args.data != undefined) { + params.args.data['deleted'] = true + } else { + params.args['data'] = { deleted: true } + } + } + } + return next(params) + }) + + /***********************************/ + /* TEST */ + /***********************************/ + + const titles = [ + { title: 'How to create soft delete middleware' }, + { title: 'How to install Prisma' }, + { title: 'How to update a record' }, + ] + + console.log('\u001b[1;34mSTARTING SOFT DELETE TEST \u001b[0m') + console.log('\u001b[1;34m#################################### \u001b[0m') + + let i = 0 + let posts = new Array() + + // Create 3 new posts with a randomly assigned title each time + for (i == 0; i < 3; i++) { + const createPostOperation = prisma.post.create({ + data: titles[Math.floor(Math.random() * titles.length)], + }) + posts.push(createPostOperation) + } + + var postsCreated = await prisma.$transaction(posts) + + console.log( + 'Posts created with IDs: ' + + '\u001b[1;32m' + + postsCreated.map((x) => x.id) + + '\u001b[0m' + ) + + // Delete the first post from the array + const deletePost = await prisma.post.delete({ + where: { + id: postsCreated[0].id, // Random ID + }, + }) + + // Delete the 2nd two posts + const deleteManyPosts = await prisma.post.deleteMany({ + where: { + id: { + in: [postsCreated[1].id, postsCreated[2].id], + }, + }, + }) + + const getPosts = await prisma.post.findMany({ + where: { + id: { + in: postsCreated.map((x) => x.id), + }, + }, + }) + + console.log() + + console.log( + 'Deleted post with ID: ' + '\u001b[1;32m' + deletePost.id + '\u001b[0m' + ) + console.log( + 'Deleted posts with IDs: ' + + '\u001b[1;32m' + + [postsCreated[1].id + ',' + postsCreated[2].id] + + '\u001b[0m' + ) + console.log() + console.log( + 'Are the posts still available?: ' + + (getPosts.length == 3 + ? '\u001b[1;32m' + 'Yes!' + '\u001b[0m' + : '\u001b[1;31m' + 'No!' + '\u001b[0m') + ) + console.log() + console.log('\u001b[1;34m#################################### \u001b[0m') + // 4. Count ALL posts + const f = await prisma.post.findMany({}) + console.log('Number of posts: ' + '\u001b[1;32m' + f.length + '\u001b[0m') + + // 5. Count DELETED posts + const r = await prisma.post.findMany({ + where: { + deleted: true, + }, + }) + console.log( + 'Number of SOFT deleted posts: ' + '\u001b[1;32m' + r.length + '\u001b[0m' + ) +} + +main() +``` + +The sample outputs the following: + +```no-lines +STARTING SOFT DELETE TEST +#################################### +Posts created with IDs: 587,588,589 + +Deleted post with ID: 587 +Deleted posts with IDs: 588,589 + +Are the posts still available?: Yes! + +#################################### +``` + +:::tip + +Comment out the middleware to see the message change. + +::: + +✔ Pros of this approach to soft delete include: + +- Soft delete happens at data access level, which means that you cannot delete records unless you use raw SQL + +✘ Cons of this approach to soft delete include: + +- Content can still be read and updated unless you explicitly filter by `where: { deleted: false }` - in a large project with a lot of queries, there is a risk that soft deleted content will still be displayed +- You can still use raw SQL to delete records + +:::tip + +You can create rules or triggers ([MySQL](https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html) and [PostgreSQL](https://www.postgresql.org/docs/8.1/rules-update.html)) at a database level to prevent records from being deleted. + +::: + +## Step 3: Optionally prevent read/update of soft deleted records + +In step 2, we implemented middleware that prevents `Post` records from being deleted. However, you can still read and update deleted records. This step explores two ways to prevent the reading and updating of deleted records. + +> **Note**: These options are just ideas with pros and cons, you may choose to do something entirely different. + +### Option 1: Implement filters in your own application code + +In this option: + +- Prisma Client middleware is responsible for preventing records from being deleted +- Your own application code (which could be a GraphQL API, a REST API, a module) is responsible for filtering out deleted posts where necessary (`{ where: { deleted: false } }`) when reading and updating data - for example, the `getPost` GraphQL resolver never returns a deleted post + +✔ Pros of this approach to soft delete include: + +- No change to Prisma Client's create/update queries - you can easily request deleted records if you need them +- Modifying queries in middleware can have some unintended consequences, such as changing query return types (see option 2) + +✘ Cons of this approach to soft delete include: + +- Logic relating to soft delete maintained in two different places +- If your API surface is very large and maintained by multiple contributors, it may be difficult to enforce certain business rules (for example, never allow deleted records to be updated) + +### Option 2: Use middleware to determine the behavior of read/update queries for deleted records + +Option two uses Prisma Client middleware to prevent soft deleted records from being returned. The following table describes how the middleware affects each query: + +| **Query** | **Middleware logic** | **Changes to return type** | +| :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- | +| `findUnique()` | 🔧 Change query to `findFirst` (because you cannot apply `deleted: false` filters to `findUnique()`)
🔧 Add `where: { deleted: false }` filter to exclude soft deleted posts
🔧 From version 5.0.0, you can use `findUnique()` to apply `delete: false` filters since [non unique fields are exposed](/orm/reference/prisma-client-reference#filter-on-non-unique-fields-with-userwhereuniqueinput). | No change | | +| `findMany` | 🔧 Add `where: { deleted: false }` filter to exclude soft deleted posts by default
🔧 Allow developers to **explicitly request** soft deleted posts by specifying `deleted: true` | No change | +| `update` | 🔧 Change query to `updateMany` (because you cannot apply `deleted: false` filters to `update`)
🔧 Add `where: { deleted: false }` filter to exclude soft deleted posts | `{ count: n }` instead of `Post` | +| `updateMany` | 🔧 Add `where: { deleted: false }` filter to exclude soft deleted posts | No change | + +- **Is it not possible to utilize soft delete with `findFirstOrThrow()` or `findUniqueOrThrow()`?**
+ From version [5.1.0](https://github.com/prisma/prisma/releases/5.1.0), you can apply soft delete `findFirstOrThrow()` or `findUniqueOrThrow()` by using middleware. +- **Why are you making it possible to use `findMany()` with a `{ where: { deleted: true } }` filter, but not `updateMany()`?**
+ This particular sample was written to support the scenario where a user can _restore_ their deleted blog post (which requires a list of soft deleted posts) - but the user should not be able to edit a deleted post. +- **Can I still `connect` or `connectOrCreate` a deleted post?**
+ In this sample - yes. The middleware does not prevent you from connecting an existing, soft deleted post to a user. + +Run the following sample to see how middleware affects each query: + +```ts +import { PrismaClient, Prisma } from '@prisma/client' + +const prisma = new PrismaClient({}) + +async function main() { + /***********************************/ + /* SOFT DELETE MIDDLEWARE */ + /***********************************/ + + prisma.$use(async (params, next) => { + if (params.model == 'Post') { + if (params.action === 'findUnique' || params.action === 'findFirst') { + // Change to findFirst - you cannot filter + // by anything except ID / unique with findUnique() + params.action = 'findFirst' + // Add 'deleted' filter + // ID filter maintained + params.args.where['deleted'] = false + } + if ( + params.action === 'findFirstOrThrow' || + params.action === 'findUniqueOrThrow' + ) { + if (params.args.where) { + if (params.args.where.deleted == undefined) { + // Exclude deleted records if they have not been explicitly requested + params.args.where['deleted'] = false + } + } else { + params.args['where'] = { deleted: false } + } + } + if (params.action === 'findMany') { + // Find many queries + if (params.args.where) { + if (params.args.where.deleted == undefined) { + params.args.where['deleted'] = false + } + } else { + params.args['where'] = { deleted: false } + } + } + } + return next(params) + }) + + prisma.$use(async (params, next) => { + if (params.model == 'Post') { + if (params.action == 'update') { + // Change to updateMany - you cannot filter + // by anything except ID / unique with findUnique() + params.action = 'updateMany' + // Add 'deleted' filter + // ID filter maintained + params.args.where['deleted'] = false + } + if (params.action == 'updateMany') { + if (params.args.where != undefined) { + params.args.where['deleted'] = false + } else { + params.args['where'] = { deleted: false } + } + } + } + return next(params) + }) + + prisma.$use(async (params, next) => { + // Check incoming query type + if (params.model == 'Post') { + if (params.action == 'delete') { + // Delete queries + // Change action to an update + params.action = 'update' + params.args['data'] = { deleted: true } + } + if (params.action == 'deleteMany') { + // Delete many queries + params.action = 'updateMany' + if (params.args.data != undefined) { + params.args.data['deleted'] = true + } else { + params.args['data'] = { deleted: true } + } + } + } + return next(params) + }) + + /***********************************/ + /* TEST */ + /***********************************/ + + const titles = [ + { title: 'How to create soft delete middleware' }, + { title: 'How to install Prisma' }, + { title: 'How to update a record' }, + ] + + console.log('\u001b[1;34mSTARTING SOFT DELETE TEST \u001b[0m') + console.log('\u001b[1;34m#################################### \u001b[0m') + + let i = 0 + let posts = new Array() + + // Create 3 new posts with a randomly assigned title each time + for (i == 0; i < 3; i++) { + const createPostOperation = prisma.post.create({ + data: titles[Math.floor(Math.random() * titles.length)], + }) + posts.push(createPostOperation) + } + + var postsCreated = await prisma.$transaction(posts) + + console.log( + 'Posts created with IDs: ' + + '\u001b[1;32m' + + postsCreated.map((x) => x.id) + + '\u001b[0m' + ) + + // Delete the first post from the array + const deletePost = await prisma.post.delete({ + where: { + id: postsCreated[0].id, // Random ID + }, + }) + + // Delete the 2nd two posts + const deleteManyPosts = await prisma.post.deleteMany({ + where: { + id: { + in: [postsCreated[1].id, postsCreated[2].id], + }, + }, + }) + + const getOnePost = await prisma.post.findUnique({ + where: { + id: postsCreated[0].id, + }, + }) + + const getOneUniquePostOrThrow = async () => + await prisma.post.findUniqueOrThrow({ + where: { + id: postsCreated[0].id, + }, + }) + + const getOneFirstPostOrThrow = async () => + await prisma.post.findFirstOrThrow({ + where: { + id: postsCreated[0].id, + }, + }) + + const getPosts = await prisma.post.findMany({ + where: { + id: { + in: postsCreated.map((x) => x.id), + }, + }, + }) + + const getPostsAnDeletedPosts = await prisma.post.findMany({ + where: { + id: { + in: postsCreated.map((x) => x.id), + }, + deleted: true, + }, + }) + + const updatePost = await prisma.post.update({ + where: { + id: postsCreated[1].id, + }, + data: { + title: 'This is an updated title (update)', + }, + }) + + const updateManyDeletedPosts = await prisma.post.updateMany({ + where: { + deleted: true, + id: { + in: postsCreated.map((x) => x.id), + }, + }, + data: { + title: 'This is an updated title (updateMany)', + }, + }) + + console.log() + + console.log( + 'Deleted post (delete) with ID: ' + + '\u001b[1;32m' + + deletePost.id + + '\u001b[0m' + ) + console.log( + 'Deleted posts (deleteMany) with IDs: ' + + '\u001b[1;32m' + + [postsCreated[1].id + ',' + postsCreated[2].id] + + '\u001b[0m' + ) + console.log() + console.log( + 'findUnique: ' + + (getOnePost?.id != undefined + ? '\u001b[1;32m' + 'Posts returned!' + '\u001b[0m' + : '\u001b[1;31m' + + 'Post not returned!' + + '(Value is: ' + + JSON.stringify(getOnePost) + + ')' + + '\u001b[0m') + ) + try { + console.log('findUniqueOrThrow: ') + await getOneUniquePostOrThrow() + } catch (error) { + if ( + error instanceof Prisma.PrismaClientKnownRequestError && + error.code == 'P2025' + ) + console.log( + '\u001b[1;31m' + + 'PrismaClientKnownRequestError is catched' + + '(Error name: ' + + error.name + + ')' + + '\u001b[0m' + ) + } + try { + console.log('findFirstOrThrow: ') + await getOneFirstPostOrThrow() + } catch (error) { + if ( + error instanceof Prisma.PrismaClientKnownRequestError && + error.code == 'P2025' + ) + console.log( + '\u001b[1;31m' + + 'PrismaClientKnownRequestError is catched' + + '(Error name: ' + + error.name + + ')' + + '\u001b[0m' + ) + } + console.log() + console.log( + 'findMany: ' + + (getPosts.length == 3 + ? '\u001b[1;32m' + 'Posts returned!' + '\u001b[0m' + : '\u001b[1;31m' + 'Posts not returned!' + '\u001b[0m') + ) + console.log( + 'findMany ( delete: true ): ' + + (getPostsAnDeletedPosts.length == 3 + ? '\u001b[1;32m' + 'Posts returned!' + '\u001b[0m' + : '\u001b[1;31m' + 'Posts not returned!' + '\u001b[0m') + ) + console.log() + console.log( + 'update: ' + + (updatePost.id != undefined + ? '\u001b[1;32m' + 'Post updated!' + '\u001b[0m' + : '\u001b[1;31m' + + 'Post not updated!' + + '(Value is: ' + + JSON.stringify(updatePost) + + ')' + + '\u001b[0m') + ) + console.log( + 'updateMany ( delete: true ): ' + + (updateManyDeletedPosts.count == 3 + ? '\u001b[1;32m' + 'Posts updated!' + '\u001b[0m' + : '\u001b[1;31m' + 'Posts not updated!' + '\u001b[0m') + ) + console.log() + console.log('\u001b[1;34m#################################### \u001b[0m') + // 4. Count ALL posts + const f = await prisma.post.findMany({}) + console.log( + 'Number of active posts: ' + '\u001b[1;32m' + f.length + '\u001b[0m' + ) + + // 5. Count DELETED posts + const r = await prisma.post.findMany({ + where: { + deleted: true, + }, + }) + console.log( + 'Number of SOFT deleted posts: ' + '\u001b[1;32m' + r.length + '\u001b[0m' + ) +} + +main() +``` + +The sample outputs the following: + +``` +STARTING SOFT DELETE TEST +#################################### +Posts created with IDs: 680,681,682 + +Deleted post (delete) with ID: 680 +Deleted posts (deleteMany) with IDs: 681,682 + +findUnique: Post not returned!(Value is: []) +findMany: Posts not returned! +findMany ( delete: true ): Posts returned! + +update: Post not updated!(Value is: {"count":0}) +updateMany ( delete: true ): Posts not updated! + +#################################### +Number of active posts: 0 +Number of SOFT deleted posts: 95 +``` + +✔ Pros of this approach: + +- A developer can make a conscious choice to include deleted records in `findMany` +- You cannot accidentally read or update a deleted record + +✖ Cons of this approach: + +- Not obvious from API that you aren't getting all records and that `{ where: { deleted: false } }` is part of the default query +- Return type `update` affected because middleware changes the query to `updateMany` +- Doesn't handle complex queries with `AND`, `OR`, `every`, etc... +- Doesn't handle filtering when using `include` from another model. + +## FAQ + +### Can I add a global `includeDeleted` to the `Post` model? + +You may be tempted to 'hack' your API by adding a `includeDeleted` property to the `Post` model and make the following query possible: + +```ts +prisma.post.findMany({ where: { includeDeleted: true } }) +``` + +> **Note**: You would still need to write middleware. + +We **✘ do not** recommend this approach as it pollutes the schema with fields that do not represent real data. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/200-logging-middleware.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/200-logging-middleware.mdx new file mode 100644 index 0000000000..b13eda09f9 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/200-logging-middleware.mdx @@ -0,0 +1,90 @@ +--- +title: 'Middleware sample: logging' +metaTitle: 'Middleware sample: logging (Reference)' +metaDescription: 'How to use middleware to log the time taken to perform any query.' +--- + + + +The following example logs the time taken for a Prisma Client query to run: + +```ts +const prisma = new PrismaClient() + +prisma.$use(async (params, next) => { + const before = Date.now() + + const result = await next(params) + + const after = Date.now() + + console.log(`Query ${params.model}.${params.action} took ${after - before}ms`) + + return result +}) + +const create = await prisma.post.create({ + data: { + title: 'Welcome to Prisma Day 2020', + }, +}) + +const createAgain = await prisma.post.create({ + data: { + title: 'All about database collation', + }, +}) +``` + +Example output: + +```no-lines +Query Post.create took 92ms +Query Post.create took 15ms +``` + +The example is based on the following sample schema: + +```prisma +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "mysql" + url = env("DATABASE_URL") +} + +model Post { + authorId Int? + content String? + id Int @id @default(autoincrement()) + published Boolean @default(false) + title String + user User? @relation(fields: [authorId], references: [id]) + language String? + + @@index([authorId], name: "authorId") +} + +model User { + email String @unique + id Int @id @default(autoincrement()) + name String? + posts Post[] + extendedProfile Json? + role Role @default(USER) +} + +enum Role { + ADMIN + USER + MODERATOR +} +``` + + + +## Going further + +You can also use [Prisma Client extensions](/orm/prisma-client/client-extensions) to log the time it takes to perform a query. A functional example can be found in [this GitHub repository](https://github.com/prisma/prisma-client-extensions/tree/main/query-logging). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/300-session-data-middleware.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/300-session-data-middleware.mdx new file mode 100644 index 0000000000..6893713396 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/300-session-data-middleware.mdx @@ -0,0 +1,72 @@ +--- +title: 'Middleware sample: session data' +metaTitle: 'Middleware sample: session data (Reference)' +metaDescription: 'How to use middleware to set the value taken from session state.' +hide_table_of_contents: true +--- + + + +The following example sets the `language` field of each `Post` to the context language (taken, for example, from session state): + +```ts +const prisma = new PrismaClient() + +const contextLanguage = 'en-us' // Session state + +prisma.$use(async (params, next) => { + if (params.model == 'Post' && params.action == 'create') { + params.args.data.language = contextLanguage + } + + return next(params) +}) + +const create = await prisma.post.create({ + data: { + title: 'My post in English', + }, +}) +``` + +The example is based on the following sample schema: + +```prisma +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "mysql" + url = env("DATABASE_URL") +} + +model Post { + authorId Int? + content String? + id Int @id @default(autoincrement()) + published Boolean @default(false) + title String + user User? @relation(fields: [authorId], references: [id]) + language String? + + @@index([authorId], name: "authorId") +} + +model User { + email String @unique + id Int @id @default(autoincrement()) + name String? + posts Post[] + extendedProfile Json? + role Role @default(USER) +} + +enum Role { + ADMIN + USER + MODERATOR +} +``` + + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/index.mdx new file mode 100644 index 0000000000..35fd2675e1 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/500-middleware/index.mdx @@ -0,0 +1,193 @@ +--- +title: 'Middleware' +metaTitle: 'Middleware (Reference)' +metaDescription: 'Prisma Client middleware allows you to perform actions before or after any query on any model with the prisma.$use method.' +--- + + + + + +**Deprecated**: Middleware is deprecated in version 4.16.0. + +We recommend using the [Prisma Client extensions `query` component type](/orm/prisma-client/client-extensions/query) as an alternative to middleware. Prisma Client extensions were first introduced into Preview in version 4.7.0 and made Generally Available in 4.16.0. + +Prisma Client extensions allow you to create independent Prisma Client instances and bind each client to a specific filter or user. For example, you could bind clients to specific users to provide user isolation. Prisma Client extensions also provide end-to-end type safety. + + + +Middlewares act as query-level lifecycle hooks, which allow you to perform an action before or after a query runs. Use the [`prisma.$use`](/orm/reference/prisma-client-reference#use) method to add middleware, as follows: + +```ts highlight=4-9,12-17;normal +const prisma = new PrismaClient() + +// Middleware 1 +//highlight-start +prisma.$use(async (params, next) => { + // Manipulate params here + const result = await next(params) + // See results here + return result +}) +//highlight-end + +// Middleware 2 +//highlight-start +prisma.$use(async (params, next) => { + // Manipulate params here + const result = await next(params) + // See results here + return result +}) +//highlight-end + +// Queries here +``` + + + +Do not invoke `next` multiple times within a middleware when using [batch transactions](/orm/prisma-client/queries/transactions#sequential-prisma-client-operations). This will cause you to break out of the transaction and lead to unexpected results. + + + +[`params`](/orm/reference/prisma-client-reference#params) represent parameters available in the middleware, such as the name of the query, and [`next`](/orm/reference/prisma-client-reference#next) represents [the next middleware in the stack _or_ the original Prisma Client query](#running-order-and-the-middleware-stack). + +Possible use cases for middleware include: + +- Setting or overwriting a field value - for example, [setting the context language of a blog post comment](/orm/prisma-client/client-extensions/middleware/session-data-middleware) +- Validating input data - for example, check user input for inappropriate language via an external service +- Intercept a `delete` query and change it to an `update` in order to perform a [soft delete](/orm/prisma-client/client-extensions/middleware/soft-delete-middleware) +- [Log the time taken to perform a query](/orm/prisma-client/client-extensions/middleware/logging-middleware) + +There are many more use cases for middleware - this list serves as inspiration for the types of problems that middleware is designed to address. + + + +## Samples + +The following sample scenarios show how to use middleware in practice: + + + +## Where to add middleware + +Add Prisma Client middleware **outside the context of the request handler**, otherwise each request adds a new _instance_ of the middleware to the stack. The following example demonstrates where to add Prisma Client middleware in the context of an Express app: + +```ts highlight=6-11;normal +import express from 'express' +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +//highlight-start +prisma.$use(async (params, next) => { + // Manipulate params here + const result = await next(params) + // See results here + return result +}) +//highlight-end + +const app = express() +app.get('/feed', async (req, res) => { + // NO MIDDLEWARE HERE + const posts = await prisma.post.findMany({ + where: { published: true }, + include: { author: true }, + }) + res.json(posts) +}) +``` + +## Running order and the middleware stack + +If you have multiple middlewares, the running order for **each separate query** is: + +1. All logic **before** `await next(params)` in each middleware, in descending order +2. All logic **after** `await next(params)` in each middleware, in ascending order + +Depending on where you are in the stack, `await next(params)` either: + +- Runs the next middleware (in middlewares #1 and #2 in the example) _or_ +- Runs the original Prisma Client query (in middleware #3) + +```ts +const prisma = new PrismaClient() + +// Middleware 1 +prisma.$use(async (params, next) => { + console.log(params.args.data.title) + console.log('1') + const result = await next(params) + console.log('6') + return result +}) + +// Middleware 2 +prisma.$use(async (params, next) => { + console.log('2') + const result = await next(params) + console.log('5') + return result +}) + +// Middleware 3 +prisma.$use(async (params, next) => { + console.log('3') + const result = await next(params) + console.log('4') + return result +}) + +const create = await prisma.post.create({ + data: { + title: 'Welcome to Prisma Day 2020', + }, +}) + +const create2 = await prisma.post.create({ + data: { + title: 'How to Prisma!', + }, +}) +``` + +Output: + +```no-lines +Welcome to Prisma Day 2020 +1 +2 +3 +4 +5 +6 +How to Prisma! +1 +2 +3 +4 +5 +6 +``` + +## Performance and appropriate use cases + +Middleware executes for **every** query, which means that overuse has the potential to negatively impact performance. To avoid adding performance overheads: + +- Check the `params.model` and `params.action` properties early in your middleware to avoid running logic unnecessarily: + + ```ts + prisma.$use(async (params, next) => { + if (params.model == 'Post' && params.action == 'delete') { + // Logic only runs for delete action and Post model + } + return next(params) + }) + ``` + +- Consider whether middleware is the appropriate solution for your scenario. For example: + + - If you need to populate a field, can you use the [`@default`](/orm/reference/prisma-schema-reference#default) attribute? + - If you need to set the value of a `DateTime` field, can you use the `now()` function or the `@updatedAt` attribute? + - If you need to perform more complex validation, can you use a `CHECK` constraint in the database itself? diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/index.mdx new file mode 100644 index 0000000000..cfcf31b5e2 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/300-client-extensions/index.mdx @@ -0,0 +1,273 @@ +--- +title: 'Extensions' +metaTitle: 'Prisma Client extensions' +metaDescription: 'Extend the functionality of Prisma Client' +toc_max_heading_level: 4 +--- + + + + + +Prisma Client extensions are Generally Available from versions 4.16.0 and later. They were introduced in Preview in version 4.7.0. Make sure you enable the `clientExtensions` Preview feature flag if you are running on a version earlier than 4.16.0. + + + +You can use Prisma Client extensions to add functionality to your models, result objects, and queries, or to add client-level methods. + +You can create an extension with one or more of the following component types: + +- `model`: [add custom methods or fields to your models](/orm/prisma-client/client-extensions/model) +- `client`: [add client-level methods to Prisma Client](/orm/prisma-client/client-extensions/client) +- `query`: [create custom Prisma Client queries](/orm/prisma-client/client-extensions/query) +- `result`: [add custom fields to your query results](/orm/prisma-client/client-extensions/result) + +For example, you might create an extension that uses the `model` and `client` component types. + + + +## About Prisma Client extensions + +When you use a Prisma Client extension, you create an _extended client_. An extended client is a lightweight variant of the standard Prisma Client that is wrapped by one or more extensions. The standard client is not mutated. You can add as many extended clients as you want to your project. [Learn more about extended clients](#extended-clients). + +You can associate a single extension, or multiple extensions, with an extended client. [Learn more about multiple extensions](#multiple-extensions). + +You can [share your Prisma Client extensions](/orm/prisma-client/client-extensions/shared-extensions) with other Prisma ORM users, and [import Prisma Client extensions developed by other users](/orm/prisma-client/client-extensions/shared-extensions#install-a-shared-packaged-extension) into your Prisma ORM project. + +### Extended clients + +Extended clients interact with each other, and with the standard client, as follows: + +- Each extended client operates independently in an isolated instance. +- Extended clients cannot conflict with each other, or with the standard client. +- All extended clients and the standard client communicate with the same [Prisma ORM query engine](/orm/more/under-the-hood/engines). +- All extended clients and the standard client share the same connection pool. + +> **Note**: The author of an extension can modify this behavior since they're able to run arbitrary code as part of an extension. For example, an extension might actually create an entirely new `PrismaClient` instance (including its own query engine and connection pool). Be sure to check the documentation of the extension you're using to learn about any specific behavior it might implement. + +### Example use cases for extended clients + +Because extended clients operate in isolated instances, they can be a good way to do the following, for example: + +- Implement row-level security (RLS), where each HTTP request has its own client with its own RLS extension, customized with session data. This can keep each user entirely separate, each in a separate client. +- Add a `user.current()` method for the `User` model to get the currently logged-in user. +- Enable more verbose logging for requests if a debug cookie is set. +- Attach a unique request id to all logs so that you can correlate them later, for example to help you analyze the operations that Prisma Client carries out. +- Remove a `delete` method from models unless the application calls the admin endpoint and the user has the necessary privileges. + +## Add an extension to Prisma Client + +You can create an extension using two primary ways: + +- Use the client-level [`$extends`](/orm/reference/prisma-client-reference#client-methods) method + + ```ts + const prisma = new PrismaClient().$extends({ + name: 'signUp', // Optional: name appears in error logs + model: { // This is a `model` component + user: { ... } // The extension logic for the `user` model goes inside the curly braces + }, + }) + ``` + +- Use the `Prisma.defineExtension` method to define an extension and assign it to a variable, and then pass the extension to the client-level `$extends` method + + ```ts + import { Prisma } from '@prisma/client' + + // Define the extension + const myExtension = Prisma.defineExtension({ + name: 'signUp', // Optional: name appears in error logs + model: { // This is a `model` component + user: { ... } // The extension logic for the `user` model goes inside the curly braces + }, + }) + + // Pass the extension to a Prisma Client instance + const prisma = new PrismaClient().$extends(myExtension) + ``` + + :::tip + + This pattern is useful for when you would like to separate extensions into multiple files or directories within a project. + + ::: + +The above examples use the [`model` extension component](/orm/prisma-client/client-extensions/model) to extend the `User` model. + +In your `$extends` method, use the appropriate extension component or components ([`model`](/orm/prisma-client/client-extensions/model), [`client`](/orm/prisma-client/client-extensions/client), [`result`](/orm/prisma-client/client-extensions/result) or [`query`](/orm/prisma-client/client-extensions/query)). + +## Name an extension for error logs + +You can name your extensions to help identify them in error logs. To do so, use the optional field `name`. For example: + +```ts +const prisma = new PrismaClient().$extends({ + name: `signUp`, // (Optional) Extension name + model: { + user: { ... } + }, +}) +``` + +## Multiple extensions + +You can associate an extension with an [extended client](#about-prisma-client-extensions) in one of two ways: + +- You can associate it with an extended client on its own, or +- You can combine the extension with other extensions and associate all of these extensions with an extended client. The functionality from these combined extensions applies to the same extended client. + Note: [Combined extensions can conflict](#conflicts-in-combined-extensions). + +You can combine the two approaches above. For example, you might associate one extension with its own extended client and associate two other extensions with another extended client. [Learn more about how client instances interact](#extended-clients). + +### Apply multiple extensions to an extended client + +In the following example, suppose that you have two extensions, `extensionA` and `extensionB`. There are two ways to combine these. + +#### Option 1: Declare the new client in one line + +With this option, you apply both extensions to a new client in one line of code. + +```ts +// First of all, store your original Prisma Client in a variable as usual +const prisma = new PrismaClient() + +// Declare an extended client that has an extensionA and extensionB +const prismaAB = prisma.$extends(extensionA).$extends(extensionB) +``` + +You can then refer to `prismaAB` in your code, for example `prismaAB.myExtensionMethod()`. + +#### Option 2: Declare multiple extended clients + +The advantage of this option is that you can call any of the extended clients separately. + +```ts +// First of all, store your original Prisma Client in a variable as usual +const prisma = new PrismaClient() + +// Declare an extended client that has extensionA applied +const prismaA = prisma.$extends(extensionA) + +// Declare an extended client that has extensionB applied +const prismaB = prisma.$extends(extensionB) + +// Declare an extended client that is a combination of clientA and clientB +const prismaAB = prismaA.$extends(extensionB) +``` + +In your code, you can call any of these clients separately, for example `prismaA.myExtensionMethod()`, `prismaB.myExtensionMethod()`, or `prismaAB.myExtensionMethod()`. + +### Conflicts in combined extensions + +When you combine two or more extensions into a single extended client, then the _last_ extension that you declare takes precedence in any conflict. In the example in option 1 above, suppose there is a method called `myExtensionMethod()` defined in `extensionA` and a method called `myExtensionMethod()` in `extensionB`. When you call `prismaAB.myExtensionMethod()`, then Prisma Client uses `myExtensionMethod()` as defined in `extensionB`. + +## Type of an extended client + +You can infer the type of an extended Prisma Client instance using the [`typeof`](https://www.typescriptlang.org/docs/handbook/2/typeof-types.html) utility as follows: + +```ts +const extendedPrismaClient = new PrismaClient().$extends({ + /** extension */ +}) + +type ExtendedPrismaClient = typeof extendedPrismaClient +``` + +If you're using Prisma Client as a singleton, you can get the type of the extended Prisma Client instance using the `typeof` and [`ReturnType`](https://www.typescriptlang.org/docs/handbook/utility-types.html#returntypetype) utilities as follows: + +```ts +function getExtendedClient() { + return new PrismaClient().$extends({ + /* extension */ + }) +} + +type ExtendedPrismaClient = ReturnType +``` + +## Extending model types with `Prisma.Result` + +You can use the `Prisma.Result` type utility to extend model types to include properties added via client extensions. This allows you to infer the type of the extended model, including the extended properties. + +### Example + +The following example demonstrates how to use `Prisma.Result` to extend the `User` model type to include a `__typename` property added via a client extension. + +```ts +import { PrismaClient, Prisma } from '@prisma/client' + +const prisma = new PrismaClient().$extends({ + result: { + user: { + __typename: { + needs: {}, + compute() { + return 'User' + }, + }, + }, + }, +}) + +type ExtendedUser = Prisma.Result + +async function main() { + const user: ExtendedUser = await prisma.user.findFirstOrThrow({ + select: { + id: true, + __typename: true, + }, + }) + + console.log(user.__typename) // Output: 'User' +} + +main() +``` + +The `Prisma.Result` type utility is used to infer the type of the extended `User` model, including the `__typename` property added via the client extension. + +## Limitations + +### Usage of `$on` and `$use` with extended clients + +`$on` and `$use` are not available in extended clients. If you would like to continue using these [client-level methods](/orm/reference/prisma-client-reference#client-methods) with an extended client, you will need to hook them up before extending the client. + +```ts +const prisma = new PrismaClient() + +prisma.$use(async (params, next) => { + console.log('This is middleware!') + return next(params) +}) + +const xPrisma = prisma.$extends({ + name: 'myExtension', + model: { + user: { + async signUp(email: string) { + await prisma.user.create({ data: { email } }) + }, + }, + }, +}) +``` + +To learn more, see our documentation on [`$on`](/orm/reference/prisma-client-reference#on) and [`$use`](/orm/reference/prisma-client-reference#use) + +### Usage of client-level methods in extended clients + +[Client-level methods](/orm/reference/prisma-client-reference#client-methods) do not necessarily exist on extended clients. For these clients you will need to first check for existence before using. + +```ts +const xPrisma = new PrismaClient().$extends(...); + +if (xPrisma.$connect) { + xPrisma.$connect() +} +``` + +### Usage with nested operations + +The `query` extension type does not support nested read and write operations. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/050-prisma-validator.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/050-prisma-validator.mdx new file mode 100644 index 0000000000..47afa0a179 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/050-prisma-validator.mdx @@ -0,0 +1,157 @@ +--- +title: 'Prisma validator' +metaTitle: 'Prisma validator' +metaDescription: 'The Prisma validator is a utility function that takes a generated type and returns a type-safe object which adheres to the generated types model fields.' +--- + + + +The [`Prisma.validator`](/orm/reference/prisma-client-reference#prismavalidator) is a utility function that takes a generated type and returns a type-safe object which adheres to the generated types model fields. + +This page introduces the `Prisma.validator` and offers some motivations behind why you might choose to use it. + + + +> **Note**: If you have a use case for `Prisma.validator`, be sure to check out this [blog post](https://www.prisma.io/blog/satisfies-operator-ur8ys8ccq7zb) about improving your Prisma Client workflows with the new TypeScript `satisfies` keyword. It's likely that you can solve your use case natively using `satisfies` instead of using `Prisma.validator`. + +## Creating a typed query statement + +Let's imagine that you created a new `userEmail` object that you wanted to re-use in different queries throughout your application. It's typed and can be safely used in queries. + +The below example asks `Prisma` to return the `email` of the user whose `id` is 3, if no user exists it will return `null`. + +```ts +import { Prisma } from '@prisma/client' + +const userEmail: Prisma.UserSelect = { + email: true, +} + +// Run inside async function +const user = await prisma.user.findUnique({ + where: { + id: 3, + }, + select: userEmail, +}) +``` + +This works well but there is a caveat to extracting query statements this way. + +You'll notice that if you hover your mouse over `userEmail` TypeScript won't infer the object's key or value (that is, `email: true`). + +The same applies if you use dot notation on `userEmail` within the `prisma.user.findUnique(...)` query, you will be able to access all of the properties available to a `select` object. + +If you are using this in one file that may be fine, but if you are going to export this object and use it in other queries, or if you are compiling an external library where you want to control how the user uses this object within their queries then this won't be type-safe. + +The object `userEmail` has been created to select only the user's `email`, and yet it still gives access to all the other properties available. **It is typed, but not type-safe**. + +`Prisma` has a way to validate generated types to make sure they are type-safe, a utility function available on the namespace called `validator`. + +## Using the `Prisma.validator` + +The following example passes the `UserSelect` generated type into the `Prisma.validator` utility function and defines the expected return type in much the same way as the previous example. + +```ts highlight=3,4,5;delete|7-9;add +import { Prisma } from '@prisma/client' + +//delete-start +const userEmail: Prisma.UserSelect = { + email: true, +} +//delete-end + +//add-start +const userEmail = Prisma.validator()({ + email: true, +}) +//add-end + +// Run inside async function +const user = await prisma.user.findUnique({ + where: { + id: 3, + }, + select: userEmail, +}) +``` + +Alternatively, you can use the following syntax that uses a "selector" pattern using an existing instance of Prisma Client: + +```ts +import { Prisma } from '@prisma/client' +import prisma from './lib/prisma' + +const userEmail = Prisma.validator( + prisma, + 'user', + 'findUnique', + 'select' +)({ + email: true, +}) +``` + +The big difference is that the `userEmail` object is now type-safe. If you hover your mouse over it TypeScript will tell you the object's key/value pair. If you use dot notation to access the object's properties you will only be able to access the `email` property of the object. + +This functionality is handy when combined with user defined input, like form data. + +## Combining `Prisma.validator` with form input + +The following example creates a type-safe function from the `Prisma.validator` which can be used when interacting with user created data, such as form inputs. + +> **Note**: Form input is determined at runtime so can't be verified by only using TypeScript. Be sure to validate your form input through other means too (such as an external validation library) before passing that data through to your database. + +```ts +import { Prisma, PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +// Create a new function and pass the parameters onto the validator +const createUserAndPost = ( + name: string, + email: string, + postTitle: string, + profileBio: string +) => { + return Prisma.validator()({ + name, + email, + posts: { + create: { + title: postTitle, + }, + }, + profile: { + create: { + bio: profileBio, + }, + }, + }) +} + +const findSpecificUser = (email: string) => { + return Prisma.validator()({ + email, + }) +} + +// Create the user in the database based on form input +// Run inside async function +await prisma.user.create({ + data: createUserAndPost( + 'Rich', + 'rich@boop.com', + 'Life of Pie', + 'Learning each day' + ), +}) + +// Find the specific user based on form input +// Run inside async function +const oneUser = await prisma.user.findUnique({ + where: findSpecificUser('rich@boop.com'), +}) +``` + +The `createUserAndPost` custom function is created using the `Prisma.validator` and passed a generated type, `UserCreateInput`. The `Prisma.validator` validates the functions input because the types assigned to the parameters must match those the generated type expects. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/100-operating-against-partial-structures-of-model-types.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/100-operating-against-partial-structures-of-model-types.mdx new file mode 100644 index 0000000000..bf4791adf2 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/100-operating-against-partial-structures-of-model-types.mdx @@ -0,0 +1,137 @@ +--- +title: 'Operating against partial structures of your model types' +metaTitle: 'Operating against partial structures of your model types' +metaDescription: 'This page documents various scenarios for using the generated types from the Prisma namespace' +--- + + + +When using Prisma Client, every model from your [Prisma schema](/orm/prisma-schema) is translated into a dedicated TypeScript type. For example, assume you have the following `User` and `Post` models: + +```prisma +model User { + id Int @id + email String @unique + name String? + posts Post[] +} + +model Post { + id Int @id + author User @relation(fields: [userId], references: [id]) + title String + published Boolean @default(false) + userId Int +} +``` + +The Prisma Client code that's generated from this schema contains this representation of the `User` type: + +```ts +export declare type User = { + id: string + email: string + name: string | null +} +``` + + + +## Problem: Using variations of the generated model type + +### Description + +In some scenarios, you may need a _variation_ of the generated `User` type. For example, when you have a function that expects an instance of the `User` model that carries the `posts` relation. Or when you need a type to pass only the `User` model's `email` and `name` fields around in your application code. + +### Solution + +As a solution, you can customize the generated model type using Prisma Client's helper types. + +The `User` type only contains the model's [scalar](/orm/prisma-schema/data-model/models#scalar-fields) fields, but doesn't account for any relations. That's because [relations are not included by default](/orm/prisma-client/queries/select-fields#return-the-default-fields) in Prisma Client queries. + +However, sometimes it's useful to have a type available that **includes a relation** (i.e. a type that you'd get from an API call that uses [`include`](/orm/prisma-client/queries/select-fields#return-nested-objects-by-selecting-relation-fields)). Similarly, another useful scenario could be to have a type available that **includes only a subset of the model's scalar fields** (i.e. a type that you'd get from an API call that uses [`select`](/orm/prisma-client/queries/select-fields#select-specific-fields)). + +One way of achieving this would be to define these types manually in your application code: + +```ts +// 1: Define a type that includes the relation to `Post` +type UserWithPosts = { + id: string + email: string + name: string | null + posts: Post[] +} + +// 2: Define a type that only contains a subset of the scalar fields +type UserPersonalData = { + email: string + name: string | null +} +``` + +While this is certainly feasible, this approach increases the maintenance burden upon changes to the Prisma schema as you need to manually maintain the types. A cleaner solution to this is to use the `UserGetPayload` type that is generated and exposed by Prisma Client under the `Prisma` namespace in combination with the [`validator`](/orm/prisma-client/type-safety/prisma-validator). + +The following example uses the `Prisma.validator` to create two type-safe objects and then uses the `Prisma.UserGetPayload` utility function to create a type that can be used to return all users and their posts. + +```ts +import { Prisma } from '@prisma/client' + +// 1: Define a type that includes the relation to `Post` +const userWithPosts = Prisma.validator()({ + include: { posts: true }, +}) + +// 2: Define a type that only contains a subset of the scalar fields +const userPersonalData = Prisma.validator()({ + select: { email: true, name: true }, +}) + +// 3: This type will include a user and all their posts +type UserWithPosts = Prisma.UserGetPayload +``` + +The main benefits of the latter approach are: + +- Cleaner approach as it leverages Prisma Client's generated types +- Reduced maintenance burden and improved type safety when the schema changes + +## Problem: Getting access to the return type of a function + +### Description + +When doing [`select`](/orm/reference/prisma-client-reference#select) or [`include`](/orm/reference/prisma-client-reference#include) operations on your models and returning these variants from a function, it can be difficult to gain access to the return type, e.g: + +```ts +// Function definition that returns a partial structure +async function getUsersWithPosts() { + const users = await prisma.user.findMany({ include: { posts: true } }) + return users +} +``` + +Extracting the type that represents "users with posts" from the above code snippet requires some advanced TypeScript usage: + +```ts +// Function definition that returns a partial structure +async function getUsersWithPosts() { + const users = await prisma.user.findMany({ include: { posts: true } }) + return users +} + +// Extract `UsersWithPosts` type with +type ThenArg = T extends PromiseLike ? U : T +type UsersWithPosts = ThenArg> + +// run inside `async` function +const usersWithPosts: UsersWithPosts = await getUsersWithPosts() +``` + +### Solution + +With the `PromiseReturnType` that is exposed by the `Prisma` namespace, you can solve this more elegantly: + +```ts +import { Prisma } from '@prisma/client' + +type UsersWithPosts = Prisma.PromiseReturnType +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/830-prisma-type-system.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/830-prisma-type-system.mdx new file mode 100644 index 0000000000..17a6241106 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/830-prisma-type-system.mdx @@ -0,0 +1,165 @@ +--- +title: How to use Prisma ORM's type system +metaDescription: How to use Prisma ORM's type system +tocDepth: 3 +--- + + + +This guide introduces Prisma ORM's type system and explains how to introspect existing native types in your database, and how to use types when you apply schema changes to your database with Prisma Migrate or `db push`. + + + +## How does Prisma ORM's type system work? + +Prisma ORM uses _types_ to define the kind of data that a field can hold. To make it easy to get started, Prisma ORM provides a small number of core [scalar types](/orm/reference/prisma-schema-reference#model-field-scalar-types) that should cover most default use cases. For example, take the following blog post model: + +```prisma file=schema.prisma showLineNumbers +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model Post { + id Int @id + title String + createdAt DateTime +} +``` + +The `title` field of the `Post` model uses the `String` scalar type, while the `createdAt` field uses the `DateTime` scalar type. + +Databases also have their own type system, which defines the type of value that a column can hold. Most databases provide a large number of data types to allow fine-grained control over exactly what a column can store. For example, a database might provide inbuilt support for multiple sizes of integers, or for XML data. The names of these types vary between databases. For example, in PostgreSQL the column type for booleans is `boolean`, whereas in MySQL the `tinyint(1)` type is typically used. + +In the blog post example above, we are using the PostgreSQL connector. This is specified in the `datasource` block of the Prisma schema. + +### Default type mappings + +To allow you to get started with our core scalar types, Prisma ORM provides _default type mappings_ that map each scalar type to a default type in the underlying database. For example: + +- by default Prisma ORM's `String` type gets mapped to PostgreSQL's `text` type and MySQL's `varchar` type +- by default Prisma ORM's `DateTime` type gets mapped to PostgreSQL's `timestamp(3)` type and SQL Server's `datetime2` type + +See Prisma ORM's [database connector pages](/orm/overview/databases) for the default type mappings for a given database. For example, [this table](/orm/overview/databases/postgresql#type-mapping-between-postgresql-and-prisma-schema) gives the default type mappings for PostgreSQL. +To see the default type mappings for all databases for a specific given Prisma ORM type, see the [model field scalar types section](/orm/reference/prisma-schema-reference#model-field-scalar-types) of the Prisma schema reference. For example, [this table](/orm/reference/prisma-schema-reference#float) gives the default type mappings for the `Float` scalar type. + +### Native type mappings + +Sometimes you may need to use a more specific database type that is not one of the default type mappings for your Prisma ORM type. For this purpose, Prisma ORM provides [native type attributes](/orm/prisma-schema/data-model/models#native-types-mapping) to refine the core scalar types. For example, in the `createdAt` field of your `Post` model above you may want to use a date-only column in your underlying PostgreSQL database, by using the `date` type instead of the default type mapping of `timestamp(3)`. To do this, add a `@db.Date` native type attribute to the `createdAt` field: + +```prisma file=schema.prisma showLineNumbers +model Post { + id Int @id + title String + createdAt DateTime @db.Date +} +``` + +Native type mappings allow you to express all the types in your database. However, you do not need to use them if the Prisma ORM defaults satisfy your needs. This leads to a shorter, more readable Prisma schema for common use cases. + +## How to introspect database types + +When you [introspect](/orm/prisma-schema/introspection) an existing database, Prisma ORM will take the database type of each table column and represent it in your Prisma schema using the correct Prisma ORM type for the corresponding model field. If the database type is not the default database type for that Prisma ORM scalar type, Prisma ORM will also add a native type attribute. + +As an example, take a `User` table in a PostgreSQL database, with: + +- an `id` column with a data type of `serial` +- a `name` column with a data type of `text` +- an `isActive` column with a data type of `boolean` + +You can create this with the following SQL command: + +```sql +CREATE TABLE "public"."User" ( + id serial PRIMARY KEY NOT NULL, + name text NOT NULL, + "isActive" boolean NOT NULL +); +``` + +Introspect your database with the following command run from the root directory of your project: + +```terminal +npx prisma db pull +``` + +You will get the following Prisma schema: + +```prisma file=schema.prisma showLineNumbers +model User { + id Int @id @default(autoincrement()) + name String + isActive Boolean +} +``` + +The `id`, `name` and `isActive` columns in the database are mapped respectively to the `Int`, `String` and `Boolean` Prisma ORM types. The database types are the _default_ database types for these Prisma ORM types, so Prisma ORM does not add any native type attributes. + +Now add a `createdAt` column to your database with a data type of `date` by running the following SQL command: + +```sql +ALTER TABLE "public"."User" +ADD COLUMN "createdAt" date NOT NULL; +``` + +Introspect your database again: + +```terminal +npx prisma db pull +``` + +Your Prisma schema now includes the new `createdAt` field with a Prisma ORM type of `DateTime`. The `createdAt` field also has a `@db.Date` native type attribute, because PostgreSQL's `date` is not the default type for the `DateTime` type: + +```prisma file=schema.prisma highlight=5;add showLineNumbers +model User { + id Int @id @default(autoincrement()) + name String + isActive Boolean + //add-next-line + createdAt DateTime @db.Date +} +``` + +## How to use types when you apply schema changes to your database + +When you apply schema changes to your database using Prisma Migrate or `db push`, Prisma ORM will use both the Prisma ORM scalar type of each field and any native attribute it has to determine the correct database type for the corresponding column in the database. + +As an example, create a Prisma schema with the following `Post` model: + +```prisma file=schema.prisma showLineNumbers +model Post { + id Int @id + title String + createdAt DateTime + updatedAt DateTime @db.Date +} +``` + +This `Post` model has: + +- an `id` field with a Prisma ORM type of `Int` +- a `title` field with a Prisma ORM type of `String` +- a `createdAt` field with a Prisma ORM type of `DateTime` +- an `updatedAt` field with a Prisma ORM type of `DateTime` and a `@db.Date` native type attribute + +Now apply these changes to an empty PostgreSQL database with the following command, run from the root directory of your project: + +```terminal +npx prisma db push +``` + +You will see that the database has a newly created `Post` table, with: + +- an `id` column with a database type of `integer` +- a `title` column with a database type of `text` +- a `createdAt` column with a database type of `timestamp(3)` +- an `updatedAt` column with a database type of `date` + +Notice that the `@db.Date` native type attribute modifies the database type of the `updatedAt` column to `date`, rather than the default of `timestamp(3)`. + +## More on using Prisma ORM's type system + +For further reference information on using Prisma ORM's type system, see the following resources: + +- The [database connector](/orm/overview) page for each database provider has a type mapping section with a table of default type mappings between Prisma ORM types and database types, and a table of database types with their corresponding native type attribute in Prisma ORM. For example, the type mapping section for PostgreSQL is [here](/orm/overview/databases/postgresql#type-mapping-between-postgresql-and-prisma-schema). +- The [model field scalar types](/orm/reference/prisma-schema-reference#model-field-scalar-types) section of the Prisma schema reference has a subsection for each Prisma ORM scalar type. This includes a table of default mappings for that Prisma ORM type in each database, and a table for each database listing the corresponding database types and their native type attributes in Prisma ORM. For example, the entry for the `String` Prisma ORM type is [here](/orm/reference/prisma-schema-reference#string). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/index.mdx new file mode 100644 index 0000000000..dc313c7ddb --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/400-type-safety/index.mdx @@ -0,0 +1,267 @@ +--- +title: 'Type safety' +metaTitle: 'Type safety' +metaDescription: 'Prisma Client provides full type safety for queries, even for partial queries or included relations. This page explains how to leverage the generated types and utilities.' +tocDepth: 3 +--- + + + +The generated code for Prisma Client contains several helpful types and utilities that you can use to make your application more type-safe. This page describes patterns for leveraging them. + +> **Note**: If you're interested in advanced type safety topics with Prisma ORM, be sure to check out this [blog post](https://www.prisma.io/blog/satisfies-operator-ur8ys8ccq7zb) about improving your Prisma Client workflows with the new TypeScript `satisfies` keyword. + + + +## Importing generated types + +You can import the `Prisma` namespace and use dot notation to access types and utilities. The following example shows how to import the `Prisma` namespace and use it to access and use the `Prisma.UserSelect` [generated type](#what-are-generated-types): + +```ts +import { Prisma } from '@prisma/client' + +// Build 'select' object +const userEmail: Prisma.UserSelect = { + email: true, +} + +// Use select object +const createUser = await prisma.user.create({ + data: { + email: 'bob@prisma.io', + }, + select: userEmail, +}) +``` + +See also: [Using the `Prisma.UserCreateInput` generated type](/orm/prisma-client/queries/crud#create-a-single-record-using-generated-types) + +## What are generated types? + +Generated types are TypeScript types that are derived from your models. You can use them to create typed objects that you pass into top-level methods like `prisma.user.create(...)` or `prisma.user.update(...)`, or options such as `select` or `include`. + +For example, `select` accepts an object of type `UserSelect`. Its object properties match those that are supported by `select` statements according to the model. + +The first tab below shows the `UserSelect` generated type and how each property on the object has a type annotation. The second tab shows the resulting schema model. + + + + + +```ts +type Prisma.UserSelect = { + id?: boolean | undefined; + email?: boolean | undefined; + name?: boolean | undefined; + posts?: boolean | Prisma.PostFindManyArgs | undefined; + profile?: boolean | Prisma.ProfileArgs | undefined; +} +``` + + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + + + + + +In TypeScript the concept of [type annotations](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-annotations-on-variables) is when you declare a variable and add a type annotation to describe the type of the variable. See the below example. + +```ts +const myAge: number = 37 +const myName: string = 'Rich' +``` + +Both of these variable declarations have been given a type annotation to specify what primitive type they are, `number` and `string` respectively. Most of the time this kind of annotation is not needed as TypeScript will infer the type of the variable based on how its initialized. In the above example `myAge` was initialized with a number so TypeScript guesses that it should be typed as a number. + +Going back to the `UserSelect` type, if you were to use dot notation on the created object `userEmail`, you would have access to all of the fields on the `User` model that can be interacted with using a `select` statement. + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + profile Profile? +} +``` + +```ts +import { Prisma } from '@prisma/client' + +const userEmail: Prisma.UserSelect = { + email: true, +} + +// properties available on the typed object +userEmail.id +userEmail.email +userEmail.name +userEmail.posts +userEmail.profile +``` + +In the same mould, you can type an object with an `include` generated type then your object would have access to those properties on which you can use an `include` statement. + +```ts +import { Prisma } from '@prisma/client' + +const userPosts: Prisma.UserInclude = { + posts: true, +} + +// properties available on the typed object +userPosts.posts +userPosts.profile +``` + +> See the [model query options](/orm/reference/prisma-client-reference#model-query-options) reference for more information about the different types available. + +### Generated `UncheckedInput` types + +The `UncheckedInput` types are a special set of generated types that allow you to perform some operations that Prisma Client considers "unsafe", like directly writing [relation scalar fields](/orm/prisma-schema/data-model/relations). You can choose either the "safe" `Input` types or the "unsafe" `UncheckedInput` type when doing operations like `create`, `update`, or `upsert`. + +For example, this Prisma schema has a one-to-many relation between `User` and `Post`: + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + content String? + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +The first tab shows the `PostUncheckedCreateInput` generated type. It contains the `authorId` property, which is a relation scalar field. The second tab shows an example query that uses the `PostUncheckedCreateInput` type. This query will result in an error if a user with an `id` of `1` does not exist. + + + + + +```ts +type PostUncheckedCreateInput = { + id?: number + title: string + content?: string | null + authorId: number +} +``` + + + + +```ts +prisma.post.create({ + data: { + title: 'First post', + content: 'Welcome to the first post in my blog...', + authorId: 1, + }, +}) +``` + + + + + +The same query can be rewritten using the "safer" `PostCreateInput` type. This type does not contain the `authorId` field but instead contains the `author` relation field. + + + + + +```ts +type PostCreateInput = { + title: string + content?: string | null + author: UserCreateNestedOneWithoutPostsInput +} + +type UserCreateNestedOneWithoutPostsInput = { + create?: XOR< + UserCreateWithoutPostsInput, + UserUncheckedCreateWithoutPostsInput + > + connectOrCreate?: UserCreateOrConnectWithoutPostsInput + connect?: UserWhereUniqueInput +} +``` + + + + +```ts +prisma.post.create({ + data: { + title: 'First post', + content: 'Welcome to the first post in my blog...', + author: { + connect: { + id: 1, + }, + }, + }, +}) +``` + + + + + +This query will also result in an error if an author with an `id` of `1` does not exist. In this case, Prisma Client will give a more descriptive error message. You can also use the [`connectOrCreate`](/orm/reference/prisma-client-reference#connectorcreate) API to safely create a new user if one does not already exist with the given `id`. + +We recommend using the "safe" `Input` types whenever possible. + +## Type utilities + + + +This feature is available from Prisma ORM version 4.9.0 upwards. + + + +To help you create highly type-safe applications, Prisma Client provides a set of type utilities that tap into input and output types. These types are fully dynamic, which means that they adapt to any given model and schema. You can use them to improve the auto-completion and developer experience of your projects. + +This is especially useful in [validating inputs](/orm/prisma-client/type-safety/prisma-validator) and [shared Prisma Client extensions](/orm/prisma-client/client-extensions/shared-extensions). + +The following type utilities are available in Prisma Client: + +- `Exact`: Enforces strict type safety on `Input`. `Exact` makes sure that a generic type `Input` strictly complies with the type that you specify in `Shape`. It [narrows](https://www.typescriptlang.org/docs/handbook/2/narrowing.html) `Input` down to the most precise types. +- `Args`: Retrieves the input arguments for any given model and operation. This is particularly useful for extension authors who want to do the following: + - Re-use existing types to extend or modify them. + - Benefit from the same auto-completion experience as on existing operations. +- `Result`: Takes the input arguments and provides the result for a given model and operation. You would usually use this in conjunction with `Args`. As with `Args`, `Result` helps you to re-use existing types to extend or modify them. +- `Payload`: Retrieves the entire structure of the result, as scalars and relations objects for a given model and operation. For example, you can use this to determine which keys are scalars or objects at a type level. + +As an example, here's a quick way you can enforce that the arguments to a function matches what you will pass to a `post.create`: + +```ts +type PostCreateBody = Prisma.Args['data'] + +const addPost = async (postBody: PostCreateBody) => { + const post = await prisma.post.create({ data: postBody }) + return post +} + +await addPost(myData) +// ^ guaranteed to match the input of `post.create` +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/100-unit-testing.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/100-unit-testing.mdx new file mode 100644 index 0000000000..931d78b14c --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/100-unit-testing.mdx @@ -0,0 +1,352 @@ +--- +title: 'Unit testing' +metaTitle: 'Unit testing with Prisma ORM' +metaDescription: 'Learn how to setup and run unit tests with Prisma Client' +tocDepth: 3 +--- + + + +Unit testing aims to isolate a small portion (unit) of code and test it for logically predictable behaviors. It generally involves mocking objects or server responses to simulate real world behaviors. Some benefits to unit testing include: + +- Quickly find and isolate bugs in code. +- Provides documentation for each module of code by way of indicating what certain code blocks should be doing. +- A helpful gauge that a refactor has gone well. The tests should still pass after code has been refactored. + +In the context of Prisma ORM, this generally means testing a function which makes database calls using Prisma Client. + +A single test should focus on how your function logic handles different inputs (such as a null value or an empty list). + +This means that you should aim to remove as many dependencies as possible, such as external services and databases, to keep the tests and their environments as lightweight as possible. + + + +> **Note**: This [blog post](https://www.prisma.io/blog/testing-series-2-xPhjjmIEsM) provides a comprehensive guide to implementing unit testing in your Express project with Prisma ORM. If you're looking to delve into this topic, be sure to give it a read! + +## Prerequisites + +This guide assumes you have the JavaScript testing library [`Jest`](https://jestjs.io/) and [`ts-jest`](https://github.com/kulshekhar/ts-jest) already setup in your project. + +## Mocking Prisma Client + +To ensure your unit tests are isolated from external factors you can mock Prisma Client, this means you get the benefits of being able to use your schema (**_type-safety_**), without having to make actual calls to your database when your tests are run. + +This guide will cover two approaches to mocking Prisma Client, a singleton instance and dependency injection. Both have their merits depending on your use cases. To help with mocking Prisma Client the [`jest-mock-extended`](https://github.com/marchaos/jest-mock-extended) package will be used. + +```terminal +npm install jest-mock-extended@2.0.4 --save-dev +``` + + + +At the time of writing, this guide uses `jest-mock-extended` version `^2.0.4`. + + + +### Singleton + +The following steps guide you through mocking Prisma Client using a singleton pattern. + +1. Create a file at your projects root called `client.ts` and add the following code. This will instantiate a Prisma Client instance. + + ```ts file=client.ts + import { PrismaClient } from '@prisma/client' + + const prisma = new PrismaClient() + export default prisma + ``` + +2. Next create a file named `singleton.ts` at your projects root and add the following: + + ```ts file=singleton.ts + import { PrismaClient } from '@prisma/client' + import { mockDeep, mockReset, DeepMockProxy } from 'jest-mock-extended' + + import prisma from './client' + + jest.mock('./client', () => ({ + __esModule: true, + default: mockDeep(), + })) + + beforeEach(() => { + mockReset(prismaMock) + }) + + export const prismaMock = prisma as unknown as DeepMockProxy + ``` + +The singleton file tells Jest to mock a default export (the Prisma Client instance in `./client.ts`), and uses the `mockDeep` method from `jest-mock-extended` to enable access to the objects and methods available on Prisma Client. It then resets the mocked instance before each test is run. + +Next, add the `setupFilesAfterEnv` property to your `jest.config.js` file with the path to your `singleton.ts` file. + +```js file=jest.config.js highlight=5;add showLineNumbers +module.exports = { + clearMocks: true, + preset: 'ts-jest', + testEnvironment: 'node', + //add-next-line + setupFilesAfterEnv: ['/singleton.ts'], +} +``` + +### Dependency injection + +Another popular pattern that can be used is dependency injection. + +1. Create a `context.ts` file and add the following: + + ```ts file=context.ts + import { PrismaClient } from '@prisma/client' + import { mockDeep, DeepMockProxy } from 'jest-mock-extended' + + export type Context = { + prisma: PrismaClient + } + + export type MockContext = { + prisma: DeepMockProxy + } + + export const createMockContext = (): MockContext => { + return { + prisma: mockDeep(), + } + } + ``` + +:::tip + +If you find that you're seeing a circular dependency error highlighted through mocking Prisma Client, try adding `"strictNullChecks": true` +to your `tsconfig.json`. + +::: + +2. To use the context, you would do the following in your test file: + + ```ts + import { MockContext, Context, createMockContext } from '../context' + + let mockCtx: MockContext + let ctx: Context + + beforeEach(() => { + mockCtx = createMockContext() + ctx = mockCtx as unknown as Context + }) + ``` + +This will create a new context before each test is run via the `createMockContext` function. This (`mockCtx`) context will be used to make a mock call to Prisma Client and run a query to test. The `ctx` context will be used to run a scenario query that is tested against. + +## Example unit tests + +A real world use case for unit testing Prisma ORM might be a signup form. Your user fills in a form which calls a function, which in turn uses Prisma Client to make a call to your database. + +All of the examples that follow use the following schema model: + +```prisma file=schema.prisma showLineNumbers +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + acceptTermsAndConditions Boolean +} +``` + +The following unit tests will mock the process of + +- Creating a new user +- Updating a users name +- Failing to create a user if terms are not accepted + +The functions that use the dependency injection pattern will have the context injected (passed in as a parameter) into them, whereas the functions that use the singleton pattern will use the singleton instance of Prisma Client. + +```ts file=functions-with-context.ts +import { Context } from './context' + +interface CreateUser { + name: string + email: string + acceptTermsAndConditions: boolean +} + +export async function createUser(user: CreateUser, ctx: Context) { + if (user.acceptTermsAndConditions) { + return await ctx.prisma.user.create({ + data: user, + }) + } else { + return new Error('User must accept terms!') + } +} + +interface UpdateUser { + id: number + name: string + email: string +} + +export async function updateUsername(user: UpdateUser, ctx: Context) { + return await ctx.prisma.user.update({ + where: { id: user.id }, + data: user, + }) +} +``` + +```ts file=functions-without-context.ts +import prisma from './client' + +interface CreateUser { + name: string + email: string + acceptTermsAndConditions: boolean +} + +export async function createUser(user: CreateUser) { + if (user.acceptTermsAndConditions) { + return await prisma.user.create({ + data: user, + }) + } else { + return new Error('User must accept terms!') + } +} + +interface UpdateUser { + id: number + name: string + email: string +} + +export async function updateUsername(user: UpdateUser) { + return await prisma.user.update({ + where: { id: user.id }, + data: user, + }) +} +``` + +The tests for each methodology are fairly similar, the difference is how the mocked Prisma Client is used. + +The **_dependency injection_** example passes the context through to the function that is being tested as well as using it to call the mock implementation. + +The **_singleton_** example uses the singleton client instance to call the mock implementation. + +```ts file=__tests__/with-singleton.ts +import { createUser, updateUsername } from '../functions-without-context' +import { prismaMock } from '../singleton' + +test('should create new user ', async () => { + const user = { + id: 1, + name: 'Rich', + email: 'hello@prisma.io', + acceptTermsAndConditions: true, + } + + prismaMock.user.create.mockResolvedValue(user) + + await expect(createUser(user)).resolves.toEqual({ + id: 1, + name: 'Rich', + email: 'hello@prisma.io', + acceptTermsAndConditions: true, + }) +}) + +test('should update a users name ', async () => { + const user = { + id: 1, + name: 'Rich Haines', + email: 'hello@prisma.io', + acceptTermsAndConditions: true, + } + + prismaMock.user.update.mockResolvedValue(user) + + await expect(updateUsername(user)).resolves.toEqual({ + id: 1, + name: 'Rich Haines', + email: 'hello@prisma.io', + acceptTermsAndConditions: true, + }) +}) + +test('should fail if user does not accept terms', async () => { + const user = { + id: 1, + name: 'Rich Haines', + email: 'hello@prisma.io', + acceptTermsAndConditions: false, + } + + prismaMock.user.create.mockImplementation() + + await expect(createUser(user)).resolves.toEqual( + new Error('User must accept terms!') + ) +}) +``` + +```ts file=__tests__/with-dependency-injection.ts +import { MockContext, Context, createMockContext } from '../context' +import { createUser, updateUsername } from '../functions-with-context' + +let mockCtx: MockContext +let ctx: Context + +beforeEach(() => { + mockCtx = createMockContext() + ctx = mockCtx as unknown as Context +}) + +test('should create new user ', async () => { + const user = { + id: 1, + name: 'Rich', + email: 'hello@prisma.io', + acceptTermsAndConditions: true, + } + mockCtx.prisma.user.create.mockResolvedValue(user) + + await expect(createUser(user, ctx)).resolves.toEqual({ + id: 1, + name: 'Rich', + email: 'hello@prisma.io', + acceptTermsAndConditions: true, + }) +}) + +test('should update a users name ', async () => { + const user = { + id: 1, + name: 'Rich Haines', + email: 'hello@prisma.io', + acceptTermsAndConditions: true, + } + mockCtx.prisma.user.update.mockResolvedValue(user) + + await expect(updateUsername(user, ctx)).resolves.toEqual({ + id: 1, + name: 'Rich Haines', + email: 'hello@prisma.io', + acceptTermsAndConditions: true, + }) +}) + +test('should fail if user does not accept terms', async () => { + const user = { + id: 1, + name: 'Rich Haines', + email: 'hello@prisma.io', + acceptTermsAndConditions: false, + } + + mockCtx.prisma.user.create.mockImplementation() + + await expect(createUser(user, ctx)).resolves.toEqual( + new Error('User must accept terms!') + ) +}) +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/150-integration-testing.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/150-integration-testing.mdx new file mode 100644 index 0000000000..b09b6e2713 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/150-integration-testing.mdx @@ -0,0 +1,481 @@ +--- +title: 'Integration testing' +metaTitle: 'Integration testing with Prisma' +metaDescription: 'Learn how to setup and run integration tests with Prisma and Docker' +tocDepth: 3 +--- + + + +Integration tests focus on testing how separate parts of the program work together. In the context of applications using a database, integration tests usually require a database to be available and contain data that is convenient to the scenarios intended to be tested. + +One way to simulate a real world environment is to use [Docker](https://www.docker.com/get-started/) to encapsulate a database and some test data. This can be spun up and torn down with the tests and so operate as an isolated environment away from your production databases. + + + +> **Note:** This [blog post](https://www.prisma.io/blog/testing-series-2-xPhjjmIEsM) offers a comprehensive guide on setting up an integration testing environment and writing integration tests against a real database, providing valuable insights for those looking to explore this topic. + +## Prerequisites + +This guide assumes you have [Docker](https://docs.docker.com/get-started/get-docker/) and [Docker Compose](https://docs.docker.com/compose/install/) installed on your machine as well as `Jest` setup in your project. + +The following ecommerce schema will be used throughout the guide. This varies from the traditional `User` and `Post` models used in other parts of the docs, mainly because it is unlikely you will be running integration tests against your blog. + +
+ +Ecommerce schema + +```prisma file=schema.prisma showLineNumbers +// Can have 1 customer +// Can have many order details +model CustomerOrder { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + customer Customer @relation(fields: [customerId], references: [id]) + customerId Int + orderDetails OrderDetails[] +} + +// Can have 1 order +// Can have many products +model OrderDetails { + id Int @id @default(autoincrement()) + products Product @relation(fields: [productId], references: [id]) + productId Int + order CustomerOrder @relation(fields: [orderId], references: [id]) + orderId Int + total Decimal + quantity Int +} + +// Can have many order details +// Can have 1 category +model Product { + id Int @id @default(autoincrement()) + name String + description String + price Decimal + sku Int + orderDetails OrderDetails[] + category Category @relation(fields: [categoryId], references: [id]) + categoryId Int +} + +// Can have many products +model Category { + id Int @id @default(autoincrement()) + name String + products Product[] +} + +// Can have many orders +model Customer { + id Int @id @default(autoincrement()) + email String @unique + address String? + name String? + orders CustomerOrder[] +} +``` + +
+ +The guide uses a singleton pattern for Prisma Client setup. Refer to the [singleton](/orm/prisma-client/testing/unit-testing#singleton) docs for a walk through of how to set that up. + +## Add Docker to your project + +![Docker compose code pointing towards image of container holding a Postgres database](./Docker_Diagram_V1.png) + +With Docker and Docker compose both installed on your machine you can use them in your project. + +1. Begin by creating a `docker-compose.yml` file at your projects root. Here you will add a Postgres image and specify the environments credentials. + +```yml file=docker-compose.yml +# Set the version of docker compose to use +version: '3.9' + +# The containers that compose the project +services: + db: + image: postgres:13 + restart: always + container_name: integration-tests-prisma + ports: + - '5433:5432' + environment: + POSTGRES_USER: prisma + POSTGRES_PASSWORD: prisma + POSTGRES_DB: tests +``` + +> **Note**: The compose version used here (`3.9`) is the latest at the time of writing, if you are following along be sure to use the same version for consistency. + +The `docker-compose.yml` file defines the following: + +- The Postgres image (`postgres`) and version tag (`:13`). This will be downloaded if you do not have it locally available. +- The port `5433` is mapped to the internal (Postgres default) port `5432`. This will be the port number the database is exposed on externally. +- The database user credentials are set and the database given a name. + +2. To connect to the database in the container, create a new connection string with the credentials defined in the `docker-compose.yml` file. For example: + +```env file=.env.test +DATABASE_URL="postgresql://prisma:prisma@localhost:5433/tests" +``` + + + +The above `.env.test` file is used as part of a multiple `.env` file setup. Checkout the [using multiple .env files.](/orm/more/development-environment/environment-variables/using-multiple-env-files) section to learn more about setting up your project with multiple `.env` files + + + +3. To create the container in a detached state so that you can continue to use the terminal tab, run the following command: + +```terminal +docker compose up -d +``` + +4. Next you can check that the database has been created by executing a `psql` command inside the container. Make a note of the container id. + + + + + + ``` + docker ps + ``` + + + + + + ```code no-copy + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + 1322e42d833f postgres:13 "docker-entrypoint.s…" 2 seconds ago Up 1 second 0.0.0.0:5433->5432/tcp integration-tests-prisma + ``` + + + + + +> **Note**: The container id is unique to each container, you will see a different id displayed. + +5. Using the container id from the previous step, run `psql` in the container, login with the created user and check the database is created: + + + + + + ``` + docker exec -it 1322e42d833f psql -U prisma tests + ``` + + + + + + ```code no-copy + tests=# \l + List of databases + Name | Owner | Encoding | Collate | Ctype | Access privileges + + postgres | prisma | UTF8 | en_US.utf8 | en_US.utf8 | + template0 | prisma | UTF8 | en_US.utf8 | en_US.utf8 | =c/prisma + + | | | | | prisma=CTc/prisma + template1 | prisma | UTF8 | en_US.utf8 | en_US.utf8 | =c/prisma + + | | | | | prisma=CTc/prisma + tests | prisma | UTF8 | en_US.utf8 | en_US.utf8 | + (4 rows) + ``` + + + + + +## Integration testing + +Integration tests will be run against a database in a **dedicated test environment** instead of the production or development environments. + +### The flow of operations + +The flow for running said tests goes as follows: + +1. Start the container and create the database +1. Migrate the schema +1. Run the tests +1. Destroy the container + +Each test suite will seed the database before all the test are run. After all the tests in the suite have finished, the data from all the tables will be dropped and the connection terminated. + +### The function to test + +The ecommerce application you are testing has a function which creates an order. This function does the following: + +- Accepts input about the customer making the order +- Accepts input about the product being ordered +- Checks if the customer has an existing account +- Checks if the product is in stock +- Returns an "Out of stock" message if the product doesn't exist +- Creates an account if the customer doesn't exist in the database +- Create the order + +An example of how such a function might look can be seen below: + +```ts file=create-order.ts +import prisma from '../client' + +export interface Customer { + id?: number + name?: string + email: string + address?: string +} + +export interface OrderInput { + customer: Customer + productId: number + quantity: number +} + +/** + * Creates an order with customer. + * @param input The order parameters + */ +export async function createOrder(input: OrderInput) { + const { productId, quantity, customer } = input + const { name, email, address } = customer + + // Get the product + const product = await prisma.product.findUnique({ + where: { + id: productId, + }, + }) + + // If the product is null its out of stock, return error. + if (!product) return new Error('Out of stock') + + // If the customer is new then create the record, otherwise connect via their unique email + await prisma.customerOrder.create({ + data: { + customer: { + connectOrCreate: { + create: { + name, + email, + address, + }, + where: { + email, + }, + }, + }, + orderDetails: { + create: { + total: product.price, + quantity, + products: { + connect: { + id: product.id, + }, + }, + }, + }, + }, + }) +} +``` + +### The test suite + +The following tests will check if the `createOrder` function works as it should do. They will test: + +- Creating a new order with a new customer +- Creating an order with an existing customer +- Show an "Out of stock" error message if a product doesn't exist + +Before the test suite is run the database is seeded with data. After the test suite has finished a [`deleteMany`](/orm/reference/prisma-client-reference#deletemany) is used to clear the database of its data. + +:::tip + +Using `deleteMany` may suffice in situations where you know ahead of time how your schema is structured. This is because the operations need to be executed in the correct order according to how the model relations are setup. + +However, this doesn't scale as well as having a more generic solution that maps over your models and performs a truncate on them. For those scenarios and examples of using raw SQL queries see [Deleting all data with raw SQL / `TRUNCATE`](/orm/prisma-client/queries/crud#deleting-all-data-with-raw-sql--truncate) + +::: + +```ts file=__tests__/create-order.ts +import prisma from '../src/client' +import { createOrder, Customer, OrderInput } from '../src/functions/index' + +beforeAll(async () => { + // create product categories + await prisma.category.createMany({ + data: [{ name: 'Wand' }, { name: 'Broomstick' }], + }) + + console.log('✨ 2 categories successfully created!') + + // create products + await prisma.product.createMany({ + data: [ + { + name: 'Holly, 11", phoenix feather', + description: 'Harry Potters wand', + price: 100, + sku: 1, + categoryId: 1, + }, + { + name: 'Nimbus 2000', + description: 'Harry Potters broom', + price: 500, + sku: 2, + categoryId: 2, + }, + ], + }) + + console.log('✨ 2 products successfully created!') + + // create the customer + await prisma.customer.create({ + data: { + name: 'Harry Potter', + email: 'harry@hogwarts.io', + address: '4 Privet Drive', + }, + }) + + console.log('✨ 1 customer successfully created!') +}) + +afterAll(async () => { + const deleteOrderDetails = prisma.orderDetails.deleteMany() + const deleteProduct = prisma.product.deleteMany() + const deleteCategory = prisma.category.deleteMany() + const deleteCustomerOrder = prisma.customerOrder.deleteMany() + const deleteCustomer = prisma.customer.deleteMany() + + await prisma.$transaction([ + deleteOrderDetails, + deleteProduct, + deleteCategory, + deleteCustomerOrder, + deleteCustomer, + ]) + + await prisma.$disconnect() +}) + +it('should create 1 new customer with 1 order', async () => { + // The new customers details + const customer: Customer = { + id: 2, + name: 'Hermione Granger', + email: 'hermione@hogwarts.io', + address: '2 Hampstead Heath', + } + // The new orders details + const order: OrderInput = { + customer, + productId: 1, + quantity: 1, + } + + // Create the order and customer + await createOrder(order) + + // Check if the new customer was created by filtering on unique email field + const newCustomer = await prisma.customer.findUnique({ + where: { + email: customer.email, + }, + }) + + // Check if the new order was created by filtering on unique email field of the customer + const newOrder = await prisma.customerOrder.findFirst({ + where: { + customer: { + email: customer.email, + }, + }, + }) + + // Expect the new customer to have been created and match the input + expect(newCustomer).toEqual(customer) + // Expect the new order to have been created and contain the new customer + expect(newOrder).toHaveProperty('customerId', 2) +}) + +it('should create 1 order with an existing customer', async () => { + // The existing customers email + const customer: Customer = { + email: 'harry@hogwarts.io', + } + // The new orders details + const order: OrderInput = { + customer, + productId: 1, + quantity: 1, + } + + // Create the order and connect the existing customer + await createOrder(order) + + // Check if the new order was created by filtering on unique email field of the customer + const newOrder = await prisma.customerOrder.findFirst({ + where: { + customer: { + email: customer.email, + }, + }, + }) + + // Expect the new order to have been created and contain the existing customer with an id of 1 (Harry Potter from the seed script) + expect(newOrder).toHaveProperty('customerId', 1) +}) + +it("should show 'Out of stock' message if productId doesn't exit", async () => { + // The existing customers email + const customer: Customer = { + email: 'harry@hogwarts.io', + } + // The new orders details + const order: OrderInput = { + customer, + productId: 3, + quantity: 1, + } + + // The productId supplied doesn't exit so the function should return an "Out of stock" message + await expect(createOrder(order)).resolves.toEqual(new Error('Out of stock')) +}) +``` + +## Running the tests + +This setup isolates a real world scenario so that you can test your applications functionality against real data in a controlled environment. + +You can add some scripts to your projects `package.json` file which will setup the database and run the tests, then afterwards manually destroy the container. + +:::warning + +If the test doesn't work for you, you'll need to ensure the test database is properly set up and ready, as explained in this [blog](https://www.prisma.io/blog/testing-series-3-aBUyF8nxAn#make-the-script-wait-until-the-database-server-is-ready). + +::: + +```json file=package.json + "scripts": { + "docker:up": "docker compose up -d", + "docker:down": "docker compose down", + "test": "yarn docker:up && yarn prisma migrate deploy && jest -i" + }, +``` + +The `test` script does the following: + +1. Runs `docker compose up -d` to create the container with the Postgres image and database. +1. Applies the migrations found in `./prisma/migrations/` directory to the database, this creates the tables in the container's database. +1. Executes the tests. + +Once you are satisfied you can run `yarn docker:down` to destroy the container, its database and any test data. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/Docker_Diagram_V1.png b/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/Docker_Diagram_V1.png new file mode 100644 index 0000000000000000000000000000000000000000..e2bc67509dd06780502c6d139fec8464288b2877 GIT binary patch literal 28507 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�Z_KW+?8O-CkF z>&HB7vlsY~B6`8n-)aAKXDE~G!k$x#M^xhbA<8HAx}$a}rq5FZJSnz*z1G4MRjM$q z!V2~>t?9lk<=!#PxIm42uqukXN z8|jMDj7}mV9C0uVJFG~G<}f`7J00BsAq2Lc#%s4SK?x&ald_do#dkG*#;6D&9-$tc zeE1G=<=G85W-k<&5&N6aBa5e#D|FXAqa@D{`mXwNxc>W33>lJUCxIv&c{**=YH+`X{5X&Wi)g~D@hN_UotoO2N6mIZz z1Y0Y01BHIUoZ&V9E9n-O3K8?8cVSB^K4%+-JLMkC-0&lBu-wyxi`nbFWqH)=YBAfz z;nmBg5DQ!>(vTXZJPs=h_rpR6J=+DoekFo?55T1*;I=ypG4a)8(v)0SB1O=_;l2X^ z(#H1`E=IB6sJ6CrqUsEPz>q=xnZkP`hOK#E_de+yKxHQ#TSF5ry}$O@(c^qTJq2Pm%f`k8ZbHO)e)+! z1js%zI_|fB@aRDQPkJ56k4A=JkpvWZ*UQ9^-JQSU{zu{sQ_O82xwkkC0m7Sd);q+k zy1&$7%&E<^B-uQ#JP2Ss)=cNX!Z%*GCJjwNHmx-`DJoI49TNyZHl#Y0--ij8!$q*u3#V_Z}zQOsH^*`oRL zL?s}q8Spkuy$!=f+H`z;nS*P)5;~Oh9qNw?00f80j;-~^?VnB{9Ye;1acRrfPBS?i z2-#u);69Ff&&g6+>!ADyZI{B)rRwfdySFiOG+GbdU~cGQ(%8#mubsKMG{5%I>h7CU zVfT+oaYMw7Oa6d-I=C#9lf2WrOrh;?CC^oZPkq2GE`WY<0nOP4uv4%6wQv%R54I{L zvz_E<>LecHoA-&WxXX5tHd?FJ6DzMJ`*^xMQz%v&8hwbb4~#e5QzZYMZXYWhci>XV zGM;3bfgWuJEK6Fe_VpiBvdVE8m=iMsB;_P1iqd!;`p9q&O)W~(0!b)W%Re_9+7k&)>m@mn=Pit?9dHcgZS zug6H5-|^*SsXp-!T|)*j4D-5-+|LUWN#wC08k=FA*Q5aMy~pqkZ^=QMiTk9$l?B`q ziXe}?=pf+m_TEd@s4S$to_Z)X+3`WyWl+qB{==6PnE)(qHVC19h_;C*bSpZdw&m*x zOy+rh)>Vcsu^r1}w@QNswNG|3RD=&0T?zGtcZsnnFsyS^&vINOJ_?eg6w?O~?nrb~_|g!v(F&GL5^(j})9mrdi<>?{|K9{8)?W`X3L80|kg_{$E?&E+5aP@r6c3k&0fo zr~Z?R@Q|eO$vxKH#lmC2n+I=Sd;abH)6G)#lU)rgKezWswn2n4V}UtWibh?+NC{o2 zRD?WUrNCKyj>8c-C*%gPfO5 zgswa(9^x!Zkf*vTZ-p{Mz3uJElcq5{n<^dZ3#~#AZV#(Om0c~83N=2X7@5g8V24|J zTV~7bBhd35>fr}@x3$46yx9d`9)3*W_wyvktMEwO?Uh4;UJ%(mOi^{O+gz8xBaGh~ zEieC_tc)v2{3r9JV^8if3&ZZPmYRCANHx=!8^ldG-%(2*zqss=D;l?qTSvt7ta$tM zHX#sQL%l6J+OX)X5vIPR3FnhDYTavwl)fXV7oLIo46`M)f0ppktU{{3j(wC`cZC8B zELcH#o-Q^5T7L_mcwJTcOcM1TyNiAzC$$TTaxYZYrmSVwp*|a~zq@$%g|24&^@~FW z*DFf!m`rFD)MaF5wb2QU$ksQxZrYH(N1U04dhF&Ox?V`I4LO>F4v5F+@wYs;ic|IcP?Rua zwzOt(X#EW!C)}X}5|Mb|yTbf^jp8-D>80gTQRZf_EPG58y!$xghDqIg#X?2tC(kiS z{f|oE_y}yHP%sN~!j)a!)B`lZGgKar2c?1*EKPxTb0%~eT18MdAx?t8o`D<313V|9 zAK)J2PgIgb?z-IzzCvY?4#bnMFE#Q^+vSF%lY0i@`;-5LrIp;^=+18_@hOPMV-_K9&&Kth&G1fEF)n%^{qZ>FCRQ(9KL>d#ApH7Ae~{Z%w5N84@iwleQ| zQ6FL9#xNk=p)5^@!7~X~vV6Q&h*unlcvR5bffskl^+wN4Me^ram34THjI7om9`qZV z#Y~KamyAdf-CWA&O>IcB1?v{XUw+5!ikWQW1@)IJ`(k~KpMGgL*IJI3uoW;6PQ2{F z52M+MP2@-ydz!kbgcCkwySZJbsw@gXDB)Xs(%}3*>I6v4xc*svCw77Ih)4mQEqIaY zYa#NKFkbyOerq8cqf~_B^D=LyIAztt?bWHNPP!ogdi$bz>aWCB z4oh#Frb0^4G&m8-LN!RS8LGgpX%xPxujMy5w2z)nyd1^=<#+TUf8EuYEof(GfK8kx~tm_?yMPFfR2$QhPac0VJFh3 zqSPMlxsDvWA-bHT5lZap5O+oow3`FbOgXDZ*HsF$$QjF3Q{;L#Z@8xkAK!cCqpjWf z1o!(TI-5cu$lqsLUfi|v$P2smuHFq$xL0e@W+eVyCxEB`!7T$?j8VJdpu!pyHXDAtKB^PZ}5bBY2&9dQ`yabPmYaCExIade?{tkCxTuchZd z3U(yZ5JOh;ifVn$%SLsF9U@;J?KXg{y#TR*$!B@lQaAy#<CIpj~5e>~As zK&RzU!za6BKCN3_IbA@dCo?d_X|Kw`k+y4{?{k|nz%MO*%d@R)d-dB@ znStww;%zo-OB*IN`ZaqTodEsM!86Ec&NQQ{S9@Vl836}%6Uq|5d%rP%Q#_|e1NZj? zZ+BV_y-iXXp@b$sp4MG^UqVdGMtM8WYcIB$h^+Wpp*~GsVXA7ym9Bkse{OqgRzY4k znevdYiL{^brx@9!>wqcvzSz0GP~Q!@pQ7NGC=(zr0Z?&YIcnC@&AFf(;R(N2@)&?) zyk&Z(R(&G)GR+`Ou+2S%c0g4xHa(V&2y!mko?8K2tveI;Ejl3a)L*&F(H|=E3asT4 zWSr`G9&ZhC_9UF)lpCoTe$2KZDte7y5kfc9{%#7iuoZh~N;mtmaKmo~2>^ECDYKqk zoEs}m34DL^$Nqc+IbaE18EwpDc!=ZEh{~hAT-`cMae%em${qQ%St>U7Y+v*IS(W|F zNGMtDpbllvWM|zaVpNCalB zmM_1TRtv@ve@x?EMC}fY<#8M53jGe_4JwZ2fNBSd_57{7h@T)^-GXj-xpK^*iTt?W z=<|5K!iN>l3L|XL?}Ss*Zy_ zLx$OJo^(nalBSQ;dm5@HzyO-d+j5Gr%G!pVh0nJUASTJ$6*zcKd3FEbrs5di%yzNbi~&k);yJ zdj&BaW!Y67a{MG7pgA`lwQJSeG zo_%NhxmM;p0~Nfv{S7FrA{zgASy1g47tqA|gEOt=T?NgRoqQ{l*(QFQdSLZ=I)9M! z+@j(GK9S<`fVKq71JBzQGZx&BTWmb(Eg+B+bEIzsBudjnnB)D&bbQYtPY*u8lp&J zqG8g`g?gyJO0~$nrDSZX2qk6vh0gYW)@EDIQ1~JoAvF`w{}V|jQCEsV3DzA0*X;~g z28rx{iQTgE%A)W-2iuAm*v3a2grCNNvCK+_;W)mABC^rUM*Og7+p`()H79{bfm(N6 z^CW*R-bEC@yT=YM$DHWx+1O7B zw9fG~oIS&L?5jPQen?f|V#L$^P@Y<(0O%$x^*O+T8dbOlfBbx*?gXq_;tC1d2;r;1 z7CbY-j!c#8&%kDSC8az#WYGcbXu@GzgXwwM z-1dcg>qrZRUz*RUa-d)xmqTZ*-Mef}mR*pl+&8-qmqwf!r4PT|7Vd+PpNDwPW1X3> zOFcj$JtS5IiEr<^o`Sn*uA7@RfNvH6O`fdOycan!Yr~37-kM0cxGE4%*C(G2BLi~& zMUcB^&6=;*jdfcUt!Qn1C9(W$jZ7WNmJ#!kE9~NKUv@FPu8VeU|{^cTcpE6=!j-Rki7HrQ{ zssKKg`Rp~amqfN7B(lLRe8Zv+BR(7IFUuA9nd5u?cH_1R2qZ{2N_^H#&so?Cq+w+= zCvFWLe7i3YzHv1<8Y?UJs6M$YqiBLtzd)Y1Dalq;FZzugW69Oels^yLNWR)>H^ISl zg8}qwLWt9Mkl*hwz#U*Yuq1N?bslO;y%;l=TaNc6E3T6XlvP1Ut>rIN8nThk{|K6G zN)HgHm_DF-ar`3*V-9l-T=fO8nhcWf;^3fnMARG?>p7Z{dPCk%jAjk!GUrlze?%~k zD>yUS^F%c)w?a^EhdZk!Z6=7Rms)#k%eu|4DPIUo?Yhj zAIGGFEI=UT1K;@1PneE|Y4}Xh_|%Yef72-i>#o;!c5NFAPqC_R%aGi4QR!i4AD?|c zg<#PH<|2s9Tsec)E2nhe0F+ZZ4dqI$Q1>GX+szE96eX}W%W50%!^-pb84HgqHhuC< z1o7K<%P)hj(Nt_Erk+UU=wd4 z|9a`w8fUd}i4U^^T9+Z=2&>c`=9?miAalW=_?*Znw~V?8Nl&Yliio3w`~Hope6eAj z^0HU{axTe?zZVo*Wqqgk9MAP_YfkkmQP85Vz4aQz=7@ddAl2+<%DZWwmX&T@A;Xx# z1{R$il3OC(HDke5v%1APXMH|vU}NTCkhs~1pB#<6?7o@CzQFCpU95Zc=;t-OaI=Mb z#`Y?Xtu>|iDpy>3Nx*roDgLb-v578S!&uRQu~h!x%|^_t{?+vo%E&ORt(B zvOz3!d))y#U@c1E8b0Fid&wY+ew zMdkJ@KVM&nr;)isA%uCFQ5G17{;?V=Aa|QXgy1jpB3(Ip-}go&PpP_9 z&{cG}BzV<+@3 z8@DxG4I8Ccr5nMU6 zm&sP3{&vgwLXDMm2Y*lo8w=I1VT*UKW87yxgzV@)%gzekz88^rr1?hS`Md0VM22=W zI_ne8KOas+V3&$$nUobJews>|cN=VE1+3jnMcnbA)TpEP$>+vEJ;o%z6Yh(tZi^=e z4#+qlwPfQ5(s6>V6l+-ds!^9E2mTDRAF%dc67ar#WNA$m?Z~7#*dnTL z$5;3tY|6O&!Xlsu-jk8tWnOrB3u1}z+p+}noCV2CgXS8c=xMTtJ&M9Z{c1)0_xw+V zmKEXS@HBif{a3Ke5~g;<$^JSfe=q}Z_v2lN6VVd4nQ%He#un^pZ`qC;j{Dd{=^T4| zYN@9}+%eq-qX;JJHk)9D$SryoLO_0s@`5ExQW$DG=ODnWj*gEUW|a@AvNVFPX+@nU zjv8IaxQEqr%HO*y!q{eAShq+SbJ zYAVnjMLhf(a8kMeVdR1BuP@yAevLLcq9dorN3#d$pxL(2y98PSPl70kOSZgquD@=pKlIsm9a3L*tU*=@vk<01?s z@QS5gnOC{v80_EXYh?%w3S4V=cov@?O2hN~fBNx-F|419;)mx zjXJh|PDpD=&s4UscYE}*C81pH2`|gd8;{&DbR&Wu$G(K}(!YbBgkK6w`Yyp3Hk z`g+Hwlc3PK=G)*GPS-f&uef!+lQ3@HtX0MNL-JEtSeW|{X*ZgxVCOXTSRqP2%4GGT zVw^ic^2Ox5xB0g7x@&aagyi3on!!J1Cys~Q8o%X|#xo1bi>t;mdN8hQL~n8SNPeA^ z+2$OO{4P=5tZ=ZG@l)OnK1wIsb=)H<>2~bBGz6%^NvibwA$*J;;87OffrQU5z`vvd z|7z3Y5~#@Np$aO3f3F=?W`V7OtXekNc_mz<9(ZBz9HBV8a+=DpP}E+@FQO7BOi#{5MWBhV?rQQOysxo5`%c=<7{$xzrzAuvROrZ&~fkL>fqoB&rs`-itAtc9cS&}g~svnI!`Pb6^R~^vI(VG9)jWx4BJ5j>tV}+*5hA}?EDk6Of7`JPj z_t}}ApBG6V^B-4I7$}S`^7|p#73bymHTV>(YV4zt#?{=obk=!M$KVWJ3gwT!dQvT?KzF0jy`wS(d98sm2cbg-kgO_ByRAawyBIn1a z$2RUx&i01eb!XmU!|CxF3FC$UxKrX9jqlpu60;7n%hya|ghYg!&pKzAnYR;pm3Wvd zKFCCRP_^NN$%c;hGBt(uijLdYt;5#eeCGq^P>^hx%RF$7UJihx}zsvm+^WCz| zpY_d3z!a^$)MXZMj1fuE!6dKm5R o>!Vxb>;K21|L=VZ3fy3zi_v2}sbb#&rUs%4*ScAF!#d=D02ECpdH?_b literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/index.mdx new file mode 100644 index 0000000000..0a910771a7 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/450-testing/index.mdx @@ -0,0 +1,14 @@ +--- +title: 'Testing' +metaTitle: 'Testing with Prisma ORM' +metaDescription: 'How to implement unit and integration testing with Prisma ORM' +hide_table_of_contents: true +--- + + + +This section describes how to approach testing an application that uses Prisma Client. + + + + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/001-deploy-prisma.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/001-deploy-prisma.mdx new file mode 100644 index 0000000000..f916638eb1 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/001-deploy-prisma.mdx @@ -0,0 +1,40 @@ +--- +title: 'Deploy Prisma ORM' +metaTitle: 'Deploying Prisma ORM-based projects' +metaDescription: 'Learn more about the different deployment paradigms for Node.js applications and how they affect deploying an application using Prisma Client.' +tocDepth: 2 +--- + + + +Projects using Prisma Client can be deployed to many different cloud platforms. Given the variety of cloud platforms and different names, it's noteworthy to mention the different deployment paradigms, as they affect the way you deploy an application using Prisma Client. + + + +## Deployment paradigms + +Each paradigm has different tradeoffs that affect the performance, scalability, and operational costs of your application. + +Moreover, the user traffic pattern of your application is also an important factor to consider. For example, any application with consistent user traffic may be better suited for a [continuously running paradigm](#traditional-servers), whereas an application with sudden spikes may be better suited to [serverless](#serverless-functions). + +### Traditional servers + +Your application is [traditionally deployed](/orm/prisma-client/deployment/traditional) if a Node.js process is continuously running and handles multiple requests at the same time. Your application could be deployed to a Platform-as-a-Service (PaaS) like [Heroku](/orm/prisma-client/deployment/traditional/deploy-to-heroku), [Koyeb](/orm/prisma-client/deployment/traditional/deploy-to-koyeb), or [Render](/orm/prisma-client/deployment/traditional/deploy-to-render); as a Docker container to Kubernetes; or as a Node.js process on a virtual machine or bare metal server. + +See also: [Connection management in long-running processes](/orm/prisma-client/setup-and-configuration/databases-connections#long-running-processes) + +### Serverless Functions + +Your application is [serverless](/orm/prisma-client/deployment/serverless) if the Node.js processes of your application (or subsets of it broken into functions) are started as requests come in, and each function only handles one request at a time. Your application would most likely be deployed to a Function-as-a-Service (FaaS) offering, such as [AWS Lambda](/orm/prisma-client/deployment/serverless/deploy-to-aws-lambda) or [Azure Functions](/orm/prisma-client/deployment/serverless/deploy-to-azure-functions) + +Serverless environments have the concept of warm starts, which means that for subsequent invocations of the same function, it may use an already existing container that has the allocated processes, memory, file system (`/tmp` is writable on AWS Lambda), and even DB connection still available. + +Typically, any piece of code [outside the handler](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) remains initialized. + +See also: [Connection management in serverless environments](/orm/prisma-client/setup-and-configuration/databases-connections#serverless-environments-faas) + +### Edge Functions + +Your application is [edge deployed](/orm/prisma-client/deployment/edge) if your application is [serverless](#serverless-functions) and the functions are distributed across one or more regions close to the user. + +Typically, edge environments also have a different runtime than a traditional or serverless environment, leading to common APIs being unavailable. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/200-deploy-to-heroku.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/200-deploy-to-heroku.mdx new file mode 100644 index 0000000000..246d8cc293 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/200-deploy-to-heroku.mdx @@ -0,0 +1,278 @@ +--- +title: 'Deploy to Heroku' +metaTitle: 'Deploy a Prisma app to Heroku' +metaDescription: 'Learn how to deploy a Node.js server that uses Prisma ORM to Heroku.' +--- + + + +In this guide, you will set up and deploy a Node.js server that uses Prisma ORM with PostgreSQL to [Heroku](https://www.heroku.com). The application exposes a REST API and uses Prisma Client to handle fetching, creating, and deleting records from a database. + +Heroku is a cloud platform as a service (PaaS). In contrast to the popular serverless deployment model, with Heroku, your application is constantly running even if no requests are made to it. This has several benefits due to the connection limits of a PostgreSQL database. For more information, check out the [general deployment documentation](/orm/prisma-client/deployment/deploy-prisma) + +Typically Heroku integrates with a Git repository for automatic deployments upon commits. You can deploy to Heroku from a GitHub repository or by pushing your source to a [Git repository that Heroku creates per app](https://devcenter.heroku.com/articles/git). This guide uses the latter approach whereby you push your code to the app's repository on Heroku, which triggers a build and deploys the application. + +The application has the following components: + +- **Backend**: Node.js REST API built with Express.js with resource endpoints that use Prisma Client to handle database operations against a PostgreSQL database (e.g., hosted on Heroku). +- **Frontend**: Static HTML page to interact with the API. + +![architecture diagram](./images/heroku-architecture.png) + +The focus of this guide is showing how to deploy projects using Prisma ORM to Heroku. The starting point will be the [Prisma Heroku example](https://github.com/prisma/prisma-examples/tree/latest/deployment-platforms/heroku), which contains an Express.js server with a couple of preconfigured REST endpoints and a simple frontend. + +> **Note:** The various **checkpoints** throughout the guide allowing you to validate whether you performed the steps correctly. + + + +## A note on deploying GraphQL servers to Heroku + +While the example uses REST, the same principles apply to a GraphQL server, with the main difference being that you typically have a single GraphQL API endpoint rather than a route for every resource as with REST. + +## Prerequisites + +- [Heroku](https://www.heroku.com) account. +- [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli) installed. +- Node.js installed. +- PostgreSQL CLI `psql` installed. + +> **Note:** Heroku doesn't provide a free plan, so billing information is required. + +## Prisma ORM workflow + +At the core of Prisma ORM is the [Prisma schema](/orm/prisma-schema) – a declarative configuration where you define your data model and other Prisma ORM-related configuration. The Prisma schema is also a single source of truth for both Prisma Client and Prisma Migrate. + +In this guide, you will use [Prisma Migrate](/orm/prisma-migrate) to create the database schema. Prisma Migrate is based on the Prisma schema and works by generating `.sql` migration files that are executed against the database. + +Migrate comes with two primary workflows: + +- Creating migrations and applying during local development with `prisma migrate dev` +- Applying generated migration to production with `prisma migrate deploy` + +For brevity, the guide does not cover how migrations are created with `prisma migrate dev`. Rather, it focuses on the production workflow and uses the Prisma schema and SQL migration that are included in the example code. + +You will use Heroku's [release phase](https://devcenter.heroku.com/articles/release-phase) to run the `prisma migrate deploy` command so that the migrations are applied before the application starts. + +To learn more about how migrations are created with Prisma Migrate, check out the [start from scratch guide](/getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-postgresql) + +## 1. Download the example and install dependencies + +Open your terminal and navigate to a location of your choice. Create the directory that will hold the application code and download the example code: + +```no-lines wrap +mkdir prisma-heroku +cd prisma-heroku +curl https://codeload.github.com/prisma/prisma-examples/tar.gz/latest | tar -xz --strip=3 prisma-examples-latest/deployment-platforms/heroku +``` + +**Checkpoint:** `ls -1` should show: + +```no-lines +ls -1 +Procfile +README.md +package.json +prisma +public +src +``` + +Install the dependencies: + +```no-lines +npm install +``` + +> **Note:** The `Procfile` tells Heroku the command needed to start the application, i.e. `npm start`, and the command to run during the release phase, i.e., `npx prisma migrate deploy` + +## 2. Create a Git repository for the application + +In the previous step, you downloaded the code. In this step, you will create a repository from the code so that you can push it to Heroku for deployment. + +To do so, run `git init` from the source code folder: + +```no-lines +git init +> Initialized empty Git repository in /Users/alice/prisma-heroku/.git/ +``` + +To use the `main` branch as the default branch, run the following command: + +```no-lines +git branch -M main +``` + +With the repository initialized, add and commit the files: + +```no-lines +git add . +git commit -m 'Initial commit' +``` + +**Checkpoint:** `git log -1` should show the commit: + +```no-lines +git log -1 +commit 895534590fdd260acee6396e2e1c0438d1be7fed (HEAD -> main) +``` + +## 3. Heroku CLI login + +Make sure you're logged in to Heroku with the CLI: + +```no-lines +heroku login +``` + +This will allow you to deploy to Heroku from the terminal. + +**Checkpoint:** `heroku auth:whoami` should show your username: + +```no-lines +heroku auth:whoami +> your-email +``` + +## 4. Create a Heroku app + +To deploy an application to Heroku, you need to create an app. You can do so with the following command: + +```no-lines +heroku apps:create your-app-name +``` + +> **Note:** Use a unique name of your choice instead of `your-app-name`. + +**Checkpoint:** You should see the URL and the repository for your Heroku app: + +```no-lines wrap +heroku apps:create your-app-name +> Creating ⬢ your-app-name... done +> https://your-app-name.herokuapp.com/ | https://git.heroku.com/your-app-name.git +``` + +Creating the Heroku app will add the git remote Heroku created to your local repository. Pushing commits to this remote will trigger a deploy. + +**Checkpoint:** `git remote -v` should show the Heroku git remote for your application: + +```no-lines +heroku https://git.heroku.com/your-app-name.git (fetch) +heroku https://git.heroku.com/your-app-name.git (push) +``` + +If you don't see the heroku remote, use the following command to add it: + +```no-lines +heroku git:remote --app your-app-name +``` + +## 5. Add a PostgreSQL database to your application + +Heroku allows your to provision a PostgreSQL database as part of an application. + +Create the database with the following command: + +```no-lines +heroku addons:create heroku-postgresql:hobby-dev +``` + +**Checkpoint:** To verify the database was created you should see the following: + +```no-lines +Creating heroku-postgresql:hobby-dev on ⬢ your-app-name... free +Database has been created and is available + ! This database is empty. If upgrading, you can transfer + ! data from another database with pg:copy +Created postgresql-parallel-73780 as DATABASE_URL +``` + +> **Note:** Heroku automatically sets the `DATABASE_URL` environment variable when the app is running on Heroku. Prisma ORM uses this environment variable because it's declared in the _datasource_ block of the Prisma schema (`prisma/schema.prisma`) with `env("DATABASE_URL")`. + +## 6. Push to deploy + +Deploy the app by pushing the changes to the Heroku app repository: + +```no-lines +git push heroku main +``` + +This will trigger a build and deploy your application to Heroku. Heroku will also run the `npx prisma migrate deploy` command which executes the migrations to create the database schema before deploying the app (as defined in the `release` step of the `Procfile`). + +**Checkpoint:** `git push` will emit the logs from the build and release phase and display the URL of the deployed app: + +```no-lines wrap +remote: -----> Launching... +remote: ! Release command declared: this new release will not be available until the command succeeds. +remote: Released v5 +remote: https://your-app-name.herokuapp.com/ deployed to Heroku +remote: +remote: Verifying deploy... done. +remote: Running release command... +remote: +remote: Prisma schema loaded from prisma/schema.prisma +remote: Datasource "db": PostgreSQL database "your-db-name", schema "public" at "your-db-host.compute-1.amazonaws.com:5432" +remote: +remote: 1 migration found in prisma/migrations +remote: +remote: The following migration have been applied: +remote: +remote: migrations/ +remote: └─ 20210310152103_init/ +remote: └─ migration.sql +remote: +remote: All migrations have been successfully applied. +remote: Waiting for release.... done. +``` + +> **Note:** Heroku will also set the `PORT` environment variable to which your application is bound. + +## 7. Test your deployed application + +You can use the static frontend to interact with the API you deployed via the preview URL. + +Open up the preview URL in your browser, the URL should like this: `https://APP_NAME.herokuapp.com`. You should see the following: + +![deployed-screenshot](./images/heroku-deployed.png) + +The buttons allow you to make requests to the REST API and view the response: + +- **Check API status**: Will call the REST API status endpoint that returns `{"up":true}`. +- **Seed data**: Will seed the database with a test `user` and `post`. Returns the created users. +- **Load feed**: Will load all `users` in the database with their related `profiles`. + +For more insight into Prisma Client's API, look at the route handlers in the `src/index.js` file. + +You can view the application's logs with the `heroku logs --tail` command: + +```no-lines wrap +2020-07-07T14:39:07.396544+00:00 app[web.1]: +2020-07-07T14:39:07.396569+00:00 app[web.1]: > prisma-heroku@1.0.0 start /app +2020-07-07T14:39:07.396569+00:00 app[web.1]: > node src/index.js +2020-07-07T14:39:07.396570+00:00 app[web.1]: +2020-07-07T14:39:07.657505+00:00 app[web.1]: 🚀 Server ready at: http://localhost:12516 +2020-07-07T14:39:07.657526+00:00 app[web.1]: ⭐️ See sample requests: http://pris.ly/e/ts/rest-express#3-using-the-rest-api +2020-07-07T14:39:07.842546+00:00 heroku[web.1]: State changed from starting to up +``` + +## Heroku specific notes + +There are some implementation details relating to Heroku that this guide addresses and are worth reiterating: + +- **Port binding**: web servers bind to a port so that they can accept connections. When deploying to Heroku The `PORT` environment variable is set by Heroku. Ensure you bind to `process.env.PORT` so that your application can accept requests once deployed. A common pattern is to try binding to try `process.env.PORT` and fallback to a preset port as follows: + +```js +const PORT = process.env.PORT || 3000 +const server = app.listen(PORT, () => { + console.log(`app running on port ${PORT}`) +}) +``` + +- **Database URL**: As part of Heroku's provisioning process, a `DATABASE_URL` config var is added to your app’s configuration. This contains the URL your app uses to access the database. Ensure that your `schema.prisma` file uses `env("DATABASE_URL")` so that Prisma Client can successfully connect to the database. + +## Summary + +Congratulations! You have successfully deployed a Node.js app with Prisma ORM to Heroku. + +You can find the source code for the example in [this GitHub repository](https://github.com/prisma/prisma-examples/tree/latest/deployment-platforms/heroku). + +For more insight into Prisma Client's API, look at the route handlers in the `src/index.js` file. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/225-deploy-to-render.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/225-deploy-to-render.mdx new file mode 100644 index 0000000000..6b43e2861c --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/225-deploy-to-render.mdx @@ -0,0 +1,125 @@ +--- +title: 'Deploy to Render' +metaTitle: 'Deploy a Prisma app to Render' +metaDescription: 'Learn how to deploy a Node.js server that uses Prisma ORM to Render.' +--- + + +This guide explains how to deploy a Node.js server that uses Prisma ORM and PostgreSQL to Render. + +The [Prisma Render deployment example](https://github.com/prisma/prisma-examples/tree/latest/deployment-platforms/render) contains an Express.js application with REST endpoints and a simple frontend. This app uses Prisma Client to fetch, create, and delete records from its database. + +## About Render + +[Render](https://render.com) is a cloud application platform that lets developers easily deploy and scale full-stack applications. For this example, it's helpful to know: +- Render lets you deploy long-running, "serverful" full-stack applications. You can configure Render services to [autoscale](https://docs.render.com/scaling) based on CPU and/or memory usage. This is one of several [deployment paradigms](/orm/prisma-client/deployment/deploy-prisma) you can choose from. +- Render natively supports [common runtimes](https://docs.render.com/language-support), including Node.js and Bun. In this guide, we'll use the Node.js runtime. +- Render [integrates with Git repos](https://docs.render.com/github) for automatic deployments upon commits. You can deploy to Render from GitHub, GitLab, or Bitbucket. In this guide, we'll deploy from a Git repository. + + +## Prerequisites + +- Sign up for a [Render](https://render.com) account + +## Get the example code +Download the [example code](https://github.com/prisma/prisma-examples/tree/latest/deployment-platforms/render) to your local machine. +```terminal +curl https://codeload.github.com/prisma/prisma-examples/tar.gz/latest | tar -xz --strip=2 prisma-examples-latest/deployment-platforms/render +cd render +``` + +## Understand the example + +Before we deploy the app, let's take a look at the example code. + +### Web application + +The logic for the Express app is in two files: +- `src/index.js`: The API. The endpoints use Prisma Client to fetch, create, and delete data from the database. +- `public/index.html`: The web frontend. The frontend calls a few of the API endpoints. + +### Prisma schema and migrations + +The Prisma components of this app are in two files: +- `prisma/schema.prisma`: The data model of this app. This example defines two models, `User` and `Post`. The format of this file follows the [Prisma schema](/orm/prisma-schema/overview). +- `prisma/migrations//migration.sql`: The SQL commands that construct this schema in a PostgreSQL database. You can auto-generate migration files like this one by running [`prisma migrate dev`](/orm/prisma-migrate/understanding-prisma-migrate/mental-model#what-is-prisma-migrate). + +### Render Blueprint + +The `render.yaml` file is a [Render blueprint](https://docs.render.com/infrastructure-as-code). Blueprints are Render's Infrastructure as Code format. You can use a Blueprint to programmatically create and modify services on Render. + +A `render.yaml` defines the services that will be spun up on Render by a Blueprint. In this `render.yaml`, we see: +- **A web service that uses a Node runtime**: This is the Express app. +- **A PostgreSQL database**: This is the database that the Express app uses. + +The format of this file follows the [Blueprint specification](https://docs.render.com/blueprint-spec). + +### How Render deploys work with Prisma Migrate + +In general, you want all your database migrations to run before your web app is started. Otherwise, the app may hit errors when it queries a database that doesn't have the expected tables and rows. + +You can use the Pre-Deploy Command setting in a Render deploy to run any commands, such as database migrations, before the app is started. + +For more details about the Pre-Deploy Command, see [Render's deploy guide](https://docs.render.com/deploys#deploy-steps). + +In our example code, the `render.yaml` shows the web service's build command, pre-deploy command, and start command. Notably, `npx prisma migrate deploy` (the pre-deploy command) will run before `npm run start` (the start command). + +| **Command** | **Value** | +| :----------------- | :--------------------------- | +| Build Command | `npm install --production=false` | +| Pre-Deploy Command | `npx prisma migrate deploy` | +| Start Command | `npm run start` | + + + +## Deploy the example + +### 1. Initialize your Git repository + +1. Download [the example code](https://github.com/prisma/prisma-examples/tree/latest/deployment-platforms/render) to your local machine. +2. Create a new Git repository on GitHub, GitLab, or BitBucket. +3. Upload the example code to your new repository. + +### 2. Deploy manually +1. In the Render Dashboard, click **New** > **PostgreSQL**. Provide a database name, and select a plan. (The Free plan works for this demo.) +2. After your database is ready, look up its [internal URL](https://docs.render.com/postgresql-creating-connecting#internal-connections). +3. In the Render Dashboard, click **New** > **Web Service** and connect the Git repository that contains the example code. +4. Provide the following values during service creation: + +| **Setting** | **Value** | +| :-------------------- | :--------------------------- | +| Language | `Node` | +| Build Command | `npm install --production=false` | +| Pre-Deploy Command (Note: this may be in the "Advanced" tab) | `npx prisma migrate deploy` | +| Start Command | `npm run start` | +| Environment Variables | Set `DATABASE_URL` to the internal URL of the database | + +That’s it. Your web service will be live at its `onrender.com` URL as soon as the build finishes. + +### 3. (optional) Deploy with Infrastructure as Code + +You can also deploy the example using the Render Blueprint. Follow Render's [Blueprint setup guide] and use the `render.yaml` in the example. + +## Bonus: Seed the database + +Prisma ORM includes a framework for [seeding the database](/orm/prisma-migrate/workflows/seeding) with starter data. In our example, `prisma/seed.js` defines some test users and posts. + +To add these users to the database, we can either: +1. Add the seed script to our Pre-Deploy Command, or +2. Manually run the command on our server via an SSH shell + +### Method 1: Pre-Deploy Command +If you manually deployed your Render services: +1. In the Render dashboard, navigate to your web service. +2. Select **Settings**. +3. Set the Pre-Deploy Command to: `npx prisma migrate deploy; npx prisma db seed` + +If you deployed your Render services using the Blueprint: +1. In your `render.yaml` file, change the `preDeployCommand` to: `npx prisma migrate deploy; npx prisma db seed` +2. Commit the change to your Git repo. + +### Method 2: SSH + +Render allows you to SSH into your web service. +1. Follow [Render's SSH guide](https://docs.render.com/ssh) to connect to your server. +2. In the shell, run: `npx prisma db seed` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/250-deploy-to-koyeb.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/250-deploy-to-koyeb.mdx new file mode 100644 index 0000000000..e6f3e9ac75 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/250-deploy-to-koyeb.mdx @@ -0,0 +1,200 @@ +--- +title: 'Deploy to Koyeb' +metaTitle: 'Deploy a Prisma ORM app to Koyeb' +metaDescription: 'Learn how to deploy a Node.js server that uses Prisma ORM to Koyeb Serverless Platform.' +--- + + + +In this guide, you will set up and deploy a Node.js server that uses Prisma ORM with PostgreSQL to [Koyeb](https://www.koyeb.com/). The application exposes a REST API and uses Prisma Client to handle fetching, creating, and deleting records from a database. + +Koyeb is a developer-friendly serverless platform to deploy apps globally. The platform lets you seamlessly run Docker containers, web apps, and APIs with git-based deployment, TLS encryption, native autoscaling, a global edge network, and built-in service mesh & discovery. + +When using the [Koyeb git-driven deployment](https://www.koyeb.com/docs/build-and-deploy/build-from-git) method, each time you push code changes to a GitHub repository a new build and deployment of the application are automatically triggered on the Koyeb Serverless Platform. +This guide uses the latter approach whereby you push your code to the app's repository on GitHub. + +The application has the following components: + +- **Backend**: Node.js REST API built with Express.js with resource endpoints that use Prisma Client to handle database operations against a PostgreSQL database (e.g., hosted on Heroku). +- **Frontend**: Static HTML page to interact with the API. + +![architecture diagram](./images/koyeb-architecture.png) + +The focus of this guide is showing how to deploy projects using Prisma ORM to Koyeb. The starting point will be the [Prisma Koyeb example](https://github.com/koyeb/example-prisma), which contains an Express.js server with a couple of preconfigured REST endpoints and a simple frontend. + +> **Note:** The various **checkpoints** throughout the guide allow you to validate whether you performed the steps correctly. + + + +## Prerequisites + +- Hosted PostgreSQL database and a URL from which it can be accessed, e.g. `postgresql://username:password@your_postgres_db.cloud.com/db_identifier` (you can use Supabase, which offers a [free plan](https://dev.to/prisma/set-up-a-free-postgresql-database-on-supabase-to-use-with-prisma-3pk6)). +- [GitHub](https://github.com) account with an empty public repository we will use to push the code. +- [Koyeb](https://www.koyeb.com) account. +- Node.js installed. + +## Prisma ORM workflow + +At the core of Prisma ORM is the [Prisma schema](/orm/prisma-schema) – a declarative configuration where you define your data model and other Prisma ORM-related configuration. The Prisma schema is also a single source of truth for both Prisma Client and Prisma Migrate. + +In this guide, you will create the database schema with [Prisma Migrate](/orm/prisma-migrate) to create the database schema. Prisma Migrate is based on the Prisma schema and works by generating `.sql` migration files that are executed against the database. + +Migrate comes with two primary workflows: + +- Creating migrations and applying them during local development with `prisma migrate dev` +- Applying generated migration to production with `prisma migrate deploy` + +For brevity, the guide does not cover how migrations are created with `prisma migrate dev`. Rather, it focuses on the production workflow and uses the Prisma schema and SQL migration that are included in the example code. + +You will use Koyeb's [build step](https://www.koyeb.com/docs/build-and-deploy/build-from-git#the-buildpack-build-process) to run the `prisma migrate deploy` command so that the migrations are applied before the application starts. + +To learn more about how migrations are created with Prisma Migrate, check out the [start from scratch guide](/getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-postgresql) + +## 1. Download the example and install dependencies + +Open your terminal and navigate to a location of your choice. Create the directory that will hold the application code and download the example code: + +```no-lines wrap +mkdir prisma-on-koyeb +cd prisma-on-koyeb +curl https://github.com/koyeb/example-prisma/tarball/main/latest | tar xz --strip=1 +``` + +**Checkpoint:** Executing the `tree` command should show the following directories and files: + +```no-lines +. +├── README.md +├── package.json +├── prisma +│   ├── migrations +│   │   ├── 20210310152103_init +│   │   │   └── migration.sql +│   │   └── migration_lock.toml +│   └── schema.prisma +├── public +│   └── index.html +└── src + └── index.js + +5 directories, 8 files +``` + +Install the dependencies: + +```no-lines +npm install +``` + +## 2. Initialize a Git repository and push the application code to GitHub + +In the previous step, you downloaded the code. In this step, you will create a repository from the code so that you can push it to a GitHub repository for deployment. + +To do so, run `git init` from the source code folder: + +```no-lines +git init +> Initialized empty Git repository in /Users/edouardb/prisma-on-koyeb/.git/ +``` + +With the repository initialized, add and commit the files: + +```no-lines +git add . +git commit -m 'Initial commit' +``` + +**Checkpoint:** `git log -1` should show the commit: + +```no-lines +git log -1 +commit 895534590fdd260acee6396e2e1c0438d1be7fed (HEAD -> main) +``` + +Then, push the code to your GitHub repository by adding the remote + +```no-lines +git remote add origin git@github.com:/.git +git push -u origin main +``` + +## 3. Deploy the application on Koyeb + +On the [Koyeb Control Panel](https://app.koyeb.com), click the **Create App** button. + +You land on the Koyeb App creation page where you are asked for information about the application to deploy such as the deployment method to use, the repository URL, the branch to deploy, the build and run commands to execute. + +Pick GitHub as the deployment method and select the GitHub repository containing your application and set the branch to deploy to `main`. + +> **Note:** If this is your first time using Koyeb, you will be prompted to install the Koyeb app in your GitHub account. + +In the **Environment variables** section, create a new environment variable `DATABASE_URL` that is type Secret. In the value field, click **Create Secret**, name your secret `prisma-pg-url` and set the PostgreSQL database connection string as the secret value which should look as follows: `postgresql://__USER__:__PASSWORD__@__HOST__/__DATABASE__`. +[Koyeb Secrets](https://www.koyeb.com/docs/reference/secrets) allow you to securely store and retrieve sensitive information like API tokens, database connection strings. They enable you to secure your code by removing hardcoded credentials and let you pass environment variables securely to your applications. + +Last, give your application a name and click the **Create App** button. + +**Checkpoint:** Open the deployed app by clicking on the screenshot of the deployed app. Once the page loads, click on the **Check API status** button, which should return: `{"up":true}` + +![deployed-screenshot](./images/koyeb-app-creation.png) + +Congratulations! You have successfully deployed the app to Koyeb. + +Koyeb will build and deploy the application. Additional commits to your GitHub repository will trigger a new build and deployment on Koyeb. + +**Checkpoint:** Once the build and deployment are completed, you can access your application by clicking the App URL ending with koyeb.app in the Koyeb control panel. Once on the app page loads, Once the page loads, click on the **Check API status** button, which should return: `{"up":true}` + +## 4. Test your deployed application + +You can use the static frontend to interact with the API you deployed via the preview URL. + +Open up the preview URL in your browser, the URL should like this: `https://APP_NAME-ORG_NAME.koyeb.app`. You should see the following: + +![deployed-screenshot](./images/koyeb-deployed.png) + +The buttons allow you to make requests to the REST API and view the response: + +- **Check API status**: Will call the REST API status endpoint that returns `{"up":true}`. +- **Seed data**: Will seed the database with a test `user` and `post`. Returns the created users. +- **Load feed**: Will load all `users` in the database with their related `profiles`. + +For more insight into Prisma Client's API, look at the route handlers in the `src/index.js` file. + +You can view the application's logs clicking the `Runtime logs` tab on your app service from the Koyeb control panel: + +```no-lines wrap +node-72d14691 stdout > prisma-koyeb@1.0.0 start +node-72d14691 stdout > node src/index.js +node-72d14691 stdout 🚀 Server ready at: http://localhost:8080 +node-72d14691 stdout ⭐️ See sample requests: http://pris.ly/e/ts/rest-express#3-using-the-rest-api +``` + +## Koyeb specific notes + +### Build + +By default, for applications using the Node.js runtime, if the `package.json` contains a `build` script, Koyeb automatically executes it after the dependencies installation. +In the example, the `build` script is used to run `prisma generate && prisma migrate deploy && next build`. + +### Deployment + +By default, for applications using the Node.js runtime, if the `package.json` contains a `start` script, Koyeb automatically executes it to launch the application. +In the example, the `start` script is used to run `node src/index.js`. + +### Database migrations and deployments + +In the example you deployed, migrations are applied using the `prisma migrate deploy` command during the Koyeb build (as defined in the `build` script in `package.json`). + +### Additional notes + +In this guide, we kept pre-set values for the region, instance size, and horizontal scaling. You can customize them according to your needs. + +> **Note:** The Ports section is used to let Koyeb know which port your application is listening to and properly route incoming HTTP requests. A default `PORT` environment variable is set to `8080` and incoming HTTP requests are routed to the `/` path when creating a new application. +> If your application is listening on another port, you can define another port to route incoming HTTP requests. + +## Summary + +Congratulations! You have successfully deployed a Node.js app with Prisma ORM to Koyeb. + +You can find the source code for the example in [this GitHub repository](https://github.com/koyeb/example-prisma). + +For more insight into Prisma Client's API, look at the route handlers in the `src/index.js` file. diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/300-deploy-to-flyio.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/300-deploy-to-flyio.mdx new file mode 100644 index 0000000000..af46193775 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/300-deploy-to-flyio.mdx @@ -0,0 +1,55 @@ +--- +title: 'Deploy to Fly.io' +metaTitle: 'Deploy a Prisma app to Fly.io' +metaDescription: 'Learn how to deploy a Node.js server that uses Prisma ORM to Fly.io.' +--- + + +This guide explains how to deploy a Node.js server that uses Prisma ORM and PostgreSQL to Fly.io. + +The [Prisma Render deployment example](https://github.com/prisma/prisma-examples/tree/latest/deployment-platforms/render) contains an Express.js application with REST endpoints and a simple frontend. This app uses Prisma Client to fetch, create, and delete records from its database. +This guide will show you how to deploy the same application, without modification, on Fly.io. + +## About Fly.io + +[fly.io](https://fly.io/) is a cloud application platform that lets developers easily deploy and scale full-stack applications that start on request near on machines near to users. For this example, it's helpful to know: +- Fly.io lets you deploy long-running, "serverful" full-stack applications in [35 regions around the world](https://fly.io/docs/reference/regions/). By default, applications are configured to to [auto-stop](https://fly.io/docs/launch/autostop-autostart/) when not in use, and auto-start as needed as requests come in. +- Fly.io natively supports a wide variety of [languages and frameworks](https://fly.io/docs/languages-and-frameworks/), including Node.js and Bun. In this guide, we'll use the Node.js runtime. +- Fly.io can [launch apps directly from GitHub](https://fly.io/speedrun). When run from the CLI, `fly launch` will automatically configure applications hosted on GitHub to deploy on push. + + +## Prerequisites + +- Sign up for a [Fly.io](https://fly.io/docs/getting-started/launch/) account + +## Get the example code +Download the [example code](https://github.com/prisma/prisma-examples/tree/latest/deployment-platforms/render) to your local machine. +```terminal +curl https://codeload.github.com/prisma/prisma-examples/tar.gz/latest | tar -xz --strip=2 prisma-examples-latest/deployment-platforms/render +cd render +``` + +## Understand the example + +Before we deploy the app, let's take a look at the example code. + +### Web application + +The logic for the Express app is in two files: +- `src/index.js`: The API. The endpoints use Prisma Client to fetch, create, and delete data from the database. +- `public/index.html`: The web frontend. The frontend calls a few of the API endpoints. + +### Prisma schema and migrations + +The Prisma components of this app are in three files: +- `prisma/schema.prisma`: The data model of this app. This example defines two models, `User` and `Post`. The format of this file follows the [Prisma schema](/orm/prisma-schema/overview). +- `prisma/migrations//migration.sql`: The SQL commands that construct this schema in a PostgreSQL database. You can auto-generate migration files like this one by running [`prisma migrate dev`](/orm/prisma-migrate/understanding-prisma-migrate/mental-model#what-is-prisma-migrate). +- `prisma/seed.js`: defines some test users and postsPrisma, used to [seed the database](/orm/prisma-migrate/workflows/seeding) with starter data. + + +## Deploy the example + +### 1. Run `fly launch` and accept the defaults + +That’s it. Your web service will be live at its `fly.dev` URL as soon as the deploy completes. Optionally [scale](https://fly.io/docs/launch/scale-count/) the size, number, and placement of machines as desired. [`fly console`](https://fly.io/docs/flyctl/console/) can be used to ssh into a new or existing machine. + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/heroku-architecture.png b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/heroku-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..f501852e4cd64af7c7260eb06b063f23de32316c GIT binary patch literal 106454 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

Z|WL2U14<(a}P=>UeFd#!y2!i1Z)GlG{ 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

m#^eyPCL|cyi5Y0KE#+h?>wk_+ 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≫|4_a{8Ancz)aK%s221Ls7!v+=ZU>=; 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

?Dd7_*;xc)vGV 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%0AYR3BZws2*_0};Eo1k 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�I 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

-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�D7D89Rfo?;TE_e&bDJ*ZdDeA!TY`M33hT>@*v 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 bAcyDg_vaE*V_T8iKVH`|xLTt5PtgAX(4uwl literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-architecture.png b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b98c47070d3814c7bae8b3b046e96877592993 GIT binary patch literal 32386 zcmag`2{aV!`v;6`r&N|9N{M70%OD|34a!dTU0ExJhRCj-tYgbMb`i>+ZS1rd+lWfY zUc(S$30cST-ZSHQzQ1$c^Zx(OIh|+D%)MOqwcXe9xrOU$-#LBq{7D)bn$v2k%6c?3 z#~?H`hgE2ggKvuCeI>#F=pL(@y3^2{VkZAPM3b7%MniL%Mosyaf!FZ-m}R^j!TSwq zi;cwGeLY!;bK!9iFUR@^{-Cpv=iNbY6V>y6G{ppN|C_Ptd_Xa|Jkvc&{pKeB z;s3usU4|T@j$uF@jQwwi{~tg7e{W9n|NYbdo38)&4*!u%`RQ2-VWpoSawva-A`?N){9nA8B8Xf@VcM(AJ5K!h#SRa6a+HE-0^^iKjg zQ@C>PXpY!Xi;miaATA<&c;U`bZ8ND;?Cc~KQcbO<++iB(w!Z~VE3t*BMie%`4CWe= zdSk(Q#$2}4#aKS+HN>Mfk$LBY%LEznCXj5Cez4>J5;9#J zCDYcUAI$%W?Zw?Spe7WNI7GhXH8(Srh(*1%`ghggt2P}M4a3BH%FlHIy`o6|Wf=F= zzjIWT8Qp+(QAm~$Vzkv%WnG(aut@XsPmL_+AVXP-JC^!81e8>^B8 zKGCMptuI~BSj@mEL zS$4CYJ~$nh;gt~O^npjMZ#Ok=oojJ~4-g3PJR>0j5Ze|v%MX3MerTEbD`q)|sE2zO z^QhJI;X@ZD6xW;{2HX1r)o_;%`$DzHIQrs*X>VY|s%V3vV)dH-ai{R;ndgPzuoS(R zzZ)g(WXm)FU(VOro$ayz%4ErRbTVtVzbRwi?^ED{2(zNC<|jS5kWHKs-b^*Aq>WFf z>1z{o>gQ|g-L}%g4-9^5yMrvKtl^~Rb*FdL+j^bL_!i6Lj;}4~mre&L6Q3?V<#^*m z+VdmUwpNsjmb((x$M*l&N(h}ZHWWTg<@mj)*YItT+VAvEVHxgkJ>41SVb*`!-%1cT ztJGLs!sp6~7mmjZ59*iJBzWfO7Mmx%V90n;bz`DZm}^ymh!8e!(fDe%vWnCZSLsh-<0^c_n7NC!r1!kJu2ibS%+iQBg+8$Y zbpi1aj4)a_*rw~f&rlPuaVLUb#oqL;X=x1vwWjc<6*{PY5?j&V0C~CQJY1RSrSLHH zIMtexWmwV1GwM7TI&4Krjmy3;pLju;P_XIAy4R<1*A0a+)lBFq*%1ft=)zX3l3^`9 z$;Ay{a}uZD>$eq9SL>5lQNx8UE$%7^3Sk(#Dx3BMqvYFk=wNL#hliNy`?Oewhg_pw zT@8A}rv)KIBmBzx(4vLWHo;A6N;>!i3kt!KvS#v93l3ZKZGo4MZg{hxs!bY;FP^8K z{h4ZdlxZfe>tjXSyW+(ng4s})Mf80W4AX>uckw9CG<<5|TJz6a=9wD526a^I1R%s^ zmb5l6=%DqYhBwD_384;c5;>EN{8xfutpevz)oen?EM+2)>NUnFwL6bYO|*OB6rI>j zyD&biQw%<35d1p`ii>-4yP~jyH44F8{N3#xYr)XCg-%zT_`A_*jGC#9watjlMZ$Vw zVxpTCH1++l|HyUAX8TqId2Wi>@cC*ssvOB;@+Lh!Pi+%hk3&Kx_u%iZ(RJwYOED7J zpIGA(NTWQEG_R(&9iv5uE0PLq93C8)6E~7K2wyGOIH7H@k^&D3zFEYl7v3@=cm&tg zl0WoXUoga3BipzO>(-#h-`4x1*=Gl9)gOqE5ZicEP};5wb*zj=6pa+ED%do1A+J`( zAYnhKYST&e{HfVit`5##5WI-bZNfBaF004^ub$au%kIUzt0f#?3vJ%y^(MuUME%!&J>LRE3)# zcx%t<>#hvp+}}b?8Y`;s9?VopbqjrMW1Gwk4}0+9z#6`cL%FYLGzPR1!v^)KQV=__ z@R@i)IVX(1?6g@mH`OmE-|7YE80cOlEc5(Zbh9#mFU40vyROYFIEPV{L{dSHz^zI&^u=uNL@bo08y zOvkdmrIjB+`HJ^$dAzGf_(+>%kk{ONaLIN2iKw>y|*gqif@aZeA8eUU%mkU$M@n1>ZKN{Tt#2% z`c^&NF>7yf&Co0Y_^j+E6UCU553a=hZC@ImAM=IM)nof5L+R#jm~bkm%s zPSCu^>nP5co5N9RAbI3Ky82LNW7#x2?i5%+p`;HZEP>B)mPij%cYe>`-R+FNKOQ zx=Fz0lHh{W+x}VkyGC{1p3nr71rC`2RAd@sG>77tzoxwcQ(515*@3mv8VwBi>u0?H ziuW>HqT}n}_`Cu}oHKmTX~~>Q;mdG0ei@JT!-uZFPM0M`Gp8FISglV23w()vaZ=htrOx4LEZBs~JC`Wu;sB@{Zm!_^URbi+eL^-IKkV zHkwaR?nBtj_QBWfrQI0$x5#4m-yCfDzD62}i~6ZkKBF ze7pA#E7*ae$!uX*`@{FGfUEK5KHU)J4xhemTr+;QQS>lHpTEQx+2zbBzk(;?{bstp zp*HSNrIBiCVzKD#;c7;Sr8&OLuSE8 zdVl2NN8e1bZ>FZ^8++8Z?MOcSzmUmpSF^0OqbR?EwI1!cy z+++&>r<)dLwR7QD##%{X8~T*fyib4ku691{-4k1JR{E}j%5!o^JHF)rygv(tUa`sK zuclqek;h0W=_)+7(~i_hk?tv)3EXH_Ryy$qzDY;gyL&0R^o*U?VH)yvksi@2KA*hB zPFdpJi93NFIjbczR=?A|CI<&CH?{}tk(N;Az`*@b#f81G+ZGeO;)Hq)tDP+&e?%pF zhDw7(2o~3_<9oQ%1GXwbvHw>m&hG6F%2ML}t!Z~ri>H>V&9x#);VrIpyQPa02){ou z3SS4oI%%ak&xcwKC1f>NDsN1_+T;tCY{o!KHq)sWqV!u`xs4vI%T?Pyn|=G=n-<4U zTpFr_{&q}p8}qhQZ9T!+fDz`b{gvN_xJDNtNf-^@P=#@XNrx)WIj81Q9nRy&**}&% zPSov2)r^ieH5RDHY9{12`fPIugdAC(o2|@L{l*qwMfE-TH~AfKPlO?8<7ystcPn5z zkWbIU+*Nahm-i-D4^t0!i$7qBx#p?8m0F~uS27&NYcJ4ls>vFa#*eT~XIErY!gt~0 z_!6pk$3y)bs5hMfeEA4xeSy%5I=psl*$wv)&+EGq$_6mNmq+MnY20+1 z`BfIs;J(vZpwzUa?!;&rE1otN~2vEy>zRG#_NrA(cAs0b0LF@zkYi)R6JYVzLj!3pw zvfkGqs2D7Q!!z;?EyX5-@JCOoO!8_QYiG##X6VY%7d(Ko(x>IIRCeOV!#Cb+R4W{z zq^;S~rj(`7)*PgXP!SeUVQAbvHo+w;vp;r8%@xh%vl2(CA%UJQm$Kk`n)|u&D@@HX6B*mj$ zwl(M=934Ba=|B_Ua0G&0uI>GA6A+?CB^acuX0vfGwdstPuUh?S;M`H&So)OUE86%M zmqFU^IUDHt%0r%1rnt1T7wWpWs8mLLvAtyFxA?rh9@pO6IKSAk)iAJ7yA=DzGpS*% zFKf)h(%IZ%Z*3;f?>Bt;x09<6zN^{IgXrH)lA(bkQ9(8a($#7;42R+`2kEJ{Vk8X} z{eLQ5U#J&R6eBBNeXF?k@a}TSQu7!2kn7`az7u%COA#xZ%%~T1SUDGOdO8&vvkW!t zT{SGY)uRkVg8z1HJe%16!}-)@XDY)on=No+d$xDMY<+rUadC7jg>>dgV9fsHMgw<= z+W9vB6DP*rFa(wF2EG%fA1OUM*Ww$yA{LOea?S2R-)`%27h!G}WqT3bzAWvWy}7d7 zmswR&=1egXZL}^uBO~rQ9rmp@F@SBjbmv0a_c<=D)KaJT7-23%+K`7vq(QgtbC*uVtu zu~h{<4knbikm;C@;%f7mXS(S$*=!YDBRYyJ;UhP6Se!lkx=78(I;Puv2zgZ+v zAgx&-{iyD{P8w3R%sG7T#exz3vRPiGrA*M&=bEwVKD>F2X1h2SzG53T$XFvV@+@sQ zVRDb?G2s^s|JTLeBGv}(T76x=URK6jfI8IO`dup5|2B^C05a2 z*Ib%lP1shFYxB>27KzhiN+6=_6`FVRtTmp0Es}-0>WfUs8(km$p2%OF9#JQz0fIkv zjo{uOcU>da^d#1=sUvAIf3>z`O<|+JnXYU<nUQuFH{yjCqY<6+8ZjQa#Za|x!lb`Y_<1n9e(YX%&7t^6uC zo66QawBiId_Q%zka&LBcBz$`Vq~b52xPAq)TJG)FfGU}oD|V~fyrE*yw~a$yNxKxk zQaeCmk8zBjl6kAE$z@PhlVo7;>nwn(*j4D67_HeoiIqFMEx*3&qEqKAqo(U$nuwn9 znOk)Obr~(*GZmbOmFt{?jsB?Rm302zn$g~sW=_9(r>L1_t51Thn10+;o&KeUm9?_b z-u%H9xxhL9&x6Ih1?v2VlMNR4@cYTC*~uS;j#-Q-Lt9E}NzP6zwgUb5CCE!H?veuT ziX^|hO(FA&$rTLp6mA6T-@ZQJH;-uu;f3HP%3ROxkMYF3`EFLED^v;ZF5YP-N;=c|q!Aj;@31}-YaKjt*x zS18|=zOGgAy*FS=YQ{ZJ&RVbHnxVj8f3df{kuNhn0GMY^tv6u+Z&HhotXJwCwyclW-Bv;JZ)l_%} zx65CK^B~lHHxL+=H`GSZmNIIt_{Pq(QYS&=$ zn!MDS33}+`dE%*A2#J9-`dv`A!`4kVJDD^t$$CFcw|lOAG&;Ziu?4)`IaK6oA5b0{ zmxm}E2KDh)uubL_tx5YN($}gbt(D?{iw|Y9Rs$xzGnmgLN*cOg%v3x@RwIvcbwXe&y&X*^aBMTJ^Fuscq%}UWv3X3qqK{i8|#>#Y^Uzf}| zzf76|?i{OTj&m0XR2T370>~Hq%B$92bPS_Kdrf{oAOh%#Z?)V;rMxc)G!|u6-Cx>1 z#6*q#DAUyp|G_hKd@N>r3q7N=>sOL>b~jSVbje9kxEHZ7thMqER8&XDGX@qFg8qty z@X>^PCK;psiC39JxtXuriOxD7@wm`2(1jTV8&Ve`IdjpyHd}fHhaDZOHceQ{e2|?? zj8Mm>_iqt<_q}X_@#Gxmqc(C6k5(MH3R$|iYJxJ$I>dm|zYIysy|12_aS=A3ta*O7eMhJOSFRTE;e{g6 zL2FL54?cdSqF$CLgoW090`YoM8UkO$L9ECO%U57U*sdm`fpsrF_4QfsRos~10R`I0 zbmFx>FPYU9=3x2@c8YV8{X87F!uBQyrSWS58q4(tE>7|!H*agi$_;C$)F7LA$3Env zw1hmrOVwKUj%c3zdYIP^FJ^~-8*HQ6!kfLehEV%qkZlspVsaAevyzzb904z%4ImP5 z;g*>tN2e-J!`;a0=qoakL8rp50>7-Cs%tUvk>-7$p76dp)Y7uK#dy_+bTy2{DiGs0+y0+^}uYd+;6q zI{kO{!y!fJ=b1rZa?&z;9b_9n;>aA%Z?kjs>&VA@i2jx%Q^T)ZJ=kg7Tx7F z9(!98WXvvQy#Ou|<0zV4du0vdGUC+TEtUO)=Xu(ckHA^nOz-9PY73o_)dFXgX8Q&f znXDs7? zOT0GW+1Z-i*-Ea>aHN{GN-d7ziJpBRSX_B{F>)Xvt7i~EieDZK|f*}Rdn zB5bD>7ClGS$hsD4^Du|y&kHcyM)zo%}zvyT|N4_39iv+ z2q*{!HWIcm+>8W`A#6i&Ch*Ntu-`nALEPEWbm1E<8(Lou1MSnqYxsZpd$oSH-Yl9R z-ju6ZW)D9@U)1!@I{SxYHtzDs=#$8{<<0pSSOK4Xr$54cA2?L~Q|q^4oD|y~lVd); zs?k_Jw^BIX*26u0=U*&9eoFL6n=U;}F4BMgsiMzk&GB`MSx3_Ps@c0inPJINo3fGb zN}_)&1Kuk`#WloXZlDmZ^zg-Lx}^E5T(&9cUuz#;d@(u^fGMAC{;G)7rpuN_6}vQ@ z-IfCtzw|@v`iQ3{cD{C)c&VteK@I7iPqyEjl4i_;u(0m+@3(?%F74}`Nn}CCdo4zy zh!J{^Da}jf-{OSMrgj#jBIpYW}*wpb|Y82 zI)d;WOiQ5(=Ro0!4y%;NL-+yHV%B9qg;pX~Wfd&vUFGww-6r{5TsgAbITDz8Ktqf> zo0j8D1g@z0S6uj&hTf;5!Y@H?k7h0P5obnSiJ~(DMHhW-+Lv!FQdwc&OXAXU7A~&Y z#2F{W(UK!*RN@=C_@XG zXFy__F8d_KYawDwkW8^XvXePgm*b($KS?+WhX8CMIm~{1^^b9j|8H^F>bLTEWwsD_ zx(1y8((NQ;LvmdNz$VTYG1~{Me2fr{QQ^H!uH~_ZWIvvtGSBP|!e`sxznjQSEoGc5 z0-FkIXy7v5WRY&oEW0X9$aqZ8XOC}y%3X&TeXuk-NLLOZ8(cRVsRdwF%~tMEb_sb~ zlScpL3O-1-*IR&Uz`GxzEO;4koMZ0X3f5knp4Tq60D>Z3NK?2@t#caibxGUUuqMA$ z$-m2gyVRx0b$f@pXd$!885v+{cTm4>g0fdJA5*q;k~0`!)%@rmR!ZeWH-q2pExDMj zM}LC5hl>l+o(NoB))h*<>)xK%{#?bJGW#TY*-($ZO(&s%1yu+EHy@}@iGNB9v?@+J4+&XLhlzm`3dhZcYW^L72c4oXz+G7Ny(V)Oo z$ZUVceQy4k8$AgRN;a7{-31}mGMQ$S^rs9 zy6#`G>KN#;)M_jcFqJfNqh?}vOCBAuOZv&_kAJ_hv3;Rsv6OG%da=i%%IF=%4fhS} zeZ9SJ0DGoaiTu6vYR%NBdsAI=>ghmOwR>3B7kqB}1Doa$y?C?|2pp`m1JP2bgd zcXv}e&0QFxFBmPJRlh2FgR^C~RLS=&XOb@c!*j&pm@3@Kj{w<_P^?gShz#oh0?S!o zAI`A1hQo%_lmf;o*D8%u1tF6d9mUl#;!*o5tx$UUijOennwSynf^EiE@ryXDy@2Ry zeQnFx(Z~A67039-H$9vTtqqQZbezg*+A{BLdZ+Qt|2}bhMGA(w4?TyQsRs_cX^}5; z?~M`HIrJTm`kreuYT;;WVs@iCBr^#Z+vh;?_YOK!axGWv6y~Z46Tem4sJCsy1i1aSz z8%&&JZ}a!}Yp5u1L{w=m#YLGDqY-Di5DP9drw1{L8v=ugME)W^ebx}3Zhw?V`-0nz zv}jWcR>be2fr}ekUS~T`Qjk7CjZeA*2cXQpjVG7ZK6Yp8YCfzn-eyDz9KsE~dX1=W zv;-iGFnin+XC?0ux7{WOzvyK;_r{MH%(z+fnCIZN6ys>a%}vZZA+*Lrqv+>s8~WA* z11lC*to?y&{vp33a5;}2mtlwre)j$M>SDb8>-J1sjno&fLMGP<_3m{EwRIC(ZgHAN zspZ}y27IYQro6Bjk;Xeo*`njkUPH_d+QBv*O(3$eFz!B+F|~kq1gM(EHt`MT8msFi zErXH0T$L4iBEzX^!#PfBXqF%?VgWj0E#!%Yp4`A;chT%*bZ}U=M;^Vf<12u;5!m(l zY>)vjFCCvZ<{u!I9<%A{U)ju0MmVXQAglc|`LH>d*ZC{@;AElAc0(6 zl6sV#90*dXE53#T`MMg0F z*XDHFD{Y!zuMLeif>5AH9eJnGe<5ClV~nDXbq7~?gt40;(GKV_`o@uH^1S`(ef=$ z@*p!;)&9^1K+Rqs8?KzDR^?jygCz~f%OzxNl%RB;!0F0e@%4WpY z+>e#2STz0N;;+L`O0LisGSgx6m9O2SZGw2I$uPSs!ePPpjRbkiyI%?S=DpGkSos#) z(_gYNW;Mw-ogCy_&FF}|hgr&h)lfRN*&u3Bvv)xeNqR5bYkDl@hs z6v=eoYGb6Rt9+q(yKdoK=Ums@XlRW_biSMDE*42HdxUZK@0uYvnPv zJKb}j{UmYs6s^h$5IFqBl9NmQ#DZP!Qgud};+} z$HOvhcA5r@`>ET!tH3O#6>1^?KqAH<&7ESX&vn!1Kr4|X2jW`FC8=^o0;B{g#h(T4 zSo`)dgUE3kbTmChiu8_>AqLML-bb3Iz0wTS{9?n+$_06|@8SG;hKX{sC!dj$y6&%$ zm=Z>327-$qyd>XvjK2s72f@5>$NNa^b%T_G2mYC5;U+=4>D3mdX3JYgDYWsX^;e&s z(6w(fJ6^5Odt{l-$%7Z-c$dGedrcvW5_CN4G*Lby7y;;srQN{Ij$VNao3M7C15~7@yy1N{Kk$ z+d;V}3s+1jt@5xmu9OF(Kv$$y1tI?`uu1ELWopR8{n1H6d`MdPP;m^eXj) zk?1I`g&yu)Zt@~kJiLy}TgNC&ZEGXz;Om255(uDE-3z0#>=L>8e}Scd97!vW2mJv6 z2yIm^$c2i=`bBs8f2l}$JC}vc>j9CLY7-1OwK=Bs9U#IBd=3};eezMBn|9Y^`v4E<(*sC{!)ZY__pm5T~T)$VW3 zD_Zbj9&e6rM`U&P6XP(B6czlk2+cX>BO>FuQc{3G?!m7GaJIDvZjbl58)m#+V5hL9 z>PCd-U9$hCO0?_ERSHbz@P>1vXW%QpOgE;bolkyEpOIDMVj z-3x!mxna>?C3}93Ce<$(+4+^-a#EO}w$C4!PJknb3zmBU=)vJ~?&!{{n(NFc@lMl; zAAh!vQ|Q0lPPYD4CN9=+W%ykOD7t2R!oP=VWwGyS8|Tc?9b6Gu@AI}uR&xL&O9^Qu zHT23*1Y@camORJKS+v?ss!$IL98y&a!xP_@jYDyvY z?QJ=ab@bsRMoxsCfn#%&4h^A?;Wqp1){d?s8Fdsed2t)8JM9X)z2N^1h6oUba@ zRvU5mG}|Qer4YMFQW)~mq{3vg?S&xSgxSuv>HOXs)bq#zOvQX!QU|?i8ySW5Az4jk zI8RCH_*c|uk%w&A+52oPp~w-FJ7J$dviDYj2V#HQhC_vV%JUI8yXRrF+5DB6MdnKz z3L8`z=$Zf&g|LP)*os}Jae_2@gyI^NxY`Vv7#RV_Z?xT|`oe60kicI^A}`_2G|5lN z*q$vjt0>c|#5UU=Y$FzsLmu$$Y2<5aBfCup!pH?t*^Wk1^O~PG8v{Ltt_zXZo`(Lr zw!gdmP!N=xJ1D2y{NI@*2XBwhHG-W4kTiRi8rDL$b5KbeQ7Y_v-xm4~X^E>^|^|c8t_xh95Xu>HyUV*ui2TeFU^X zW^eF1P*jD6xgreg$L;UvZ~JM6nN5dtrD(c|GMRR3^KrxePJBGc1R zZE@{j;d$)0u2feY^0%tjm+RioT%oQN&YnpTP2_)*yZ=DB;ruAO?t|rhxha#{G(mYC zgq2^ICFCN=BzgQhAm~7rrDWL1Q3^?)p(17513ct)=GFZa{>ac#tn@tDVV9_pPdJoF zFqEMB@tdcLoGvt93nwqyP*H!IsxvoFf#mwXZ=1`1xie9$L9((=jh`$7?gr+pvwqrC zW)ndS+IgKfmc46u`?ljl`;yhgJfV!IB36s(GW#ww04bNj?AY_vO5PtsP87(wq1<8Q+Dvkd>GeheYTLFr+#gK5{55G9hpZMzQLyK zoz25Ozl^F(-d~T%nvZ*79k@F6B^W$OB zAd-X7Q*N_0)nUFZ04owcue!s7F-Ge@(~REs%B z&gq52Bf0Lzo?B>H6=Cqzp>?kxnU1Gm-8%-=5;&a>W?`PyS3;wrRP!4Tu7#%~za&nXs^b9vkr*g`7a&&hv zxfE%iq6^_-nu$P$VFSp4N_;waY@=|UD#dGLDQYl*-!V3@OCxG8!MQ=MOQ~mE1M$UH z63@3Q4Cv0Kx~g|SWZZTjv$vtq%7S}umgL8_VtV(EfQX1% zAJgQ-6#*ZyDEhf5gN#5Lnoa;V5`(z?AXcrXYq-8wi?ZG0sLg*aa}V02D}&51US1p=fdX)PA`l~_~8fg!rt$BEGYgke03if-IOV|Bx}zZea>o|pgXWJ-?G=} zK5<3IBXjpxZ~lrG89_OyzU))C#_=ytX;tnfN`Ej6Z`uEq)-dWfVi`54xEC|AWED8$ zxOidPf4^sG_da@wUX5mav-3th@d6fe$)Osb7hIGn4M?C^&cJmke~q|0oTS0k{O_k0 z1OFD>22UzfuKvnBh3%F9V=_bT#m{8(Wx+5x9SIKpFLbF_7eY!3T;^G=US1$Fb{A|l zq-~nm{dvbTU|^xWj|UP}!Y{rX-h1jmL^R-nO9U{fv_kfDrQc(Kny16TOK*pRL7$AR zOw8q+@Ym~pe+L%DwI9#v`L`8oTv;(k_XxVAPk{D?+fcG}o{M+%NG=VOaNhuKRg~Lk zdpSEfP7?Db^R&--$A1P63j=K;7h$?tK)R8P^-eWQ2Mo~rZGX%Fa$j zkdKd4Ag!x)HMiIjgAkL#1GaMOOelhXf?-6TLMgrh%__HShp{&HccIud4Iu9tjCrZ* zR3Uf(VaN#@AkOz)9$nBbKo72&NfB&8H{v6#T~2d5<$YcOq0aep^zQsqx!aXDLB2uJ z+nf9-`fGjCRyH6r-u!`hx=_UiFiL5z4Gq3SyD@SeW7{kB2|falv?K&GYOr-;<~(~Y z=&d1ph;eTCq=#4A3?W<)3iS1vE+pkoYbzUBD|qc}(sbz$p_%iiHiNZV#arNx~3Fw@VTA)8G(!VSX- znh1HtY*0s34+d|cGkOPLDNHqF1T?HLgONQ*Yp%<X}ph8){!h~Du5_5 zzX4HP%8S;0;iZO3ugY#^;wTz>hp?48J}b9;x*PuaM}myMgM0-JG?S8qJ6hJ zeRRofZAGhwj*AWPHIL2N$vfKKO}>(!>EJYHKsE$CQP9*v1e)%XKu+d;pUiM~;~=VC z0#yjoR94EfiH=FO6`!W>%jGWk*M|YJ?YK)XWR-JpA_o9GpUi7=nDDI5-qyYEI!_9! zb<`xD0a_R)h03=T}fE-vvD#+Mn zVKrVsGAbMz^^)SeKsUUjJoz48=Cb%h)3NQwpYF_*zz9U8Nbo4+<8%A&sI11x|6bSPCZoZqLE?*leoaI&M4i(_0lNH-MSt!IWf_vY&fBbVZTl6&lqb&mUMGh=J5 zQf-*y6yN1z?KO*z+8AkldLENKy&Sl+*R!(hI|6eW?lo839U`tv44xb0{JUudfYQfq z@d^t4r%mDy*#~%_z>6y`s=wVdl~{tq?8Z)W?#7p<-}qg>xR=&45*v?n);Pr0GHCb` zfKw*p#6>ZpgUpJq0IoQ;5Y@8(^V9XE`iZ9BclgK2$VKP`@1Z5%sRBz<%8aoafP*do z_kp<-1nT;dtCgAtNyY#INfzA?hllo`Yk1gwZJbN*fBv2R@l6Sy{u3A0YG+g!>WY9o z5%}p-BBAUET`eD3Y}O9K$Y&xIEz5y=96KY}9_w(?pfl>)^p>va~UYv)MlkxJtRBvVZz@*|?tH(| zSd4Br>ccj2s0iy1+?UGzQO8A%zFpu1^;DDkUw&dm@jm>|mB(T2g+0W_(;NPb>k7?~ zYu*8HpFBVY`XBy03oFl(v9;+8sZos7kn^tah?_>a5r!_bqst@snPAP8MdI*}=YiiW zdG~wPhxsryEf&1y`5kTPCXz9Gv*Sr6= zdZA8>KZzu%p3T3-S2IPTg^TVI(D5OX)qnCO z3q^IF8>4V;eob#ZBS=NT_8s|pNd(WS?aGf!(}fE)#oEQLeN~#k8;$ro9l9`bz3p7l`ZeND&X(75W}7ImYW-8rnavjC+7x}4PGwS{i)V^l z;Q2R@3C6Na#MwEs57dTh!I5R*vg+PzKnET{ZfO}tRDTy530-Y=`Z|d5d)bflp0HoD zllgTgzMJ&oQYG_-5JW#W*kqwb@XxlIsmr)bQr%v?W&Hx|q3pCh%Y!f9tpXUblSi!7 zdmD=jF7DJA=4FjNM7uJ5e$9mX0I&*w|KU2Y4b9_A)|TtSYHe{6GZPm(?YIQia=wWk zHC0Qy=M*0T9-6wQu{^TBdVhRlFl&F=1J~|W{Y*&3LLggDVVZ!n?!|O`ab|Rhj{!n@ z`)E}7$kJ~osdjWEE51 z1i)Q{`ChGWj{%U2xcy_G98`&U%7l7fSjAUFD)C>E38*J=FvtEjwXnH-b*I{)Nz&(8L{*=r@3|i5C|? za%MtlZ464?Qd6vyn?Vq9py8plVSI_0Z!`};Vn#QlI={IYEy;<*^Fpc>aMBfZYcd~Z zuKw#opy4Tx?g*Hv7o0P6<4RN4Q%%J45v+PfIdX%9f^B+qIdY&v$DNShHTaWOgj~)g zqRLA*+0kzpPCZW?3>}4<$Lf2A9E}>8VtZEZJjQCF%^T-dtj6Ca)m|G)sP_r)1))Ql zv~WATSgr0{OZ!3>d%b(hFwfX!_;Sqxu4Ylj>B%Lc8U&!I2=6LEhW&45=HQ`4O6SnN zJv2Ak3+?5~fHO%Mo=b{@27|Z3>1=tKowckkfF}&Tc{>_-Pl3ZqK1mz#Zlx~5rGt!t z=>9~3kLq>(JP<_;sM4!hSjP;4R1-SVfE)M~&<2h4xVB(S`~80R%BVr`u!7X|MP^~h z>owD%DDIG8GmT6JPnis~RU6`vJ-bpt6~7G|-LG z?Jhq;41XYYA^DZc?F^y+n}@RkjF#mYTkfR0jFWV??I-;GH8)|iHj;%9B8&w_oe*4v z`}fc;BG#5G2sHz~!}{HIrrY$;{$)URJ z@*!2bWEuB8%bXL^%6J(*@%ds`=go9U<>$4H_1foq?&D!+JK1L5r_JQe65zqv#M7#s8_$guKN2?+hiZ+@IcROL~&WIPkeEC?Tw~ zvg9W0euN{hJLaBF1qY_98O)ns?#kgmYnZ<9A<%Z}X1V%zoWc zY|on||F@KvKq?ljgJYyG@s@Zg=my_mv+x=Okv3J5fh}l!^J>ijI<8Gb2g0pEKjBf z^|FCe3G+8jIe76h2OE&N{wyWa9%5={dew#ZRpQoHSHCj%-Xl63^~&>C&%JhA&e~rH z^p0$c>@>A&S*{Dygy@kuOyl5_6x(VCoxCy}`I`IP!<|oR+?ZGs4o(o*5`)!`N3&=8 zi^Qn~M!R@Aa_}AOB4{g~gp7>ZY^jgW)vQqFVdV=20rV_&I9e80#9I{Ksh$3s9P@!! zQJR*TZEl+-pU=u~WfU-nx8?v6wwba{_+4UJwgC8Inw!?Gk9wDr7^!{mlw0SP2qIJrgOa|Kx2Z@A$mBqYcIkye*x|_imqZzJ1+)a9it}$E&yel= zeJfPF9M-V<+s=lz+B-2kHwWXG64^Z&1cem@&nc&@J8N4d0@xRYfPf1NJ)g)bg0+Z5 zOLx?wkecZi9DI{tJAJB8L&5~fT%ef;$<2NqdOdk8MU#gGZ0hXrk7L9&&m7e(LlouU z7eMKqF>V?(NO&DOl=YCPx{9|aEr%-`WdoTjEKH@oM|A&itnOsTkn6)Yi7_43AYQ#B zAkhkA?rh!5&4ICm-jNGc$-k-0aUN6>FL|XDXnxULAg{eDEnTOoAD!VBkpMds5pI^B z>~$uhim=<6`sG9IS8h_rQLP?w>F1stSF974UC5CXX=yT#dd|k|bZtolAtAQua+moaxPXHC60py#xER~N z$#}d&LR5I)rOxV_nn(uZbbIpN+kX5A_!FH|WSIu;lI?X$+icHTyPgz*6CR&&oj%4)~lxFtnvt3w?Gs*vP&r5<#>{DShTMO8^g6 zTi14>`lSt1iMH+jdUCm-PvU{kT^-}xx0&vJLwQ8zA0t;C(Z0V-I#Mzj5;H!$_2TSA zDJLiX!DikolzaN5~) z{O95+?o|e|+DCeDV0T3Kz~7v?J@YhR>FkYOSAX_GW;E8LTyskQ>7M<@l9a-eK0cCJ zzQxnNwKCUJn(UV2O;tA;3biGZ@X2+c=vTVzA$IgvrQ(jMHF0yd#9kv?x`4SdNY2^U zx?>~xp{nX9%TPTD9TwLUYvwzCT72GfMr2yxd zidR|oT^=(YT#WAKIp>vbr-3x$Dy`!y+5e}tuMBIteH%u-jT;jgp%MxTqeDO%MF!H{ zrK6=B-B_rMmq@gDEK!LB&_y3Xs2 zQC7tc5QM-3QY(SX9R`$51NB-eho2m5pRo@{*F^04PIdvMfSloFDIC8PL{=HvOTH=XA$EI%B|F8vV`bp_!$P9j66& zJ9P4%SL8tcL1pNUrYW4a2MA#%ygad9MUIe_vfQ4+Py=DBnTG>%5wj-b1#*P=_mC!B zRoKlTi5OEjB8(X7djqr<3Apm8!`0I&{f&x{8BTOv8NJ5S|1f_1rAHW`hxNmgfZHEX z);oScE6T4gD~jAUrv_lmFO}5@U}mWr)uk6D0)RZl6)QfWe>bZ8kTzY#>}forz2mKG zp;fzBslATvw`@+Tf z`c{of{G{FZke^}~t=B)fU37b9XN7fXy?Te;ZZagYm%5wVJSN|Ju|Qo>y6oPi9}~fd%hns!CYrZB%nNtdw%ju^=xOR8>L=q#Q z+@0CC*LNrKi<4qW&wa*yL&sk}0^BSBRqrxl>Pk1xW&#`Lp}Jh%Xg;reYRdue=+@Q* zn2F^V!+v2)P4@n*3=`u1WCD+kAi6Gp^afNs@Fg@tK%hhH?(171`_WR9g{@ZOSBWX- zkvEso^t($oyu6zXHzO6x#47F$dSBCkrOR$_+yrfuUwYHb$xlH9iVBUV0}qT%Sv9vX zgG!K-c5)MHX5XV6W15NUb}Kb?O=!Gd9_3)&zY+Dc%Rlcfkl}`XD?|l4<6t}*@(XLb z_eIA`nm2zFmD=xjZ{>r93#O+Z_ocPpM!*^GN4O=fx$ZzDh4kO;t>4zlPNAk#2ZvbsziP*pK`zG! zN+N-lOltnnxhOXKsVlscAE_0Sj4gkZL=o^dSH!BG&H5l9t%s3fhd#q0P@C3TMWO3N zs%w6{f6Epn)P|MH-KE~;UuVNeu+gxY{t>_b-Mo2na=zSO;ecyCCB8yYPP_B#hX=8X zUyF5O(Gn+s`gh>9w*bg=y5H_(c<+zapyY%Z3Dv*Wd$>4d+ckd)rlcGAary@l1@Unt+cdtyGazUH~t4 z)t9J+X*xKhX*`ga=VP4)j)Gc~LQ8pXE!eI50;Nv7jb&2@Hll56I``5`$UsIPb_IC2 zTK_nVy8^6Do5c`(RsPfvUg(Dv`Ob~F0}(v>)!#Wz<6veX8gMqVjJi@Ir%Uy&?VRq5 zg1mdekVWeddo|TIeiL+`3;Q;7*1C5MNX(=zn*HJfo*(}7^Xjjpov$yxs*^opyV{pu z%KUQD^UwUou&JK2lVe?vu(%A{a;0( z5)9rNG)dUn+RZnyJZXV2wctBx>1CX5phHPfE%m4=b+I|n#YF^kyKr-MB&s68o3 z{j~_oG|&zK%rUS`s4_TrkF8uZ0{ceD#X~d-D)0v=qe^;?BUBF&fft(VvD@TgSz$2* zt#mCvuGZ5rg?Lw)vch(z_1MeVaW=6-Gj?z7^5O%9HwMKn4)M!_>o%q2gTj-wpm(|s zmxe^X3iKO&gB1Cytnr4%^;qj=ln=8veFXup9Ds2?*B&u6h%h(@l|%yh(gWW}kC+h= z`wGKKh>Q0H|D(9FH@WsgRbe)6?q@lxOcd$<>=TBAX^kwdR0H8ek>CEU_E$V0+9oThwiUnx#b>8Dh$E>AI@y0n{7t&xZ6GK2T!>CxOpjXyDkZ|qROUl` zyT4h;v^WvoO&|TOL(D^kpM+2J|8-0oN*>Gr)NC5RPw-d8(YOvrh69{K^^_ydsNxjji3tusn+eF@ z`yB@lkm;qI*^^+R2%A?l9N|CQU8iJswE%B&=d{7Aj~yarT9;P6*;QdK`1V2;1u<@{ z!MTW_IdejX@($Hp-}X-YPjTPx{_URkeXzflZc(74)i^eHf!gVn#r(M7kq+9q4vXHQ zjKs-v?~<#wveq_UO9#x>{ucqC-p^XGoYxTKQrKZ#=;!a<`{`oL59&fLRKw1{z5z<# z&YqZhbhgzy;t)c1L<1!n%O?0$Cl=_L%80y~5Bqb{Y979 zuSxXS8QnfyNbTv-MSq`H1AOXz=EP?@=?1ZkpV?1HI6msWnRQzVmDqUhK6rjk3^(N( z7++0x4djA!Z3ydkOES*NDT_qI*mEVtBe(*fL%%#w@k2{rbCcZ@%rXO8K*tUl!U;++{C<0sT{|OE_{R)S#8- zWSu@Bv;a8J#lGeGcFGZBF>c%)shRhG#pS9>wkMy9W*=u#ad2MpiTxH)Zr-q=s0m?G zg~dlfFP!66aaqtFW8(_SQ(#~1v(I#GTx~_!FC1_-qyDHiMXI_c{cXSzZQ0v7E~Vt` zdieTo@bdP%CpRt=ca%HISGP*Y_7@&12_XhN1H&Wc%0zaoB7jZ~)QRug!pvY61cwTw zezT+TqLLg?KJyqz=Y47a{l{@7oeN75tD&22^(bO2EgwPHRY zG~cIrF(>!DmQy^QEvuT%&Z6gOAAA2Fo#&UdZZM7ao3w5`yEs|7RPVE0^7G?qLguZe ztx2}}_TO#RUTfAiBw^R!y?kR`7lG;%?HtTGZHft@(3ViHT&OiJ=Gn`rOlav|tm_q+HewxO z=E_vuY9shlZWsD?kdSePctE)TwtknmLG7D>AR;qM5U0d4TREJV@`$a0*1G z6lep8(=6fY&s(Vf`lnn4QBw7S5z@Z$vmb7d(Ooz>f_l3`FqOhp=BxyBq2cOb#F))CRIcs6a-dOTattKe_U%A z`%}^X(G9s_HJ6+W2TC3>d9k#(W?$>a1u5f(+~XP9%ItnY$5knpfI5g*9xD6a_`TK? z4NdCR2B*xckqSqlR|XymZJHjwHsK8Bg<7 zeVeRia=_NrM9JQ@^(G=LZbQgxe2JrjY-_`XFch^%ABHwI-5sxpwHJIRvcItq%FVOE z_p*5;L^vbyWzI4I$bZeR`Q`AB5zOc%l(7h;k71ALx^I^3;38ACBO_v7J>IrIe^c3# zi9PA|>-H7j;_t=Bb&U2P?%sQxRFp^;E=-^+Cr7+mLTC%BFk3DuFu(oIL+)#E*$@fz z)QLp;7zLgGwM{hl4ox=@rdGKj15{zh0Y_jV4n10GWhUCj_REG3byoGEW07yTtw3|< z*6W~H+Jj?PP?($GVV172Fq(F#Pshyot z#x~kN>Bm)5HAPlV7Ma;nVP4-7Lqs;BNfLw&{#BLNx?t{cEJbxgW{YUlw2CZ);d*s@ z8>&}|FuUSK`r!$uxY!F#Zd&iQ2g_In2|tqyE?qMg)O%+TJ4c>N^1iWRr0!JYUA@yr z!kCd;wpv!5NjaR#L z_V&7e|LTF#SXsK`Bb9!bi7L)B9k>&FXmBB5aS58>)f=ECv3#nRcCpn%>FBcEdMuKR z7ZsX)9Go&MsRkKf`#l^(>#}_4?fyZwQ|zbiN>ttd&%Pl&l^`h~S{Tf=8M+KqHv5eF zynDZEBP72YTeq4f^<`pk>Y0K$_FVhL=_gM^&zf(NipEXSnv#Bz%uP)aESC|Lj5aDN*#EOfG z%E^i4FP|`W3N{%jI>q>i3>dvnUdMsVJ(Hg_7XC^bgZu9Iqyy<#RoBS@(zYn*$BF9P z@!NJNC@w1ri>92`4o+F(20FqLjkIR)#nG2O5i>rg8%z+jJqFk|0iOg5JLyh&;@t=2 z$7?tZ*m+_@HH-13ZhQE~o5rj9@M@p^7Y}{_cS@`TtrNGoNSX3E*UI5tQUWPI>PiBS z^Okuq#kXUu!YbEfttmP!BcLr};gjj4Km+a!O{VqpGQ%}Miw2n$-}thWxeb@ME2Hk~ z3HZYhoAyVhV61piluudVS09zmB_G>hQEAh8>GRQVMSAwRP+=Ejlo0MSW(dIf2U7h` zGxh7X*G70yLz>94IFfIr@&(T&&(MR*@J}r9tt+t${R0lW^O~ z=Mz!{Xc_DvZOkYAr89s9ydh+M{+&%^BKtYmFrTThY;{K?%mh3S^8gb6x*{t4r|&Jh z3tZLhl!R0$BDBHIg9D!9E0w|fc8QPXP-}em`iofVbtMPaa|%wrtIP;xOZ{q>7V=ebn#``we6WAI8SJ!)X9uA30)3sh%S%HPRSpNDR= zv~5pXsaWUP9Ha@)-RDnk@!~GeU%t*%clX~LnCLTbUX+DwInE>4_?m(<=Sql}?{rC| zyGj=^@pi@S2H#*pYOnb&_+c-BK%pOUSoUVCKOd`xUYh#^X3`0;L)s-d{ z2o><@KI1e$GpICNAe>cgpy=7TAyq>LdRHl}x{=9mhx$2c0*IASP(h|8t!m3Pjjb(I zJbH1dYBwasnX_{-Jkz;zqjq7;pEOe|(7UsulscvaxnY}GZ5udhG87-$y~NnMxL=~+ z0tSuG{Qmv@PBkksnz3~>Yzq_9iC1m$ok=kPclP!D>Y!Cf;;y8Z$ENeyaE>BTPX11g zd*On$i$jjZLe;Y_Icho$588L%?C=Q=fZ+b_w+Lx|=z%sV|ACmIow17Xr0FsU3*3L8 zNI%pgzwRPq>nY$b%p*akMfEd7EAt`v`|A~GP5YFk&Uf_%uP6%Z)3+D8Hr?zi`B@Tz zXAJIqk=PIS-*_7qUcb2Vq4YCSQ~{xiTMcO|8AO#f@7De(8AqD`-0Q|?(S69N&b?Gks~@+o0tQk;hgNtl|u8#Krg zADpnwonIXJX96oc8Y}>$wojrqrlm_?YLnCIfv({$lSC;mW8|K{NzF6e-JSY`LjPQg z4Vsxb*bMzzlgt(ct?&;yF+FBw!KW^2-++0N+JCmp1H8dV**c5jNHpI4HRj3R$I3s2 zPLA#o1`T|xE;H3CbUR!4cp*h5B2@~$I{%XCWj+g>63VCRS*m;?v9ms`0;PE^ea;wO zlq*fP1s`}<&lAr&WF^*b2>{*nmy$S3Sm04?@SV!8KdF1#p;sRz9@_d_xeLB-+VBXk zklK>uc49{94*1_sG7Y|GKy6jF9j@Iv#lLb+p};_gm$^L|9L#j7=Ju+&;IYD1ji$c) zlTKtq@O-bnVgMzD6H%TaPTHv?&(%SRqYrv(fd;e2{Y8)^JY(yggo0;dv)@D>&1UkJ z?4j+BM4E~+Sp?)#rvzZYkC{qDXI47T*8&yB|C9=4uCI$n?su=(&JW*S-AdBm+JEh0 zoG{>i{Qw_gzb<`|=(C{s);{on9qYh59W9@EzuyW@WNdX?C3j$jd(}nSx8_j$`5sBc zyy4Zr^319Y--$eFP*J+Wkjq9~jEX?HO(=OE5s!F1lES|~TGK?$ z%|+vPRw=8~jF70D$~y>ZLubn?R(S9g78IgiaOJm+$YH+}5qv&!hY*Rj@tPoX!bZKF zb1!W$#ZemG)n@Hcb%1jdi3A?)75d}bVYWMIFLu_n2C|J|79vyqCW~QO0XE9h-!UPf z>#7pXDjj*YxyIS-xzfbQ_Q(ylIf~0*LiSGl#6n=68*!o6yhkinq9Oha?}NQNU#ZoSYj{y=2G$!oK`1jBLKjc1 z`q}q`*7kOGwW?F~{TIC_=cRXgF{%}%z$s*I|8dE7iXk% zu+{2~o>+sqgXdL@sfvJsaS-R&nI9^bG|ZMwU$YBwSZEzB@@@+CbKh7s%pXt+Cai`Z z4CmgN3O>vej%`NlkuTaQ?9??Y{#hCji`0*3ii?_!(r$jDqqoqxrJ#ou(e)NL;ghK~ z&}p@3dZf8Kx_IUj9^WZuE`sZS(9&Fj`?IZi1Br4rU7%)~fw9NM#b`#sDP?4fM*Rgz zVrk7P>;Ysl*;rj+D7CVqt9F_hGGCj3A_fGy@ogsLVuy8#QMTYs1{0~akuCqQa(=ZGB5K+jyOxu z4tkIU-o*u}Tkd;X)=WFyo~H^cIYPsfPo~7c# z!~%ElvKD1b2WzY^AQQ2{fZB2^p;VCho}ZYS);+=-ZfaEq?R^z)bxfa2Kh{bKB5ogY zYP-i`nJV1sLnPh!Hz9An-0?E@AS7ZH&@%7Lvp*QL%nL7>@u_=xOqti~EYxt@T5DOd zM$L4f8U?iK0rKy6p*aqBYD5oyX%BO@8^wad0HgrV@iTuONIkhY?edoT^J!^@)U@%l{8Vkxa+sXv+C`y+dQ{+Kta0? zlWjUqBRyW^4Gfvn$&%{ni@cu;vNi_Lm<<2mm-^YxU+F6EQj40M ze&>B)RC9r-3&~V9%nk}LeA@C2g9Y7h&z-yK7s|Guk=O2E8TDkZsWyDWioc>DXF?AV zzE@MJsthE;*ho{Vd=#(lj5;XvgzM(2qQbeXsKcM@7q{b#Y}868YpXUTCCY;%wHG8` zpzcI8{Z^&CKq#jM>0|)KAlItqNRO6JWp;i7x*arn*qCc6Yf0>vI_U;SEQG4SgbCN} zi2bEfp0|-*=4E1yIws%dY#y? z16S(>qmee@h2X=W?l*&g8FjnrZ^vO4(Wc(gt8rPC^4hzJY?1N#g@%IO zM|J+vfcc)bUZfqLAP53T%|8r`Qta_z&(nRO%<)dB=!B9LTTIuvh<%!hsOQUB#j~wv zM}K{h5|Puq^{C!M5af{NyA_BLAow@CTSm=VH`7LNvM*L9!}&*8Z%sv}Z>P@m1V%P* z0tOTe@Slgl;60G04Bya8k~jPoc9`#t21#k}G&VN%V?O$WrvLQN+Iw|lIWhvX+1o8a z$^L~vnT{~11TEXpc%oG+{qkC~F0K1gu4Cly-7@DWhVb%F zeWF^Z(J*TNwX-5U>s5?P*e_^|!QOl;HyQ*V@M1KEX0y9n$e(f{+DvA}Ubq;3U;qYY zAA9Po@M}99?yjkf4>6`lz8Id~|N14S!lWPajJhVRz&Gp(_Zh zp>9!7#qIdd3$5a@kv>ibbwZU`4PB zWdy*M%6-0)`N05W2q?y}r{#VjC(v_NZ?C0Olf`b=|5+4cQ@$#u)mq;Z+#iw-lv@=D zcgJ-4g>#2(w%=xhOIVeMWDe*IRySK9kh)?c zXnj?=K$P=~QGm1_2`Y(Lin;tGYZx`%7AC)~*m_|+zHzk0-8xp!gif}aADg&y82AhH5~(fE@#N!VD}4*%N-29PU_**4$L*&+3_aW`sGP z%gntN7(Vrv2@JU)41Q!`$HNZ)M03W)4~om%Svdbn8My1y$qMk-$a#4)Oh&>-Z^6Yc zhcnB`P(q%vtgeg#GO=rSw@m-Sv&5yKWUbxzt0kb$pPJ2_PRBKY)kXHI0Fd~T3v#N$ zNoe~9gxRs#hcD#xMU#L3?2D(5a`zPHkb9Fi80}#57igiLse9)C`d+wJ)|mTGMg@1% zPL@O0D`9nhA7=_XTvi{D8~S>maS}1-t+Xgx{0NN0;__^ja8F!jCYkttJWyP-i23ks z8K76OMoG#1GBAU-4DT1L#^_!#uKUKBp5Mv|3)`oa^}9dY)sP>)Gjk~$Fb3jZ>H?jM z6@dM?;;^{U+3N7iLLMC?64Mv0j7ZrQTOkk@ds!GE44=RdIr*`vN%OXmtze9(&2E%~ z>jnDmI{Cv?xi5OXJjVOP`^U;80L6Qll%qH)@?9RjF}k%AWiA7H=`u1nO1aIQbNy#Q zin3^b8>k$X2-ua6?DdLq{vdKq78K+N|FY1fw!~+p0-LOumX`06hw}_zo^AoAp5fE% zISq9I84)U1M0OHRGe+0qs<7Qxs2`8B&Vz;u<2I`z0K$j&cu&ZypORX&$6u`1N|g&) z3gi}I(Fc+(Bz%gyd#9eofn)V<4s*wHJnSz7Nlsb&G|$h;GHqSym7I5n{sM-pULOwg!Fr=h)$6&$g|9#-w0PaTh5{)V4G7U zmEZ&2K%~pUrbo-H@0)L%0ADeUKvqA)C!g5Z3$8jkp?3JV;VH`)e-@&0TliLn*wD~+ zDYN-k^{YEJANLI5%CFz}zM^wrAV*jht0d;axEaGHT2-yHx0^_FhF45xlDY&uI4i4Q zzvp0VFoFRfDCd80p9>fCc(A;US5yhxXf!J+aW%iy)mAg+T ztiCXx=c7&MmP#@SVHOrlBoAq|tP(^B*>M(O7nt07k49Or+b;T&b~&TspnaRp1DQ^G z0#A%jqVKCQ>dkcV(k&(FT0DS{s?3_VfF~%1IbWvzO-oG#6-V}fa4C+#avneMXfZ;r z-Yoz-tfK{&KT0MoM=)7n2|5jI0wKE|Pk&J(tzoP_%6=w(kw>nj)KwL&8v;l-2kaNMp!2 z>A1%2J9FIE>C|3SKmF&reS`qN`}|zK>9_~9 zu49;-Hycp^$;G!U=TSv>RE&RuM6ulMzdnN*9Bw}Hcy~F6J+|t?(vV7QbLdQR9MMQJ zf-how&_4X3U`3CGW4u6^@yR534sb>vXXv4`0xqnGRv9y!eF}WrmaE+%GNY#kg!7ASF-7 z>Lm#{6jtaG)v#Au@dFc)L3EyDm17Ly-;?^HGwr7TEjV`T8Fh<(c=cqxjk*Gc&j2Y|H>aNV?(M&nCf;Ph-)# z*TNkOH$rq?$UqH;@DJ$pAdM}h?0O{eJoJP5US6}FY997ZMP{8RP;hEVftqd*bO$Di4Gf5jTD4F1qc%ZAX-;^ zx8_~o+!jxPvo`Y~qn=La=D|6-<%ioLJ~(7=JlFU&^8Vz!n4PuJYRF>+to#W^$i;sc z44NiSED0dfdT7>+*HdzXbff*5kNsV;^4{5pysS%n$LXsS=YwTjj~Qo{q@Q^YFa;c< z)H?I+2l=w^((3)FOBwg^ukt4RnHx`^psU`gn60AXd<(l%UlR&?pTrjsC|BP}(k(Q7 zsi&+XOPgU`(py)ocbpN3fdBsv6=dA=WMt?3Pl-IVu#Y%Q%&h#eB_f?O0P^petzQT zw=*Vk^0LX0ZtU=@q&k}yz^}~E2RJY9c_=}^jXITH&{SORZTdzQ4gnFOVsw*zGYIM) zI{a_;r;)xZbbb}fDX5@Q>6E=SWQ9MKhi{=pQT6BxJ3<O# z>4a`&fdJ>{Hbp}4zrRa@zt=J0J5Coh13{TO6Ffj0o*14MoGg1hUi?2GCc!b}p~=^b zB4&c|_kd0QGa8&utpQmVt8s+p==^g8o?)Q)Z{5aE9-eDf<_Vb9IecToT9mnK$lvYm z!Z1+#0@n&wk0zd5e1zVqdSRc z|H_nz7z<6Sl`qx|j|;ZPRbxx1_PQ?+&TD4qHz!(iba@YG8W`g+>JSRXgiDL8hiJS zG@yqXcVyOtw#?=R#sd-P6K-B1z!*9tPh>Kueg<`-Q!exXRZG(nC3UxqGl>4gy^C}- zK7m|wS{RWmjqfsrk zT`$@de)|Y;oo6yWhL2ot<_Hju2q}Kj3JYA!$-kz)ip2-=+fk28aJ>i;o|Q-lXcHwI zO+glq-#Hn=sV>&0&TCj&6&&Ixc!}857G90(4AFrFaGj=u{qZ<}ejnUj=D9>bT>L__ zE@vw{;F*8p7{C*o*q_zfMQ@m9)MPXt>3?w$qhIWH!j{MtheQp*7aII|le2 zA49G-tKjmf+{>Q$BTadK{q$s0AKd3%iVTO7gU*e3NinTP_EGke_DS(K7@J4VIj5a} z)K5~~^GHI$Y+;!N;<3=%TKA2SxAZ;m<8A2TV#ef5rQsdBss)kx%e$ z&)JdF)YtoDR%WGT?8v=DbOn zI(G!yzwr97!o0 z!UW+t5&{c7oU35v8y==36VYuVY~}Djb1p;L?$wl8fDCUQ;rDbD%nD&m2Tq^L!#V%? zuoFipnT;-O#>ZS_O0`d5FB2lO9W7LumYEG9D3k;TRfaya`itMtM++%VE64iSV#Jvv z?6c4pCht5pY^iiUnj^mSp_M(#=|@h=kcZS?rlbV_$f;s=%G6TJWjf;6rwnzGHmjJg z35GHK1c4q{*tNL7Yq84Q3USq{tb}S+^u0O4?BPk{oaC7PjLWbOYDX%_&^%rXc zQ8<|C*b(h^lVc25N4`T?Q)QcqqyG}iif@ILvtbdQ5eR~gW$xf6Q;)_z?Tg_Vj4dzd zR?t#opv%w0O=zr4#dgkI?j>T-8=~s7ztdA(sdqou#`9h>e&%}h_7N~YCwSSZ4f^>H ztY6@CuN8nV9WBV9ec62ha%GU);x$e)_hQL^=7Uv}Otjht%R<=^4eOVVX!G3y$K{}d zTHQPaZ#xNkO{q<*K6k`di*!J)_YeSLPJ5*4H4Leyi7p-GUeXZt+70O*q@m z9>tbRf!+1A6;yy0(;J&ll5rZ1xj(Nil` Iefa$U0HtBjaR2}S literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-deployed.png b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-deployed.png new file mode 100644 index 0000000000000000000000000000000000000000..29c3b606b1e6a320249c33311f33dd23994ca653 GIT binary patch literal 24842 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/index.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/index.mdx new file mode 100644 index 0000000000..b0b4a564ae --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/101-traditional/index.mdx @@ -0,0 +1,16 @@ +--- +title: 'Traditional servers' +metaTitle: 'Deploy Prisma ORM apps to traditional (PaaS) servers' +metaDescription: 'Learn how to deploy your Prisma-backed apps to PaaS providers like Heroku, Koyeb, or AWS EC2' +tocDepth: 2 +--- + + + +If your application is deployed via a Platform-as-a-Service (PaaS) provider, whether containerized or not, it is a traditionally-deployed app. Common deployment examples include [Heroku](/orm/prisma-client/deployment/traditional/deploy-to-heroku) and [Koyeb](/orm/prisma-client/deployment/traditional/deploy-to-koyeb). + + + +## Traditional (PaaS) guides + + diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/150-deploy-to-azure-functions.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/150-deploy-to-azure-functions.mdx new file mode 100644 index 0000000000..ca6fe64377 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/150-deploy-to-azure-functions.mdx @@ -0,0 +1,37 @@ +--- +title: 'Deploy to Azure Functions' +metaTitle: 'How to deploy an app using Prisma ORM to Azure Functions' +metaDescription: 'Learn how to deploy a Prisma Client based REST API to Azure Functions and connect to an Azure SQL database' +--- + +This guide explains how to avoid common issues when deploying a Node.js-based function app to Azure using [Azure Functions](https://azure.microsoft.com/en-us/products/functions/). + +Azure Functions is a serverless deployment platform. You do not need to maintain infrastructure to deploy your code. With Azure Functions, the fundamental building block is the [function app](https://learn.microsoft.com/en-us/azure/azure-functions/functions-reference?tabs=blob&pivots=programming-language-typescript). A function app provides an execution context in Azure in which your functions run. It is comprised of one or more individual functions that Azure manages, deploys, and scales together. You can organize and collectively manage multiple functions as a single logical unit. + +## Prerequisites + +- An existing function app project with Prisma ORM + +## Things to know + +While Prisma ORM works well with Azure functions, there are a few things to take note of before deploying your application. + +### Define multiple binary targets + +When deploying a function app, the operating system that Azure functions runs a remote build is different from the one used to host your functions. Therefore, we recommend specifying the following [`binaryTargets` options](/orm/reference/prisma-schema-reference#binarytargets-options) in your Prisma schema: + +```prisma file=schema.prisma highlight=3;normal showLineNumbers +generator client { + provider = "prisma-client-js" + //highlight-next-line + binaryTargets = ["native", "debian-openssl-1.1.x"] +} +``` + +### Connection pooling + +Generally, when you use a FaaS (Function as a Service) environment to interact with a database, every function invocation can result in a new connection to the database. This is not a problem with a constantly running Node.js server. Therefore, it is beneficial to pool DB connections to get better performance. To solve this issue, you can use the [Prisma Accelerate](/accelerate). For other solutions, see the [connection management guide for serverless environments](/orm/prisma-client/setup-and-configuration/databases-connections#serverless-environments-faas). + +## Summary + +For more insight into Prisma Client's API, explore the function handlers and check out the [Prisma Client API Reference](/orm/reference/prisma-client-reference) diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/300-deploy-to-vercel.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/300-deploy-to-vercel.mdx new file mode 100644 index 0000000000..e6b195b101 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/300-deploy-to-vercel.mdx @@ -0,0 +1,107 @@ +--- +title: 'Deploy to Vercel' +metaTitle: 'Deploy to Vercel' +metaDescription: 'Learn how to deploy a Next.js application based on Prisma Client to Vercel.' +--- + + + +This guide takes you through the steps to set up and deploy a serverless application that uses Prisma to [Vercel](https://vercel.com/). + +Vercel is a cloud platform that hosts static sites, serverless, and edge functions. You can integrate a Vercel project with a GitHub repository to allow you to deploy automatically when you make new commits. + +We created an [example application](https://github.com/prisma/deployment-example-vercel) using Next.js you can use as a reference when deploying an application using Prisma to Vercel. + +While our examples use Next.js, you can deploy other applications to Vercel. See [Using Express with Vercel](https://vercel.com/guides/using-express-with-vercel) and [Nuxt on Vercel](https://vercel.com/docs/frameworks/nuxt) as examples of other options. + + + +## Build configuration + +### Updating Prisma Client during Vercel builds + +Vercel will automatically cache dependencies on deployment. For most applications, this will not cause any issues. However, for Prisma ORM, it may result in an outdated version of Prisma Client on a change in your Prisma schema. To avoid this issue, add `prisma generate` to the `postinstall` script of your application: + +```json file=package.json showLineNumbers +{ + ... + "scripts" { + //add-next-line + "postinstall": "prisma generate" + } + ... +} +``` + +This will re-generate Prisma Client at build time so that your deployment always has an up-to-date client. + + + +If you see `prisma: command not found` errors during your deployment to Vercel, you are missing `prisma` in your dependencies. By default, `prisma` is a dev dependency and may need to be moved to be a standard dependency. + + + +Another option to avoid an outdated Prisma Client is to use [a custom output path](/orm/prisma-client/setup-and-configuration/generating-prisma-client#using-a-custom-output-path) and check your client into version control. This way each deployment is guaranteed to include the correct Prisma Client. + +```prisma file=schema.prisma showLineNumbers +generator client { + provider = "prisma-client-js" + //add-next-line + output = "./generated/client" +} +``` + +### CI/CD workflows + +In a more sophisticated CI/CD environment, you may additonally want to update the database schema with any migrations you have performed during local development. You can do this using the [`prisma migrate deploy`](/orm/reference/prisma-cli-reference#migrate-deploy) command. + +In that case, you could create a custom build command in your `package.json` (e.g. called `vercel-build`) that looks as follows: + +```json file=package.json +{ + ... + "scripts" { + //add-next-line + "vercel-build": "prisma generate && prisma migrate deploy && next build", + } + ... +} +``` + +You can invoke this script inside your CI/CD pipeline using the following command: + +```terminal +npm run vercel-build +``` + +## Add a separate database for preview deployments + +By default, your application will have a single _production_ environment associated with the `main` git branch of your repository. If you open a pull request to change your application, Vercel creates a new _preview_ environment. + +Vercel uses the `DATABASE_URL` environment variable you define when you import the project for both the production and preview environments. This causes problems if you create a pull request with a database schema migration because the pull request will change the schema of the production database. + +To prevent this, use a _second_ hosted database to handle preview deployments. Once you have that connection string, you can add a `DATABASE_URL` for your preview environment using the Vercel dashboard: + +1. Click the **Settings** tab of your Vercel project. + +2. Click **Environment variables**. + +3. Add an environment variable with a key of `DATABASE_URL` and select only the **Preview** environment option: + + ![Add an environment variable for the preview environment](./images/300-60-deploy-to-vercel-preview-environment-variable.png) + +4. Set the value to the connection string of your second database: + + ```code + postgresql://dbUsername:dbPassword@myhost:5432/mydb + ``` + +5. Click **Save**. + +## Connection pooling + +When you use a Function-as-a-Service provider, like Vercel Serverless functions, every invocation may result in a new connection to your database. This can cause your database to quickly run out of open connections and cause your application to stall. For this reason, pooling connections to your database is essential. + +You can use [Accelerate](/accelerate) for connection pooling, to reduce your Prisma Client bundle size, and to avoid cold starts. + +For more information on connection management for serverless environments, refer to our [connection management guide](/orm/prisma-client/setup-and-configuration/databases-connections#serverless-environments-faas). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/400-deploy-to-aws-lambda.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/400-deploy-to-aws-lambda.mdx new file mode 100644 index 0000000000..ae2dcd0b74 --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/400-deploy-to-aws-lambda.mdx @@ -0,0 +1,337 @@ +--- +title: 'Deploy to AWS Lambda' +metaTitle: 'Deploy your application using Prisma ORM to AWS Lambda' +metaDescription: 'Learn how to deploy your Prisma ORM-backed applications to AWS Lambda with AWS SAM, Serverless Framework, or SST' +tocDepth: 3 +--- + + + +This guide explains how to avoid common issues when deploying a project using Prisma ORM to [AWS Lambda](https://aws.amazon.com/lambda/). + +While a deployment framework is not required to deploy to AWS Lambda, this guide covers deploying with: + +- [AWS Serverless Application Model (SAM)](https://aws.amazon.com/serverless/sam/) is an open-source framework from AWS that can be used in the creation of serverless applications. AWS SAM includes the [AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-reference.html#serverless-sam-cli), which you can use to build, test, and deploy your application. +- [Serverless Framework](https://www.serverless.com/framework) provides a CLI that helps with workflow automation and AWS resource provisioning. While Prisma ORM works well with the Serverless Framework "out of the box", there are a few improvements that can be made within your project to ensure a smooth deployment and performance. There is also additional configuration that is needed if you are using the [`serverless-webpack`](https://www.npmjs.com/package/serverless-webpack) or [`serverless-bundle`](https://www.npmjs.com/package/serverless-bundle) libraries. +- [SST](https://sst.dev/) provides tools that make it easy for developers to define, test, debug, and deploy their applications. Prisma ORM works well with SST but must be configured so that your schema is correctly packaged by SST. + + + +## General considerations when deploying to AWS Lambda + +This section covers changes you will need to make to your application, regardless of framework. After following these steps, follow the steps for your framework. + +- [Deploying with AWS SAM](#deploying-with-aws-sam) +- [Deploying with the Serverless Framework](#deploying-with-the-serverless-framework) +- [Deploying with SST](#deploying-with-sst) + +### Define binary targets in Prisma Schema + +Depending on the version of Node.js, your Prisma schema should contain either `rhel-openssl-1.0.x` or `rhel-openssl-3.0.x` in the `generator` block: + + + + + +```prisma +binaryTargets = ["native", "rhel-openssl-1.0.x"] +``` + + + + +```prisma +binaryTargets = ["native", "rhel-openssl-3.0.x"] +``` + + + + + +This is necessary because the runtimes used in development and deployment differ. Add the [`binaryTarget`](/orm/reference/prisma-schema-reference#binarytargets-options) to make the compatible Prisma ORM engine file available. + +#### Lambda functions with arm64 architectures + +Lambda functions that use [arm64 architectures (AWS Graviton2 processor)](https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html#foundation-arch-adv) must use an `arm64` precompiled engine file. + +In the `generator` block of your `schema.prisma` file, add the following: + +```prisma file=schema.prisma showLineNumbers +binaryTargets = ["native", "linux-arm64-openssl-1.0.x"] +``` + +### Prisma CLI binary targets + +While we do not recommend running migrations within AWS Lambda, some applications will require it. In these cases, you can use the [PRISMA_CLI_BINARY_TARGETS](/orm/reference/environment-variables-reference#prisma_cli_binary_targets) environment variable to make sure that Prisma CLI commands, including `prisma migrate`, have access to the correct schema engine. + +In the case of AWS lambda, you will have to add the following environment variable: + +```env file=.env showLineNumbers +PRISMA_CLI_BINARY_TARGETS=native,rhel-openssl-1.0.x +``` + + + +`prisma migrate` is a command in the `prisma` package. Normally, this package is installed as a dev dependency. Depending on your setup, you may need to install this package as a dependency instead so that it is included in the bundle or archive that is uploaded to Lambda and executed. + + + +### Connection pooling + +Generally, when you use a Function as a Service (FaaS) environment to interact with a database, every function invocation can result in a new connection to the database. This is not a problem with a constantly running Node.js server. Therefore, it is beneficial to pool database connections to get better performance. You can use [Accelerate](/accelerate) to solve this issue. For other solutions, see the [connection management guide for serverless environments](/orm/prisma-client/setup-and-configuration/databases-connections#serverless-environments-faas). + +## Deploying with AWS SAM + +### Loading environment variables + +AWS SAM does not directly support loading values from a `.env` file. You will have to use one of AWS's services to store and retrieve these parameters. [This guide](https://medium.com/bip-xtech/a-practical-guide-to-surviving-aws-sam-d8ab141b3d25) provides a great overview of your options and how to store and retrieve values in Parameters, SSM, Secrets Manager, and more. + +### Loading required files + +AWS SAM uses [esbuild](https://esbuild.github.io/) to bundle your TypeScript code. However, the full esbuild API is not exposed and esbuild plugins are not supported. This leads to problems when using Prisma ORM in your application as certain files (like `schema.prisma`) must be available at runtime. + +To get around this, you need to directly reference the needed files in your code to bundle them correctly. In your application, you could add the following lines to your application where Prisma ORM is instantiated. + +```ts file=app.ts showLineNumbers +import schema from './prisma/schema.prisma' +import x from './node_modules/.prisma/client/libquery_engine-rhel-openssl-1.0.x.so.node' + +if (process.env.NODE_ENV !== 'production') { + console.debug(schema, x) +} +``` + +## Deploying with the Serverless Framework + +### Loading environment variables via a `.env` file + +Your functions will need the `DATABASE_URL` environment variable to access the database. The `serverless-dotenv-plugin` will allow you to use your `.env` file in your deployments. + +First, make sure that the plugin is installed: + +```terminal +npm install -D serverless-dotenv-plugin +``` + +Then, add `serverless-dotenv-plugin` to your list of plugins in `serverless.yml`: + +```code file=serverless.yml no-copy showLineNumbers +plugins: + - serverless-dotenv-plugin +``` + +The environment variables in your `.env` file will now be automatically loaded on package or deployment. + + + + +```terminal +serverless package +``` + + + + +```terminal no-copy +Running "serverless" from node_modules +DOTENV: Loading environment variables from .env: + - DATABASE_URL + +Packaging deployment-example-sls for stage dev (us-east-1) +. +. +. +``` + + + + +### Deploy only the required files + +To reduce your deployment footprint, you can update your deployment process to only upload the files your application needs. The Serverless configuration file, `serverless.yml`, below shows a `package` pattern that includes only the Prisma ORM engine file relevant to the Lambda runtime and excludes the others. This means that when Serverless Framework packages your app for upload, it includes only one engine file. This ensures the packaged archive is as small as possible. + +```code file=serverless.yml no-copy showLineNumbers +package: + patterns: + - '!node_modules/.prisma/client/libquery_engine-*' + - 'node_modules/.prisma/client/libquery_engine-rhel-*' + - '!node_modules/prisma/libquery_engine-*' + - '!node_modules/@prisma/engines/**' + - '!node_modules/.cache/prisma/**' # only required for Windows +``` + +If you are deploying to [Lambda functions with ARM64 architecture](#lambda-functions-with-arm64-architectures) you should update the Serverless configuration file to package the `arm64` engine file, as follows: + +```code file=serverless.yml highlight=4;normal showLineNumbers +package: + patterns: + - '!node_modules/.prisma/client/libquery_engine-*' + //highlight-next-line + - 'node_modules/.prisma/client/libquery_engine-linux-arm64-*' + - '!node_modules/prisma/libquery_engine-*' + - '!node_modules/@prisma/engines/**' +``` + +If you use `serverless-webpack`, see [Deployment with serverless webpack](#deployment-with-serverless-webpack) below. + +### Deployment with `serverless-webpack` + +If you use `serverless-webpack`, you will need additional configuration so that your `schema.prisma` is properly bundled. You will need to: + +1. Copy your `schema.prisma` with [`copy-webpack-plugin`](https://www.npmjs.com/package/copy-webpack-plugin). +2. Run `prisma generate` via `custom > webpack > packagerOptions > scripts` in your `serverless.yml`. +3. Only package the correct Prisma ORM engine file to save more than 40mb of capacity. + +#### 1. Install webpack specific dependencies + +First, ensure the following webpack dependencies are installed: + +```terminal +npm install --save-dev webpack webpack-node-externals copy-webpack-plugin serverless-webpack +``` + +#### 2. Update `webpack.config.js` + +In your `webpack.config.js`, make sure that you set `externals` to `nodeExternals()` like the following: + +```javascript file=webpack.config.js highlight=1,5;normal; showLineNumbers +const nodeExternals = require('webpack-node-externals') + +module.exports = { + // ... other configuration + //highlight-next-line + externals: [nodeExternals()], + // ... other configuration +} +``` + +Update the `plugins` property in your `webpack.config.js` file to include the `copy-webpack-plugin`: + +```javascript file=webpack.config.js highlight=2,7-13;normal; showLineNumbers +const nodeExternals = require('webpack-node-externals') +//highlight-next-line +const CopyPlugin = require('copy-webpack-plugin') + +module.exports = { + // ... other configuration + externals: [nodeExternals()], + //highlight-start + plugins: [ + new CopyPlugin({ + patterns: [ + { from: './node_modules/.prisma/client/schema.prisma', to: './' }, // you may need to change `to` here. + ], + }), + ], + //highlight-end + // ... other configuration +} +``` + +This plugin will allow you to copy your `schema.prisma` file into your bundled code. Prisma ORM requires that your `schema.prisma` be present in order make sure that queries are encoded and decoded according to your schema. In most cases, bundlers will not include this file by default and will cause your application to fail to run. + + + +Depending on how your application is bundled, you may need to copy the schema to a location other than `./`. Use the `serverless package` command to package your code locally so you can review where your schema should be put. + + + +Refer to the [Serverless Webpack documentation](https://www.serverless.com/plugins/serverless-webpack) for additional configuration. + +#### 3. Update `serverless.yml` + +In your `serverless.yml` file, make sure that the `custom > webpack` block has `prisma generate` under `packagerOptions > scripts` as follows: + +```yaml file=serverless.yml showLineNumbers +custom: + webpack: + packagerOptions: + scripts: + - prisma generate +``` + +This will ensure that, after webpack bundles your code, the Prisma Client is generated according to your schema. Without this step, your app will fail to run. + +Lastly, you will want to exclude [Prisma ORM query engines](/orm/more/under-the-hood/engines) that do not match the AWS Lambda runtime. Update your `serverless.yml` by adding the following script that makes sure only the required query engine, `rhel-openssl-1.0.x`, is included in the final packaged archive. + +```yaml file=serverless.yml highlight=6;add showLineNumbers +custom: + webpack: + packagerOptions: + scripts: + - prisma generate + //add-next-line + -- find . -name "libquery_engine-*" -not -name "libquery_engine-rhel-openssl-*" | xargs rm +``` + +If you are deploying to [Lambda functions with ARM64 architecture](#lambda-functions-with-arm64-architectures) you should update the `find` command to the following: + +```yaml file=serverless.yml highlight=6;add showLineNumbers +custom: + webpack: + packagerOptions: + scripts: + - prisma generate + //add-next-line + -- find . -name "libquery_engine-*" -not -name "libquery_engine-arm64-openssl-*" | xargs rm +``` + +#### 4. Wrapping up + +You can now re-package and re-deploy your application. To do so, run `serverless deploy`. Webpack output will show the schema being moved with `copy-webpack-plugin`: + + + + +```terminal +serverless package +``` + + + + +```terminal no-copy +Running "serverless" from node_modules +DOTENV: Loading environment variables from .env: + - DATABASE_URL + +Packaging deployment-example-sls for stage dev (us-east-1) + +asset handlers/posts.js 713 bytes [emitted] [minimized] (name: handlers/posts) + asset schema.prisma 293 bytes [emitted] [from: node_modules/.prisma/client/schema.prisma] [copied] + ./handlers/posts.ts 745 bytes [built] [code generated] + external "@prisma/client" 42 bytes [built] [code generated] + webpack 5.88.2 compiled successfully in 685 ms +Package lock found - Using locked versions +Packing external modules: @prisma/client@^5.1.1 + +✔ Service packaged (5s) +``` + + + + +## Deploying with SST + +### Working with environment variables + +While SST supports `.env` files, [it is not recommended](https://v2.sst.dev/config#should-i-use-configsecret-or-env-for-secrets). SST recommends using `Config` to access these environment variables in a secure way. + +The SST guide [available here](https://v2.sst.dev/config#overview) is a step-by-step guide to get started with `Config`. Assuming you have created a new secret called `DATABASE_URL` and have [bound that secret to your app](https://v2.sst.dev/config#bind-the-config), you can set up `PrismaClient` with the following: + +```ts file=prisma.ts showLineNumbers +import { PrismaClient } from '@prisma/client' +import { Config } from 'sst/node/config' + +const globalForPrisma = global as unknown as { prisma: PrismaClient } + +export const prisma = + globalForPrisma.prisma || + new PrismaClient({ + datasourceUrl: Config.DATABASE_URL, + }) + +if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma + +export default prisma +``` diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/500-deploy-to-netlify.mdx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/500-deploy-to-netlify.mdx new file mode 100644 index 0000000000..2076bf4b0a --- /dev/null +++ b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/500-deploy-to-netlify.mdx @@ -0,0 +1,110 @@ +--- +title: 'Deploy to Netlify' +metaTitle: 'Deploy to Netlify' +metaDescription: 'Learn how to deploy Node.js and TypeScript applications that are using Prisma Client to Netlify.' +--- + +This guide covers the steps you will need to take in order to deploy your application that uses Prisma ORM to [Netlify](https://www.netlify.com/). + +Netlify is a cloud platform for continuous deployment, static sites, and serverless functions. Netlify integrates seamlessly with GitHub for automatic deployments upon commits. When you follow the steps below, you will use that approach to create a CI/CD pipeline that deploys your application from a GitHub repository. + +## Prerequisites + +Before you can follow this guide, you will need to set up your application to begin deploying to Netlify. We recommend the ["Get started with Netlify"](https://docs.netlify.com/get-started/) guide for a quick overview and ["Deploy functions"](https://docs.netlify.com/functions/deploy/?fn-language=ts) for an in-depth look at your deployment options. + +## Binary targets in `schema.prisma` + +Since your code is being deployed to Netlify's environment, which isn't necessarily the same as your development environment, you will need to set [`binaryTargets`](/orm/reference/prisma-schema-reference#binarytargets-options) in order to download the query engine that is compatible with the Netlify runtime during your build step. If you do not set this option, your deployed code will have an incorrect query engine deployed with it and will not function. + +Depending on the version of Node.js, your Prisma schema should contain either `rhel-openssl-1.0.x` or `rhel-openssl-3.0.x` in the `generator` block: + + + + + +```prisma +binaryTargets = ["native", "rhel-openssl-1.0.x"] +``` + + + + +```prisma +binaryTargets = ["native", "rhel-openssl-3.0.x"] +``` + + + + + +## Store environment variables in Netlify + +We recommend keeping `.env` files in your `.gitignore` in order to prevent leakage of sensitives connection strings. Instead, you can use the Netlify CLI to [import values into netlify directly](https://docs.netlify.com/environment-variables/get-started/#import-variables-with-the-netlify-cli). + + +Assuming you have a file like the following: + +```bash file=.env +# Connect to DB +DATABASE_URL="postgresql://postgres:__PASSWORD__@__HOST__:__PORT__/__DB_NAME__" +``` + +You can upload the file as environment variables using the `env:import` command: + + + + +```terminal no-break-terminal +netlify env:import .env +``` + + + + +```no-break-terminal +site: my-very-very-cool-site +---------------------------------------------------------------------------------. + Imported environment variables | +---------------------------------------------------------------------------------| + Key | Value | +--------------|------------------------------------------------------------------| + DATABASE_URL | postgresql://postgres:__PASSWORD__@__HOST__:__PORT__/__DB_NAME__ | +---------------------------------------------------------------------------------' +``` + + + + +

+If you are not using an `.env` file + +If you are storing your database connection string and other environment variables in a different method, you will need to manually upload your environment variables to Netlify. These options are [discussed in Netlfiy's documentation](https://docs.netlify.com/environment-variables/get-started/) and one method, uploading via the UI, is described below. + +1. Open the Netlify admin UI for the site. You can use Netlify CLI as follows: + ```terminal + netlify open --admin + ``` +2. Click **Site settings**: + ![Netlify admin UI](./images/500-06-deploy-to-netlify-site-settings.png) +3. Navigate to **Build & deploy** in the sidebar on the left and select **Environment**. +4. Click **Edit variables** and create a variable with the key `DATABASE_URL` and set its value to your database connection string. + ![Netlify environment variables](./images/500-07-deploy-to-netlify-environment-variables-settings.png) +5. Click **Save**. + +
+ +Now start a new Netlify build and deployment so that the new build can use the newly uploaded environment variables. + +```terminal +netlify deploy +``` + +You can now test the deployed application. + +## Connection pooling + +When you use a Function-as-a-Service provider, like Netlify, it is beneficial to pool database connections for performance reasons. This is because every function invocation may result in a new connection to your database which can quickly run out of open connections. + +You can use [Accelerate](/accelerate) for connection pooling, to reduce your Prisma Client bundle size, and to avoid cold starts. + +For more information on connection management for serverless environments, refer to our [connection management guide](/orm/prisma-client/setup-and-configuration/databases-connections#serverless-environments-faas). diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-00-deploy-to-vercel-architecture.png b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-00-deploy-to-vercel-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..87cab2d012cee576e3213e3c67498fd9f8c53dc5 GIT binary patch literal 122195 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

)!?` z$bn0@eslg-*3n_{RTzXgMy#OHZjF{gDAqFe(vMnEjjX0T$RmC}$5z7SDNg-xtCpZL zFua(J>hj;IH_c+eJAtpmfNE@h+6DR?{}>LC5q{FV|_=^8+_1v_U^thd=UGwrEnSJQ8h!DD`$I9vVV;yA0MQ zI-1KhpF5*X_k_;)90S>d*BTJ9(Qjg-c$qV2uTSm4=hbg#NTx~(zx{se?XS(ChAh=@ z-&0eC=QGs*9Q?UI_*6we#!}?kmxn@DKkqgAYI^pHo_tFI$*l|R5Qv6Gm(87Z64FZ3 zS5aXiKeNpt9mu6$=!A<;zIqyy$@B0%7~k>9a_%fjZp+Wler*i|_s}9Fa!H73iW9K< ze|~y8uPMqO?5x&B+Ok<$MTMQc`9*|5Z*t@o2S-UV2lo3-5(RCV?cG0S-*}6Ju&hoJ zFRW-mpw;m@{L}wkMGaWxB9q`2?CaxXuaF})N=mZul^o7xigN5Ga&|2;B8-Pmr-pmJ z16o)79+mTr>b%28O)OU}`5Drosn(ZFb>=553<-(cB~PkzWK!pVujTZA}&)a%N_;4j9XrH2dH6 zJgCSs@B95>8+sNJ%0#&&qEM3a2rLB=Fl>^q=7hlzM<4GPR=|p90j}`63XG2CEcun0 zjNo=9(5bw)Xxkw@Q=g;ZwtM8v63y9=oa|2&<>P*X9#{nq`AaZZxw2+=5@Rd_sa5aD z$ZpBY6FQfK`+kN2%K8d1G3M_dn(eI4vIP#~jd0COxjW{8 zM3jH?d;d=K8d-L5=eKV){Yobjr6eS`UfA&1x55}xD$Pi#en4J%M;IyEymkIwlDup; zOaD8&&~;!pspgGg$3r2Kf_nS}G^K{(ZzBZAFcL(W1|6&(YdugkLY^Vl1o6DbpPcrZq&B^}GI{*sKkcbLn zVP%C|`;jw09}imrZ00>&V8BlpS`Kif;b1dfCfRt|LFWhuLBC03Z@(VWI`ne zSZ{T9SOrV!#}1Vj;klRf#J_i>XjLG)XxYufNsLN-m1xKTn>+DHdBBz0drave8maa+dNG&J9x@|h6bi;C3DcI^{3M@cZ~&zxc^7hTgOG+J@3P)gwiOnbg4*# zlys>eC?yC;N{4`SE+{SCUDDklOGz%h^wNk6EWMH|Eb)7Ddw-tq{p_E$*F)Z`u8J~0Q`R(931z$i`!$|it@6+N<0gM4u_Q>IO>|YJ8S|+=7?{l zIhC?B#I^23Cix(~-)rmZOM5K;6Zm6cv3w%L;nr*1)gZGr-NFHRbmn|o^53SVF~98O zI2(`f@uwx9zH@RMMt6|-&fSFwKY~2ZmXz;j1CMU)n#O+)i8R>sNq;eKXusQxJ{AN= zw*}`+$#$&-?R4*>nkLC~w8h#0F5m+0+NB?)UON2u%HECYydkdPy0*7)-|_V`;Mckn z*jQO55QT7z+=)5HR&TcxstGhy8cIcPfS7T&>CGl%MTo zPj7Z$`fwL>bBbA&*~7!}Z$da&-H1#wKzw}E*-I$L|Lp%Buz%r{+%%6^?6_*M?g)U$ z8}-yo^L*m89>GTj*@|V=+thf=M-#gaH(PGb4L4!tk#ds9e}4VvA!c&3DWkCdcQfyR zWzV(XP-su}uQf>BrXinJJ~0Xy_tbt3-1o9a7Sqc>J#3VmEx z2pnMlGIw!F$t$<>()Hw{P0Hu$ZMu_iq_U@$odTRmQZ*CUK9EktPM6t#OaN33EMabL zuBj&DHsLT}&VVgHyX!(wT4Ed1yP#yg8OYT|O+Fodl8$p$+mzEsxPt@1-8xeOcJh|4 zu5O3h|LunH4@W|rwu{4|Efx)^2EI%a6A=izFBAuYv&UN=i=jf24d)aaR)({!4-PI- zXlSp<0AI2?MV-C(_CHq)q}CPeA0dVS<~N|~f`L^%(FDGT$)~zXjtAVUzz3*zau^J@ zi=a(*QoUI+T{&X|}92aTV@)0mug;5^}4gXqa zj*%0vn2Cu)4%={)~qyRfj12|mcnzRVn-pNFIrkO5ci8*s}5WWA5d)+)~; z$nuKKDvptL>um<>8hY+F89F)t?CdNxJn+SN-RB|E|8qHU8KzA+z=~FCxNegY;!kt; zOTGMf<8GGg^>2Pn&q+^<)ByWENtM?yJAYZM@?*MNSk*9NoMQRhF!vr#;XMJa& z$4k(ZIPlX^H<0H^DallYv$I)pRhXj*mPzfWRk^DFL>I7JKAFjm&N&u+r~zwvJE8q4gWwfiy!QzCpSgfg$CocJ~VZAHWSoKIyPIIA-wf%P08R~H&;2djw7 z9$^7JR|l6^*zv@MZJ);=dhP=L82U$dHTpm17E=%GE-FuJ z{OlpsF9?O!nz;^M9}H+s9<5`l)(3)k#ZVm%lIf3F*^p^X*UN(0`I6a7yr=T>Js*!w zHg_P$6xoECF(U`#@+V_)bfP-_&-k%wCTqI?V_6R$0cQiW4qc=a5M!wT7@;#~qEsxk zy(T5+MTF}}gpcR7Or9WvZG0DmGWC1qAV0bDS(#_;=8@OYX?C*Ukb$yN+%H%C-yf3* z{g@SAf(kwq>7cIDdmq)-{V6_!2(K|D(IUy6e2&!&t_xKg*IkHl=b&H72!RVLM#cJX z85jU>VzDnnCA(J{_>_wldIFj)il-C`uo_1+LI77I>*AfGW2u8^Q$zoqE3 z(^9%8HaCQt&_qzX4ZE;OM=Mn;^+k2_|181 zvy&|RSAJ6IF)u^{WWW4?y=BzwKSR{vzUJ!}?`0$5;!XU@s6CJw9=_g1wIwwjf6_mp zKfqPGFQ~#rN(jW<&v&z_-hKbib*ggSrPO@)&P{rV1}o#Qb2e7<)T(H0u8H~l0{9mj zgVPVqPF}wH{<6r(p@dFE9H2O_1Yte~)w=Lz66*Sd<27V9_}tDw#Jc5oC%U}qEK=2Wy@hwOt&~&9QLAz-`CY2P zk8(uM?amwkRslgTV{L8iV&cD+tvRbUww`QsWyBH(y^jkxshl4mes8|w_IAT}sEU|X zUb6?4q4L0N3Cz01U4@pP#fNlx%-NIO_7EChV->StIS;79tEw zzCUf}-)t@yJUSdX-4~nZ--zxr)fUX$yh{R*iu1sb(#ckqv+|#zXK1KuMnaSOOln@s zu`hgtCq{I^_EE>F2ec+H`bga^et1QTO*&m~cF#B_ib^jV;Wv`zKEV{XA21z4GXhVt zZl&Ba$zKXK)HgDBqxv-)*2bX!D<1H$7PBxK!rJHuby3vVpGgmoEeVsI|1S^jc{QsR zqizZOj*s_ksj#|&{BQOLz>_yI&Ds(OV`8Z-1%bvleuJc4j{`V#URz?JS2+XG!6wHj zz{2~6`$g`ET6``#$uE}}d!nrZL;X2-t-~L-YiM-PX}Jwd`uqXs%}QVukgC|bOR~pl zo5Tj!?2nT?*>E1G3zdTFA*o!w=&L?fZf!2+t!C(;1K#p&-a^BW4O$2kKw${9_^oShQGN{no*cebTYM>^pje1ar7XW}$ru&!F-Mv7<{_p4hsAJ$P zFhkKrXowOE0(8J|SH=~sTwekb(R2G%K zP%XXO%{e&C^ZcK{a;fsESXunyB`l>y6Sv4<5iKK2P__Ct6VPdGjg4z<|w})c9VW|Np>`oTwYY{n!yM zU98YYpc@FB`Qmh4djL#u54Tqw1o#4l<=OY9ZddArxmkkWajt+xMb>r{ z&G^vulFmvwxsgS)tU{S|TP8-MP;>k$Rz z7p#Ja2C#4QE29Pbmz0&da09Y*_1K}Rf4XVJcwTo)C`9AI`4Kx`$jpgG?4DkA530bn zx~QCoN!4r@N=!{G$JLwH_j0SNSYtbL98~+`w53a83r+1B5t_sBx8p8yNhrIR1uDvP z*rh~N84tX*qCi9UttDo5CdpNR%{%ovEy`K%$rmhT1=tH=nIp7SY+|FojY3Ep^jv_tdx1}KScb87NgEzT=h zTN4rE(mOuc!#}pvgEDc`>k7NRZScJQOo5?YKh!?*dIZY9L07ufWq@q{{V>uucQ1d| znO%%!Z;OQE(It+Uj%!1fQ6}42!L-FDZ<;Z{K4Xyy?!XxS0~blPqgZ?9=jS)7U*2L$ zGLFH$EeOiF^#xG+iHBM7ZFYkxoW{fF0y*xJ5>7x4Pb35q9&8@Iofw-S%c;Q&$THOX z;5NqZpuNJvXeK-mw{-GBx#c&&e#jO%YPfT8BuN%@o{e`y7ly0V=8xvu?h{VX2=nXh z>%Hed?Up3JY45Jh+bkBPe4~)t(1>EXY%yxp>ZzITJ@1bDD5|4ojT<0%K?Pzf{3Zif zH$=|w^wWPJ@^?o%=Ej?e$GTZqq;H-8NeBR0CWu+)Ujh9RuC6DC`;|_j4s>6_o&y#w zNcdJ0KC#tSixXN^y+$9qV?hz<^BUZN8{!Fjsd_X}+eT#3uTUpUb60GB zS@cQWuaq3M{#7r9YX#Xn2eKIqhYb>I|LDQNxp>r9Gm7x z*Y5P@TJDyKU0e$i+%2KcK+;}m5pZlt_BX2=qaCGj+|soy@(jBz^vv}*d5%+(m6a6% ztlL?HSm`KqMzmXjc<(FbcIX?WG0#y+oh7l*4rhO zB}86P1{LGd=P$;bFFYn^iuc`5VD|CQEMLP79{tDOr;H{8cx@(Uc(m)CmWBPC&dafj z{&9f-I0pgX+*%>Fb;2g~`{Qhx7ybdV?>juo)EcQ6661*h^sxwpomt0pc?#$n%$8$V zCKA`_xWfx`X$~F!4cpPP86HzN4x9y2nBj5#?fwH{PgC1S>Yr!b-sbf5o@uJ}1Gd>y zDIe%}jwWTszn&h)xN%OzOaO4y6+52CLs%JbR?Gm}kAyl1L$j94sLmFm?jHn@S*g;-?bR@RiHVQGbDyXi6bEwz>mGg z@t5`5x8+l;!T}(bOVAb9FMI~}m;b=)(P0i|6E=6n-)WL z4PEh1RJ?uqv>o*QGBr=(diwKw54!!!(GoDqeyUnkb&*OY0%?=x-n1^(T*xbd{NiJW z0|Ac~L7;l0XRlB1jukzNB25Qq`%h%n;p@q0(RQDjt5(75ObYcC^g^=!xMPPm!Q^C9W-*RLm4;KZ`T;NwX zhs2a4du#7uZfA}>PU2y|_#8He7ZWIduY6<#3+wM(07MHAE_oUh-gn=4W>_BQV1Dh^ zbEw_>_o`{%7>L%$;Y}&@uD3H?XORCSlWFK_Qdrn! z`jujKQE*WE$u2N#f#$eG9GF8!`1K6Q?WwSK8q~W1pUj3O0Z7VKq6(*FyGK$~1dvF3 zPx{mz$^_ImhD04p3-w9O>bhtOgJ9BS6VG_`RKRbp_lrKfELM-*0qCNB$Q=rL;IMAl zfW~MD@m+{&4LPxx@a@h8zJ|x%w4iNT9}wea#&5UvLE01vCLlj&95I@(ygN3l{3DX% z_xDp5-=c9ycbezXzyz4Hd3+bl1v3cy*j$CRXVl8h4$L{TviN{-d)}=+Ud>#KNLhN5 zjPc_lC6GE!wb+WddZy2)spT7wWwk0bdrNiZ>`%RMph#t=64=xN>oe#W(wsKZEPGn2 z$}3nh?B(Pwxs*3Gn>kfd|0=PPV6I^PmE#2uw(zq;ii9f-I~uNJ#c;<9Yo;6cYkn{Y zr@pAMM=J>6o7q{sg_`bcR+bfJZ&SK<@5<>WgP&O~&V4ZTRt2k#^A~Q^?LItxLPI=QDq-QqK_d}`C@s5TEOZ-+^no<{CeZplEv~SuUy)C?Q2XYvW0Rjdkx1UjAn<%fDf$tu-Y_zEP zc}7f=x82Ob#H@=>T6%PB$%;TQrj!f$r^ zY3!t-OSRyU{OpYMCOHv64bk`A#aork9%Q( zNu*6{(*v_WNj?M>4H;Re5}UQU^26Bi__8ZpwL-cGudQ@misP=s8APCg;P;=NTll`` zG_}aUKZ)?|WvlYlFtv9MQAbFZ3yNRNHkIY|-HvYKX?f*a_dOqBOVc-wJiPkyQlKZ# zbokf}&C9t5x+gq3TX~h46h%RM;P0BCquXz+mQ%@p8XqORkmlFpK|iu#cj9WDqSV6N z*3{A23d2d_d8rBC&fF`|Fi-~4I+NYm8id!su^|2~?#Xjqr$d7^-n) zv9~j973M8{;Yr_!S2j8r7`r!)1|cmWlJ2_#(}d#Nr_ z{lIE&d_Z^`awQ4it1&83R|2s-peWs0dDRDuIdtjF!P*luYlAuScJ$SfcmdQ*F;VvZ zwiBOX02Z(yV;R7YWj+@K)jz7!=xbeNeJ$(C`TV%eTFP@To~A@{!iFIr-6v$ds1AQt zx=r(~G*3eAA&meipIJr{d9ug`!e%lA-eX{N!HK>p>j1vvJ{vHz?veShk%gJrMYdHF zT(6S}9Az2BaH+kt#Au|VdTmQTowykko&(R^pkIFd#O$Q0Xki>Th&&oCVF>put1>sc zSOG;Z*fWZNx4lFxhN-XM^hK!fzEcx0Ndu>$JM5bd+LHtrMIDZI)j`{~MwLC!u$9S` z*85He!C7)&0kgAcsPYwC`pZJpY}#NB44|P>lDNm9{06IaND7cU>FWVkM)bLOD7L>W zEs543+Ni*kbh-iZvze>e!Ma2=sl0S6@cNH{O=qRofy$##GkQW-m-++Tl@EbEirqf3 zr1;Aejy;gW2^gi8aXEIyL*+uqr)ubbq#oX-(NCDctyP<*jV z@l!#!y1SJ^X-Dvo4uk`Ls1Q=Bh54SsTRJ>DazAriP#OqZX=!Oz1f$%Nhqpo$;vDSBD|$jBp(-lb&cN8$ zo^8L2UYc>VIKMt|6f7nmv8qe>MtyD1a3?c5nfn}VNkV%D`zp3^BI?$J zL}%H7vtjhxmww+U^KlCzU1*JrCVc7KcWDs^l+@6D)eOoR#HBAaa^78RG*J-t?7Dfs z`CSuu+h-g-av7L)$FZX_-^+nWqCHC<5*-Qk8CO`hmy^2I zS!8{eY&3pNEBE8lz3tPy)r##lS7@73ZQ8)z6#|tMXlpB`BsjuF56s=SXHT85zdW{; zW};u!B?;w2A)5QZhD0?hGh3#CVsMC)-J2foO88?$%|74Nwa<>w{6!YuFj!Y`LBci= zDIEzv{C?2Ri)tkqwjJA*wa()SttJuACMel2i?rRU{~^2}uPJb%Q;*B}4^Zt}kQQ_3fQYCjHeM9>k|1_xj?Q}Ax`=2ZCleq z(=-FNsB4QR`cE~PPH0M0#Jm5i5R{C4eH_7VpgR5YJ=Y$L&HvTMcwcqQY zM@8q&Be#}0A2eQ{f4f)d1Zqga;h?IPG>VlvVVV-bvS;|6!MCQrWkX;!!FA!Zi;tp%}wLxAIQztfgw8xbLqT7=oJc5QSER zPL$Yw_+D*Oo(;ditbk3wlfGz`etWB}A1Ef@%=~NHzpDLv{05+gc6%{gW@;cSQEe5J zKQ-TQ69;K(YqQy+wfaM;obSF>GboLC)%?`kyFybiD+Z{r%xTYX0f6jla9xgfCMPR`0#d}s(tcBoxlm@Bxo-D%- zqWqq_Ufs^C-~Rjeci^s5VI2#a$CwvX?GLVeae|mxX0AMJT8F(zYe5Mdrm4PJ={6ITM>lKE$6w;*oJ_2HMyXf%hIpW^*Yf(C0{UGuKlz7 zmg*}aO9Dg7ZBGm_5|u!sH7wHc;JkIlHzIhOkOB_VG&mR&c#D+&Go0`=PentMW#^k^ zq2hNho5S>{wg(vOfM0Zk^R;%CW8lKq*$59zv$FP3e7r^2r1uN;*zL|DHYgncuocpq z+{HolheuBSsd@pz;2yoq}P;p-DN;EJ%YipgMzb_sIC;$CIPiyoSNN9#K~ zj<0MneM-j@<2~(VAe>O=oxwb(F`b^q^od)UFd|G_t2&;ExUO|rCsR2eXUvhUPPMC2 z3m>vzgohn98pr(o>Ju>`VwGiWL)|_Lzns+t^9D=|UpKkl!gp-NiHb+zMb6g+)kGk# zhSb8R12iN>>fIlEEiq8uqj^!& zT{qr5Guv~%4L^Ch^c8%vQvGd4nBYW3)q>Qo0kOVn0^pvvAvgFfc5Ufbil7;n=jG6< z;2k-}?u{M6s$1umeX}o1qe7lS*$bj+HW;lzFRHnEntyf>H#SU61tH`c6h7{x} zx<=&rNfaT+RkCa3TypU-o;P_5-CWW}n~Hd3&|SRBaAwd{0Zg;T>j&d3X_!)ym(}7_ ziodL%@4oq&3lvFayVGbOi>3vXO-8cnW2V;NdPn8i1?LO(0ga;-17M_(o+&ZzRwy$O zZpEM02qv5tCv^}%^~&8HAe(KA^Eul)jdVH*Mzar=??|8hc=lMh-?T+K5lQ09Bj8Lj zSZk8~v6w6I0oy`ouM9CTJ|#XJkUjvZ>lQ#EO3E$nA6ijp|l&XT;2MTWGeoSLA*qubw*BuPkN>BipP zO%yFG=PPv*J~8tJ%Z0ZYE>-J?tm~@1JmoH~+)*OmYn33$Uz8?_u0?Z{At<7{ACkOJ zNGa-d#7~b$JMY7^GNT>cgTWuBeGQLg_?`&pdwgS)V>y@Dqi>pbKts6oMI_T~6M{iv znb84lM%DBV0w1B{N10vsOIWWfoMV2Z)7+3L4^E>5=IuCoYJLxWTGHT(7LwNZsdmSc z#suFT9DXpLR%|?W+gpKViS5+*&37_;ugc7LsY4B5+UX3KVy`*Jw7QEf93dC(?j7`hT+|GV_h`*>cX{Y>k>)r z{IclM%G2TGdI9$0a&i33>!%c~HOs2NE99X~HdFv)wl7Yk6ZC9f1*cA;qc&({G=c+^ zuz#6(>2^h``Fl^0FQp$a6p!DjCCa*=3*&0)ZQs;)=2X7(yNk=M->A{JH~&C$p4n>r z5N*Euol3lIgTLeZr2aFa^^q5xqNjjJ=9K`Il7W1@DWBq>D;~ISc1__B zvE`u|^+y7We>mtHC|YH9!9uqjdaWCKM^zAsE)Sz8o5^xnN2Y#PEnNn_1+k2GGKKJI zM+ZK4QI}XdVPQpt%fdgqsM`0~CdkL|{<$RD=Bky}RD*U@Nf_#-{3NNt4H#8%U!g8} zFjlg&S)yW=S(Rt1O5(e`ytJCt6wFc1+7rhEBHw7UjP^$(^(lOo*Ek{`s#IeoLL`mQR_VFBYg>zi=Nr8}uAW zhgF(ob~uD|WNmv>*gQ0qKzp_V1L%yd@521%{dHMc{R}5nWPo4bX+JBcG0)8&n_XgZ z@KfNel8z5>hAs&dojLu$xOHXmyFo{5LjpGkRTji46$S#*Nyns@*Pdes z<*)wu)S2UXrW>eVY!4sNlYT0WuXX=E%_ksvbT#?nnh*L%lt?Ol8dRuuEw@rTc9DP5 zcuI`5VWLTb6EIASJxWl3;RdigOK}bBCKbGUF*!)jIGkz^i?mh8t9Rw`cKZQg+9pe> zo%*LH9`Zh)a$QQ3Zda#g4aL@bn?IK_W0>S282cg~!9L$+;Xkg?kRMw*(zYqcg;fUS z7NJ>xR`*BSm-rOH)lmyu_c}YV-1Cm?mL6nQQlHvt3Vwmyq*!TtDQ#@?rf&np$^40r z8C?|xa;K`DlO8wX%fT&-a=!C0C5snN*V%oo;yzzVqUq*pwhrjA z3tvAYetj13)PaIe_M}8p;KF<=RpeD1x7wKpi}c%Ge`8W$q?R#u08hs$@EOcb;x#k(t)W;YcCe*L<*w+-8k(Cb+j%Zx;kJzt-x zG$e9D}6Vis(S&NwVqv7E1$!PzMFFsJBStsV|`&SVE8r{2%^a3evIFYViqBv0K}pE}nF#)(h~C`Bk$ z(qJxjG}HmkD>V0sAD@-_CqBiNKox!yJ&{krFdBg?$peKo;Xu$u`eHjac1BQ9?O{!?!afu5gp!Br*x{}Zm}~SmtC5ZwJRB{74*EYHB1Diugq?#X#iWx)bM8IiD>$TDS+u0(oa_ zBfn?~Ken6+ph`*pR>`n1L*}xF)R}^{bO15sHT|XgOq2we8#F}=7vHnD+}S+Mzt#r{ zl^@Lx8zTvi3@6r&_0lXoef(v!R@^Nad%XXN>Ee~YC<(=G=%|<9i8tOa7g2w`dQIUB zaOep*BvJwm8NF7e+R%_TiMJNqzS6&VH}2tPdNDwFf4!noN4C}}WqDZRLLW}so(!By zGDpAhmn9df-dPTknxh56cxH~n`>P?9|~v>Wwfi( zV)XeP5Wkmcm0My3l==1f`j=%xb0P0-g?(oV)YM*iYR!((0705&*7Z79e-0jG90NI- zbj8*w4xEV=u4Iv%gx$PE;Pf|L2axL;OS0V;v}U!bTAH`QuD8YR7UZs--m`T0^yNpe z6iuMwF?dfl9$;vwi3t{$_Obaqs?h{}m)ZCB+YxO-A3;ph7@yjVJEx=4V*b!ZlrQLf zmS~^D4CV5m{&$wtcD6q{64Uv--RRW}|C7lx8W)bu{F4*r{SMT&5QmI7&m5%aLSjB9 zL<+4FK-?%Za8AVh}pZ1R_t%~a8lERze;o$sc#9-txIj@&UoqI6l8 zIx+JCJZXs0SrYA&shUqVE8Y%Kr(QJEj?*JxhAQJ2p|wI7jKQaVuL;OsXvFZFDozi~ zXJEXr<9$mGCi~rvyG>WQ7ZJcf#!AH=-t~L9C$E7rLKKOxeKsdDVXE1GARzC;z@^OVYm@YXM(v_CMiPJ6!@vwOQFtq5EK zvrZ=J46*Yeb)IJ;^M2KPN_jcE &<@*N=}o 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�s3fyn@Io|_xidgNAH1}B$z5Iu#(45RsuJxw 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-10-deploy-to-vercel-deploy-button.png b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-10-deploy-to-vercel-deploy-button.png new file mode 100644 index 0000000000000000000000000000000000000000..affde53fdf799f9a7e9dd45d19e333e84d8cff0d GIT binary patch literal 9067 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 QeF8AhHPxxOb^pcx0#P#F!~g&Q literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-10-deploy-to-vercel-deploy-button.snagx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-10-deploy-to-vercel-deploy-button.snagx new file mode 100644 index 0000000000000000000000000000000000000000..f866b57bfff9fe46a3067341bce69da007d97aee GIT binary patch literal 42190 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≈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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-20-deploy-to-vercel-select-github.snagx b/versioned_docs/version-legacy/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-20-deploy-to-vercel-select-github.snagx new file mode 100644 index 0000000000000000000000000000000000000000..0feecdb56b0dfda3d8bef7a96d4fc78305c0af4b GIT binary patch literal 76895 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

oZ?iwpPYiBjPm(`7&H0i?{4XVT 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.png b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.png new file mode 100644 index 0000000000000000000000000000000000000000..c82ed1a7ace6c5095ba3178343a82ebce9c500a3 GIT binary patch literal 27929 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.snagx b/versioned_docs/version-legacy/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.snagx new file mode 100644 index 0000000000000000000000000000000000000000..c8ab225559a319efa24778ca90d14347d008d91d GIT binary patch literal 99541 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

SiX@^hpfHnJY*!e`UqDaXjxQ70 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/drivers/qe-query-execution-flow.png b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/drivers/qe-query-execution-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..aca500b4feca68e6496eb26c95caf2d0a12d21c8 GIT binary patch literal 88110 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�#_#1N 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�w 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�-bt*ERVXN5PAm>V8~am55BvJ@imLDmp> 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 Mp(tJ}Y8>)E0G}3;^8f$< literal 0 HcmV?d00001 diff --git a/versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/embedded-replica-remote-read.png b/versioned_docs/version-legacy/200-orm/050-overview/500-databases/images/embedded-replica-remote-read.png new file mode 100644 index 0000000000000000000000000000000000000000..7762e8bfaa936d5284c8b19f4bb56fe289298e57 GIT binary patch literal 66251 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%0AZ{@h?MV%}BkT-4w5K@4hFJcPFzx)EU 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