{"id":330306,"date":"2022-03-04T09:00:12","date_gmt":"2022-03-04T09:00:12","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=330306"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=330306","title":{"rendered":"<span>Prisma ORM: \u043f\u043e\u043b\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e). \u0427\u0430\u0441\u0442\u044c 1<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ax\/ev\/zk\/axevzkfcmhrfdfb4j8j9hg12xj0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ax\/ev\/zk\/axevzkfcmhrfdfb4j8j9hg12xj0.png\"\/>  <\/p>\n<p>  <\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f!<\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0438\u0437 2 \u0441\u0442\u0430\u0442\u0435\u0439 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0437\u0430\u043c\u0435\u0442\u043a\u0430\u043c\u0438 \u043e <a href=\"https:\/\/www.prisma.io\/\"><code>Prisma<\/code><\/a>.<\/p>\n<p>  <\/p>\n<p><code>Prisma<\/code> \u2014 \u044d\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 (\u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435) <a href=\"https:\/\/ru.wikipedia.org\/wiki\/ORM\">\u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/a> (Object-Relational Mapping, ORM) \u0434\u043b\u044f <code>Node.js<\/code> \u0438 <code>TypeScript<\/code>. \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, <code>Prisma<\/code> \u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 (<code>PostgreSQL<\/code>, <code>MySQL<\/code>, <code>SQL Server<\/code>, <code>SQLite<\/code>) \u0438 \u043d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 (<code>MongoDB<\/code>) \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>JavaScript<\/code> \u0438\u043b\u0438 <code>TypeScript<\/code> \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\"><code>SQL<\/code><\/a> (\u0445\u043e\u0442\u044f \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u0435\u0435\u0442\u0441\u044f).<\/p>\n<p>  <\/p>\n<h2 id=\"soderzhanie-etoy-chasti\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"#%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0\">\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a><\/li>\n<li><a href=\"#cli\">CLI<\/a><\/li>\n<li><a href=\"#%D1%81%D1%85%D0%B5%D0%BC%D0%B0\">\u0421\u0445\u0435\u043c\u0430<\/a><br \/> \n<ul>\n<li><a href=\"#%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\">\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/li>\n<li><a href=\"#%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%8B\">\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b<\/a><\/li>\n<li><a href=\"#%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8-%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%BE%D0%B2\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432<\/a><\/li>\n<li><a href=\"#%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D1%8F\">\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82\">\u041a\u043b\u0438\u0435\u043d\u0442<\/a><br \/> \n<ul>\n<li><a href=\"#%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B\">\u0417\u0430\u043f\u0440\u043e\u0441\u044b<\/a><\/li>\n<li><a href=\"#findunique\">findUnique<\/a><\/li>\n<li><a href=\"#findfirst\">findFirst<\/a><\/li>\n<li><a href=\"#findmany\">findMany<\/a><\/li>\n<li><a href=\"#create\">create<\/a><\/li>\n<li><a href=\"#update\">update<\/a><\/li>\n<li><a href=\"#upsert\">upsert<\/a><\/li>\n<li><a href=\"#delete\">delete<\/a><\/li>\n<li><a href=\"#createmany\">createMany<\/a><\/li>\n<li><a href=\"#updatemany\">updateMany<\/a><\/li>\n<li><a href=\"#deletemany\">deleteMany<\/a><\/li>\n<li><a href=\"#count\">count<\/a><\/li>\n<li><a href=\"#aggregate\">aggregate<\/a><\/li>\n<li><a href=\"#groupby\">groupBy<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434 \u043a\u0430\u0442.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h1 id=\"inicializaciya-proekta\">\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h1>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043d\u0435\u0435 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c <code>Node.js-\u043f\u0440\u043e\u0435\u043a\u0442<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">mkdir prisma-test cd prisma-test  yarn init -yp # or npm init -y<\/code><\/pre>\n<p>  <\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c <code>Prisma<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">yarn add -D prisma  # or npm i -D prisma<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 <code>Prisma<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma init<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 <code>prisma\/schema.prisma<\/code> \u0438 <code>.env<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <code>.env<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>DATABASE_URL<\/code>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u044c \u043a (\u0430\u0434\u0440\u0435\u0441) \u0411\u0414. \u0424\u0430\u0439\u043b <code>schema.prisma<\/code> \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  <\/p>\n<h1 id=\"cli\">CLI<\/h1>\n<p>  <\/p>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8\">\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/a> (Command line interface, CLI) <code>Prisma<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 (\u043a\u043e\u043c\u0430\u043d\u0434\u044b):<\/p>\n<p>  <\/p>\n<ul>\n<li><code>init<\/code> \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d <code>Prisma-\u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/code>:<br \/> \n<ul>\n<li><code>--datasource-provider<\/code> \u2014 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0411\u0414: <code>sqlite<\/code>, <code>postgresql<\/code>, <code>mysql<\/code>, <code>sqlserver<\/code> \u0438\u043b\u0438 <code>mongodb<\/code> (\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 <code>datasource<\/code> \u0438\u0437 <code>schema.prisma<\/code>);<\/li>\n<li><code>--url<\/code> \u2014 \u0430\u0434\u0440\u0435\u0441 \u0411\u0414 (\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 <code>DATABASE_URL<\/code>)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma init --datasource-provider mysql --url mysql:\/\/user:password@localhost:3306\/mydb<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>generate<\/code> \u2014 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 <code>Prisma<\/code> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0445\u0435\u043c\u044b (<code>schema.prisma<\/code>). \u041a\u043b\u0438\u0435\u043d\u0442 <code>Prisma<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/API\">\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a> (Application Programming Interface, API) \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 \u0438 \u0442\u0438\u043f\u044b \u0434\u043b\u044f <code>TypeScript<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma generate<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>db<\/code><br \/> \n<ul>\n<li><code>pull<\/code> \u2014 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u044b \u0411\u0414<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma db pull<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>push<\/code> \u2014 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0445\u0435\u043c\u044b <code>Prisma<\/code> \u0441 \u0411\u0414 \u0431\u0435\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0439. \u0411\u0414 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0411\u0414 \u0438 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0411\u0414, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0411\u0414, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a <a href=\"https:\/\/www.elephantsql.com\/\"><code>ElephantSQL<\/code><\/a> \u0438\u043b\u0438 <a href=\"https:\/\/www.heroku.com\/\"><code>Heroku<\/code><\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma db push<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>seed<\/code> \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0411\u0414 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c\u0438 (\u0444\u0438\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438) \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041f\u0443\u0442\u044c \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 <code>package.json<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"json\">\"prisma\": {   \"seed\": \"node prisma\/seed.js\" }<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma seed<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>migrate<\/code><br \/> \n<ul>\n<li><code>dev<\/code> \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438:<\/li>\n<li><code>--name<\/code> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma migrate dev --name init<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0411\u0414 \u043f\u0440\u0438 \u0435\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 <code>prisma\/migrations\/migration_name.sql<\/code>, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 (\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0411\u0414 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439) \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 (\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438) \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (<code>prisma generate<\/code>).<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b.<\/p>\n<p>  <\/p>\n<ul>\n<li><code>reset<\/code> \u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0411\u0414 \u0438\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 &#171;\u043c\u044f\u0433\u043a\u0438\u0439 \u0441\u0431\u0440\u043e\u0441&#187;, \u0443\u0434\u0430\u043b\u044f\u044f \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma migrate reset<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>deploy<\/code> \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma migrate deploy<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>studio<\/code> \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u0432 \u0411\u0414, \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435:<br \/> \n<ul>\n<li><code>--browser<\/code>, <code>-b<\/code> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440);<\/li>\n<li><code>--port<\/code>, <code>-p<\/code> \u2014 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0440\u0442\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 <code>5555<\/code>)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"bash\">npx prisma studio  # \u0431\u0435\u0437 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0432\u043a\u043b\u0430\u0434\u043a\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 npx prisma studio -b none<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e <code>CLI<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/www.prisma.io\/docs\/reference\/api-reference\/command-reference\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  <\/p>\n<h1 id=\"shema\">\u0421\u0445\u0435\u043c\u0430<\/h1>\n<p>  <\/p>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <code>schema.prisma<\/code> \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0442\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">generator client {   provider = \"prisma-client-js\" }  datasource db {   provider = \"postgresql\"   url      = env(\"DATABASE_URL\") }<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>datasource<\/code> \u2014 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445:<br \/> \n<ul>\n<li><code>provider<\/code> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0411\u0414: <code>sqlite<\/code>, <code>postgresql<\/code>, <code>mysql<\/code>, <code>sqlserver<\/code> \u0438\u043b\u0438 <code>mongodb<\/code> (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 <code>postgresql<\/code>);<\/li>\n<li><code>url<\/code> \u2014 \u0430\u0434\u0440\u0435\u0441 \u0411\u0414 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>DATABASE_URL<\/code>);<\/li>\n<li><code>shadowDatabaseUrl<\/code> \u2014 \u0430\u0434\u0440\u0435\u0441 &#171;\u0442\u0435\u043d\u0435\u0432\u043e\u0439&#187; \u0411\u0414 (\u0434\u043b\u044f \u0411\u0414, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438): \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (<code>prisma migrate dev<\/code>);<\/li>\n<\/ul>\n<\/li>\n<li><code>generator<\/code> \u2014 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0445\u0435\u043c\u044b:<br \/> \n<ul>\n<li><code>provider<\/code> \u2014 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 (\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>prisma-client-js<\/code>);<\/li>\n<li><code>binaryTargets<\/code> \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 <code>Prisma<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>native<\/code>, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u044f\u0432\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432 <code>Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435<\/code> (\u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u044f\u0432\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c <code>prisma generate<\/code>)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"plaintext\">generator client {   provider      = \"prisma-client-js\"   binaryTargets = [\"native\"] }  datasource db {   provider          = \"postgresql\"   url               = env(\"DATABASE_URL\")   shadowDatabaseUrl = env(\"SHADOW_DATABASE_URL\") }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=Prisma.prisma\"><code>Prisma<\/code><\/a> \u0434\u043b\u044f <code>VSCode<\/code>. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0432 \u0444\u0430\u0439\u043b\u0435 <code>settings.json<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"json\">\"[prisma]\": {   \"editor.defaultFormatter\": \"Prisma.prisma\" }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432 \u0441\u0445\u0435\u043c\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (<code>User<\/code>) \u0438 \u043f\u043e\u0441\u0442\u0430 (<code>Post<\/code>):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">model User {   id         String   @id @default(uuid()) @db.Uuid   email      String   @unique   hash       String   @map(\"password_hash\")   first_name String?   last_name  String?   age        Int?   role       Role     @default(USER)   posts      Post[]   created_at DateTime @default(now())   updated_at DateTime @updatedAt    @@map(\"users\") }  model Post {   id         String   @id @default(uuid())   title      String   content    String   published  Boolean   author_id  String   author     User     @relation(fields: [author_id], references: [id])   created_at DateTime @default(now())   updated_at DateTime @updatedAt    @@map(\"posts\") }  enum Role {   USER   ADMIN }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u0438\u043c:<\/p>\n<p>  <\/p>\n<ul>\n<li><code>id<\/code>, <code>email<\/code>, <code>hash<\/code> etc. \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 (\u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b);<\/li>\n<li><code>@map<\/code> \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435 \u0441\u0445\u0435\u043c\u044b (<code>hash<\/code>) \u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (<code>password_hash<\/code>). <code>@map<\/code> \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0432 \u0411\u0414 \u0438 \u043f\u043e\u043b\u044f \u0432 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0435. \u0414\u043b\u044f <code>MongoDB<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>@map<\/code> \u0434\u043b\u044f <code>@id<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c: <code>id String @default(auto()) @map(\"_id\") @db.ObjectId<\/code>;<\/li>\n<li><code>String<\/code>, <code>Int<\/code>, <code>DateTime<\/code> etc. \u2014 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 (\u0441\u043c. \u043d\u0438\u0436\u0435);<\/li>\n<li><code>@db.Uuid<\/code> \u2014 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0411\u0414 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>PostgreSQL<\/code>);<\/li>\n<li>\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>?<\/code> \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>NULL<\/code>);<\/li>\n<li>\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>[]<\/code> \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a (\u043c\u0430\u0441\u0441\u0438\u0432). \u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c;<\/li>\n<li>\u043f\u0440\u0435\u0444\u0438\u043a\u0441 <code>@<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043f\u043e\u043b\u044f, \u0430 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 <code>@@<\/code> \u2014 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0431\u043b\u043e\u043a\u0430 (\u043c\u043e\u0434\u0435\u043b\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u044b). \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b;<\/li>\n<li>\u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>@id<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u043c (\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c) \u043a\u043b\u044e\u0447\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b (<code>PRIMARY KEY<\/code>) (\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0435\u043b\u0438). \u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c;<\/li>\n<li>\u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>@default<\/code> \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u044e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f) (<code>DEFAULT<\/code>). \u0414\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (<code>42<\/code>, <code>hi<\/code>) \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 <code>autoincrement<\/code>, <code>dbgenerated<\/code>, <code>cuid<\/code>, <code>uuid<\/code> \u0438 <code>now<\/code> (\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432; \u0441\u043c. \u043d\u0438\u0436\u0435);<\/li>\n<li>\u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>@unique<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (<code>UNIQUE<\/code>). \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435 <code>@id<\/code> \u0438\u043b\u0438 <code>@unique<\/code>;<\/li>\n<li>\u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>@relation<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 <code>users<\/code> \u0438 <code>posts<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043e\u0434\u0438\u043d-\u043a\u043e-\u043c\u043d\u043e\u0433\u0438\u043c (one-to-many, 1-n) \u2014 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u043e\u0432 (<code>FOREIGN KEY \/ REFERENCES<\/code>) (\u043e\u0431 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u0445 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e);<\/li>\n<li>\u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>@updatedAt<\/code> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u043c\u0438 \u0434\u0430\u0442\u043e\u0439 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438;<\/li>\n<li>\u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 (enum), \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u044f <code>role<\/code> \u043c\u043e\u0434\u0435\u043b\u0438 <code>User<\/code> (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>USER<\/code>);<\/li>\n<li>\u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>@@map<\/code> \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043a \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0411\u0414. <code>@@map<\/code> \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0411\u0414 \u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"tipy-dannyh\">\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u0445 \u043f\u043e\u043b\u0435\u0439 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b: <code>[A-Za-z][A-Za-z0-9_]*<\/code>.<\/p>\n<p>  <\/p>\n<ul>\n<li><code>String<\/code> \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b (\u0434\u043b\u044f <code>PostgreSQL<\/code> \u2014 \u044d\u0442\u043e \u0442\u0438\u043f <code>text<\/code>);<\/li>\n<li><code>Boolean<\/code> \u2014 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435: <code>true<\/code> \u0438\u043b\u0438 <code>false<\/code> (<code>boolean<\/code>);<\/li>\n<li><code>Int<\/code> \u2014 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (<code>integer<\/code>);<\/li>\n<li><code>BigInt<\/code> \u2014 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/BigInt\"><code>BigInt<\/code><\/a> (<code>integer<\/code>);<\/li>\n<li><code>Float<\/code> \u2014 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 (\u0437\u0430\u043f\u044f\u0442\u043e\u0439) (<code>double precision<\/code>);<\/li>\n<li><code>Decimal<\/code> (<code>decimal(65,30)<\/code>);<\/li>\n<li><code>DateTime<\/code> \u2014 \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/ISO_8601\"><code>ISO 8601<\/code><\/a>;<\/li>\n<li><code>Json<\/code> \u2014 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>JSON<\/code> (<code>jsonb<\/code>);<\/li>\n<li><code>Bytes<\/code> (<code>bytea<\/code>).<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0410\u0442\u0440\u0438\u0431\u0443\u0442 <code>@db<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0411\u0414.<\/p>\n<p>  <\/p>\n<h2 id=\"atributy\">\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b<\/h2>\n<p>  <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u044b\u0448\u0435, \u0432 \u0441\u0445\u0435\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li><code>@@id<\/code> \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 (composite) \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>@@id[title, author]<\/code> (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u043e\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f <code>title_author<\/code> \u2014 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c);<\/li>\n<li><code>@@unique<\/code> \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (unique constraint) \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 (\u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>@@unique([title, author])<\/code>;<\/li>\n<li><code>@@index<\/code> \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u0411\u0414 (<code>INDEX<\/code>), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>@@index([title, author])<\/code>;<\/li>\n<li><code>@ignore<\/code>, <code>@@ignore<\/code> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"funkcii-atributov\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432<\/h2>\n<p>  <\/p>\n<ul>\n<li><code>auto<\/code> \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0411\u0414 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <code>MongoDB<\/code>);<\/li>\n<li><code>autoincrement<\/code> \u2014 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 (<code>SERIAL<\/code> \u0432 <code>PostgreSQL<\/code>, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f <code>MongoDB<\/code>);<\/li>\n<li><code>cuid<\/code> \u2014 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/ericelliott\/cuid\"><code>cuid<\/code><\/a>;<\/li>\n<li><code>uuid<\/code> \u2014 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/UUID\"><code>UUID<\/code><\/a>;<\/li>\n<li><code>now<\/code> \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (timestamp) (<code>CURRENT_TIMESTAMP<\/code> \u0432 <code>PostgreSQL<\/code>);<\/li>\n<li><code>dbgenerated<\/code> \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u044b \u0432 \u0441\u0445\u0435\u043c\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>random()<\/code>).<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0445\u0435\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/www.prisma.io\/docs\/reference\/api-reference\/prisma-schema-reference\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  <\/p>\n<h2 id=\"otnosheniya\">\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<p>\u0410\u0442\u0440\u0438\u0431\u0443\u0442 <code>@relation<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 (\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438). \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li><code>name?: string<\/code> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f;<\/li>\n<li><code>fields?: [field1, field2, ...fieldN]<\/code> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e <code>[author_id]<\/code> \u043c\u043e\u0434\u0435\u043b\u0438 <code>Post<\/code>); <em>\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435<\/em>: \u0441\u0430\u043c\u043e \u043f\u043e\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e);<\/li>\n<li><code>references: [field1, field2, ...fieldN]<\/code> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 (\u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439) (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e <code>[id]<\/code> \u043c\u043e\u0434\u0435\u043b\u0438 <code>User<\/code>).<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435 \u0441\u0445\u0435\u043c\u0435 \u043f\u043e\u043b\u044f\u043c\u0438, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u043c\u0438 \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 <code>User<\/code> \u0438 <code>Post<\/code>, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f <code>posts<\/code> \u0438 <code>author<\/code>. \u042d\u0442\u0438 \u043f\u043e\u043b\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 <code>Prisma<\/code>, \u0432 \u0411\u0414 \u043e\u043d\u0438 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f. \u0421\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 <code>author_id<\/code> \u0442\u0430\u043a\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 <code>Prisma<\/code> \u2014 \u044d\u0442\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 (<code>FOREIGN KEY<\/code>), \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0439 <code>Post<\/code> \u0441 <code>User<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 3 \u0432\u0438\u0434\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043e\u0434\u0438\u043d-\u043a-\u043e\u0434\u043d\u043e\u043c\u0443 (one-to-one, 1-1);<\/li>\n<li>\u043e\u0434\u0438\u043d-\u043a\u043e-\u043c\u043d\u043e\u0433\u0438\u043c (one-to-many, 1-n);<\/li>\n<li>\u043c\u043d\u043e\u0433\u0438\u0435-\u043a\u043e-\u043c\u043d\u043e\u0433\u0438\u043c (many-to-many, m-n).<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0410\u0442\u0440\u0438\u0431\u0443\u0442 <code>@relation<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 <code>1-1<\/code> \u0438 <code>1-n<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0445\u0435\u043c\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">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 }  model Post {   id         Int        @id @default(autoincrement())   author     User       @relation(fields: [authorId], references: [id])   authorId   Int   categories Category[] }  model Category {   id    Int    @id @default(autoincrement())   posts Post[] }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u0438\u043c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 <code>User<\/code> \u0438 <code>Profile<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f <code>1-1<\/code> \u2014 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0444\u0438\u043b\u044c;<\/li>\n<li>\u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 <code>User<\/code> \u0438 <code>Post<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f <code>1-n<\/code> \u2014 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u043e\u0432;<\/li>\n<li>\u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 <code>Post<\/code> \u0438 <code>Category<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f <code>m-n<\/code> \u2014 \u043e\u0434\u0438\u043d \u043f\u043e\u0441\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c, \u0432 \u043e\u0434\u043d\u0443 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u043c\u043e\u0436\u0435\u0442 \u0432\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u043e\u0432.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/www.prisma.io\/docs\/concepts\/components\/prisma-schema\/relations\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  <\/p>\n<h1 id=\"klient\">\u041a\u043b\u0438\u0435\u043d\u0442<\/h1>\n<p>  <\/p>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 <code>Prisma<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">import { PrismaClient } from '@prisma\/client'  const prisma = new PrismaClient()  export default prisma<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">const Prisma = require('prisma')  const prisma = new Prisma.PrismaClient()  module.exports = prisma<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"zaprosy\">\u0417\u0430\u043f\u0440\u043e\u0441\u044b<\/h2>\n<p>  <\/p>\n<h3 id=\"findunique\">findUnique<\/h3>\n<p>  <\/p>\n<p><code>findUnique<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0438\u043b\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">findUnique({   where: condition,   select?: fields,   include?: relations,   rejectOnNotFound?: boolean })<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>?<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>  <\/p>\n<ul>\n<li><code>condition<\/code> \u2014 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438;<\/li>\n<li><code>fields<\/code> \u2014 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438;<\/li>\n<li><code>relations<\/code> \u2014 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f (\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f) \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438;<\/li>\n<li><code>rejectOnNotFound<\/code> \u2014 \u0435\u0441\u043b\u0438 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>true<\/code>, \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>NotFoundError<\/code>. \u0415\u0441\u043b\u0438 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>false<\/code>, \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f <code>null<\/code>.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function getUserById(id) {   try {     const user = await prisma.user.findUnique({       where: {         id       }     })     return user   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"findfirst\">findFirst<\/h3>\n<p>  <\/p>\n<p><code>findFirst<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">findFirst({   where?: condition,   select?: fields,   include?: relations,   rejectOnNotFound?: boolean,   distinct?: field,   orderBy?: order,   cursor?: position,   skip?: number,   take?: number })<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>distinct<\/code> \u2014 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e;<\/li>\n<li><code>orderBy<\/code> \u2014 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e \u0438 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435;<\/li>\n<li><code>cursor<\/code> \u2014 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, <code>id<\/code> \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435);<\/li>\n<li><code>skip<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439;<\/li>\n<li><code>take<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>1<\/code> \u0438\u043b\u0438 <code>-1<\/code>: \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0437\u0430\u043f\u0438\u0441\u044c.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function getLastPostByAuthorId(author_id) {   try {     const post = await prisma.post.findFirst({       where: {         author_id       },       orderBy: {         created_at: 'asc'       },       take: -1     })     return post   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"findmany\">findMany<\/h3>\n<p>  <\/p>\n<p><code>findMany<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">findMany({   where?: condition,   select?: fields,   include?: relations,   rejectOnNotFound?: boolean,   distinct?: field,   orderBy?: order,   cursor?: position,   skip?: number,   take?: number })<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function getAllPostsByAuthorId(author_id) {   try {     const posts = await prisma.post.findMany({       where: {         author_id       },       orderBy: {         updated_at: 'desc'       }     })     return posts   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"create\">create<\/h3>\n<p>  <\/p>\n<p><code>create<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">create({   data: _data,   select?: fields,   include?: relations })<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>_data<\/code> \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function createUserWithProfile(data) {   const { email, password, firstName, lastName, age } = data   try {     const hash = await argon2.hash(password)     const user = await prisma.user.create({       data: {         email,         hash,         profile: {           create: {             first_name: firstName,             last_name: lastName,             age           }         }       },       select: {         email: true       },       include: {         profile: true       }     })     return user   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"update\">update<\/h3>\n<p>  <\/p>\n<p><code>update<\/code> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">update({   data: _data,   where: condition,   select?: fields,   include?: relations })<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function updateUserById(id, changes) {   const { email, age } = changes   try {     const user = await prisma.user.update({       where: {         id       },       data: {         email,         profile: {           update: {             age           }         }       },       select: {         email: true       },       include: {         profile: true       }     })     return user   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"upsert\">upsert<\/h3>\n<p>  <\/p>\n<p><code>upsert<\/code> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">upsert({   create: _data,   update: _data,   where: condition,   select?: fields,   include?: relations })<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function updateOrCreateUser(data) {   const { userName, email, password } = data   try {     const hash = await argon2.hash(password)     const user = await prisma.user.create({       where: { user_name: userName },       update: {         email,         hash       },       create: {         email,         hash,         user_name: userName       },       select: { user_name: true, email: true }     })     return user   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"delete\">delete<\/h3>\n<p>  <\/p>\n<p><code>delete<\/code> \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0438\u043b\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">delete({   where: condition,   select?: fields,   include?: relations })<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function removeUserById(id) {   try {     await prisma.user.delete({       where: {         id       }     })   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"createmany\">createMany<\/h3>\n<p>  <\/p>\n<p><code>createMany<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 (\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0445 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e).<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">createMany({   data: _data[],   skipDuplicates?: boolean })<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>_data[]<\/code> \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430;<\/li>\n<li><code>skipDuplicates<\/code> \u2014 \u043f\u0440\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 <code>true<\/code> \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">\/\/ \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e `users` - \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 async function createUsers(users) {   try {     const users = await prisma.user.createMany({       data: users     })     return users   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"updatemany\">updateMany<\/h3>\n<p>  <\/p>\n<p><code>updateMany<\/code> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e (sic) \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">updateMany({   data: _data[],   where?: condition })<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function updateProductsByCategory(category, newDiscount) {   try {     const count = await prisma.product.updateMany({       where: {         category       },       data: {         discount: newDiscount       }     })     return count   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"deletemany\">deleteMany<\/h3>\n<p>  <\/p>\n<p><code>deleteMany<\/code> \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">deleteMany({   where?: condition })<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function removeAllPostsByUserId(author_id) {   try {     const count = await prisma.post.deleteMany({       where: {         author_id       }     })     return count   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"count\">count<\/h3>\n<p>  <\/p>\n<p><code>count<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">count({   where?: condition,   select?: fields,   cursor?: position,   orderBy?: order,   skip?: number,   take?: number })<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function countUsersWithPublishedPosts() {   try {     const count = await prisma.user.count({       where: {         post: {           some: {             published: true           }         }       }     })     return count   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"aggregate\">aggregate<\/h3>\n<p>  <\/p>\n<p><code>aggregate<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%B3%D1%80%D0%B5%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">\u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a> \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">aggregate({   where?: condition,   select?: fields,   cursor?: position,   orderBy?: order,   skip?: number,   take?: number,    _count: count,   _avg: avg,   _sum: sum,   _min: min,   _max: max })<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>_count<\/code> \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u043b\u0438 \u043d\u0435 <code>null-\u043f\u043e\u043b\u0435\u0439<\/code>;<\/li>\n<li><code>_avg<\/code> \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f;<\/li>\n<li><code>_sum<\/code> \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f;<\/li>\n<li><code>_min<\/code> \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f;<\/li>\n<li><code>_max<\/code> \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function getAllUsersCountAndMinMaxProfileViews() {   try {     const result = await prisma.user.aggregate({       _count: {         _all: true       },       _max: {         profileViews: true       },       _min: {         profileViews: true       }     })     return result   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"groupby\">groupBy<\/h3>\n<p>  <\/p>\n<p><code>groupBy<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">groupBy({   by?: by,   having?: having,    where?: condition,   orderBy?: order,   skip?: number,   take?: number,    _count: count,   _avg: avg,   _sum: sum,   _min: min,   _max: max })<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>by<\/code> \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0435 \u0438\u043b\u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439;<\/li>\n<li><code>having<\/code> \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u043c\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e <code>country \/ city<\/code>, \u0433\u0434\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>profileViews<\/code> \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 <code>100<\/code>, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e (<code>_sum<\/code>) <code>profileViews<\/code> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b. \u0417\u0430\u043f\u0440\u043e\u0441 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0435\u0445 (<code>_all<\/code>) \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u043d\u0435 <code>null<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u043b\u044f <code>city<\/code> \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">async function getUsers() {   try {     const result = await prisma.user.groupBy({       by: ['country', 'city'],       _count: {         _all: true,         city: true       },       _sum: {         profileViews: true       },       orderBy: {         country: 'desc'       },       having: {         profileViews: {           _avg: {             gt: 100           }         }       }     })     return result   } catch(e) {     onError(e)   } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u044d\u0442\u043e \u0432\u0441\u0435, \u043e \u0447\u0435\u043c \u044f \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438 happy coding!<\/p>\n<p>  <\/p>\n<hr\/>\n<p>  <\/p>\n<p><a href=\"https:\/\/cloud.timeweb.com\/vds-promo-1-rub?utm_source=habr&amp;utm_medium=banner&amp;utm_campaign=vds-promo-1-rub\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/st\/f9\/ui\/stf9uiznc_h9q5qyjl2fw7sx0m0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/st\/f9\/ui\/stf9uiznc_h9q5qyjl2fw7sx0m0.png\"\/><\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/timeweb\/blog\/654341\/\"> https:\/\/habr.com\/ru\/company\/timeweb\/blog\/654341\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ax\/ev\/zk\/axevzkfcmhrfdfb4j8j9hg12xj0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ax\/ev\/zk\/axevzkfcmhrfdfb4j8j9hg12xj0.png\"\/>  <\/p>\n<p>  <\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f!<\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0438\u0437 2 \u0441\u0442\u0430\u0442\u0435\u0439 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0437\u0430\u043c\u0435\u0442\u043a\u0430\u043c\u0438 \u043e <a href=\"https:\/\/www.prisma.io\/\"><code>Prisma<\/code><\/a>.<\/p>\n<p>  <\/p>\n<p><code>Prisma<\/code> \u2014 \u044d\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 (\u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435) <a href=\"https:\/\/ru.wikipedia.org\/wiki\/ORM\">\u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/a> (Object-Relational Mapping, ORM) \u0434\u043b\u044f <code>Node.js<\/code> \u0438 <code>TypeScript<\/code>. \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, <code>Prisma<\/code> \u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 (<code>PostgreSQL<\/code>, <code>MySQL<\/code>, <code>SQL Server<\/code>, <code>SQLite<\/code>) \u0438 \u043d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 (<code>MongoDB<\/code>) \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>JavaScript<\/code> \u0438\u043b\u0438 <code>TypeScript<\/code> \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\"><code>SQL<\/code><\/a> (\u0445\u043e\u0442\u044f \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u0435\u0435\u0442\u0441\u044f).<\/p>\n<p>  <\/p>\n<h2 id=\"soderzhanie-etoy-chasti\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"#%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0\">\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a><\/li>\n<li><a href=\"#cli\">CLI<\/a><\/li>\n<li><a href=\"#%D1%81%D1%85%D0%B5%D0%BC%D0%B0\">\u0421\u0445\u0435\u043c\u0430<\/a><br \/> \n<ul>\n<li><a href=\"#%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\">\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/li>\n<li><a href=\"#%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%8B\">\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b<\/a><\/li>\n<li><a href=\"#%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8-%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%BE%D0%B2\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432<\/a><\/li>\n<li><a href=\"#%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D1%8F\">\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82\">\u041a\u043b\u0438\u0435\u043d\u0442<\/a><br \/> \n<ul>\n<li><a href=\"#%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B\">\u0417\u0430\u043f\u0440\u043e\u0441\u044b<\/a><\/li>\n<li><a href=\"#findunique\">findUnique<\/a><\/li>\n<li><a href=\"#findfirst\">findFirst<\/a><\/li>\n<li><a href=\"#findmany\">findMany<\/a><\/li>\n<li><a href=\"#create\">create<\/a><\/li>\n<li><a href=\"#update\">update<\/a><\/li>\n<li><a href=\"#upsert\">upsert<\/a><\/li>\n<li><a href=\"#delete\">delete<\/a><\/li>\n<li><a href=\"#createmany\">createMany<\/a><\/li>\n<li><a href=\"#updatemany\">updateMany<\/a><\/li>\n<li><a href=\"#deletemany\">deleteMany<\/a><\/li>\n<li><a href=\"#count\">count<\/a><\/li>\n<li><a href=\"#aggregate\">aggregate<\/a><\/li>\n<li><a href=\"#groupby\">groupBy<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434 \u043a\u0430\u0442.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-330306","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/330306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=330306"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/330306\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=330306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=330306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=330306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}