پرش به محتوای اصلی

مولد کد

در نوار ابزار به زبانهٔ Code Generator بروید. این زبانه کد کل سند را در سمت چپ و، در سمت راست آن، پنل گزینه‌هایی با عنوان Code Generator نشان می‌دهد که در آن زبان کد، پایگاه داده، شیوه‌های نگارش نام و، برای برخی هدف‌ها، علامت نقل‌قول را انتخاب می‌کنید.
پنل خودبه‌خود باز می‌شود، مگر آنکه ویرایشگر هنگام نخستین باز شدن زبانه باریک‌تر از 640 px باشد. Hide options در بالای پنل آن را جمع می‌کند و Show options در گوشهٔ بالای سمت راست کد آن را برمی‌گرداند. پنل در جابه‌جایی میان زبانه‌ها، تا وقتی ویرایشگر باز است، باز یا جمع‌شده می‌ماند؛ این حالت مستقل از پنل زبانهٔ طرح‌واره SQL است و هرگز در فایل ذخیره نمی‌شود.

برای باز کردن منوی زمینهٔ کد، روی آن راست‌کلیک کنید: Language، Database، Table Name Case، Column Name Case و Bracket (فقط برای Doctrine، JPA و SeaORM)، هر کدام با زیرمنویی که مقدار فعلی را علامت می‌زند؛ سپس Options panel، که پنل را جمع یا باز می‌کند و تا وقتی پنل نمایش داده می‌شود علامت‌خورده است؛ و Save file.
تا وقتی این زبانه باز است، جست‌وجوی سریع گزینه‌های Database، Bracket (فقط برای Doctrine، JPA و SeaORM)، Language، Table Name Case، Column Name Case و Code Generator: Options panel را، که پنل را جمع یا باز می‌کند، ارائه می‌کند.

انتخاب TypeScript و سپس Rust از منوی زمینهٔ کد، تغییر نام ستون‌ها به Snake در پنل گزینه‌ها و کپی کردن کد

همین نمای کد، زبانهٔ Code Generator در ویژگی‌های جدول نیز هست که در آنجا به‌جای کل سند، برای همان یک جدول کد تولید می‌کند. در آنجا پنل گزینه‌ها ندارد و منوی زمینهٔ آن همان تنظیمات را تغییر می‌دهد، اما Options panel و Save file را ندارد.
در هدف‌هایی که کد کل سند با دستورهای import یا سرآیند آغاز می‌شود، کد یک جدول با همان مواردی آغاز می‌شود که آن جدول به آن‌ها نیاز دارد، مانند <?php برای PHP، import Foundation برای Swift یا $schema برای JSON Schema.

کد هنگام باز شدن زبانه نوشته می‌شود و هر بار که زبان کد، پایگاه داده، یکی از شیوه‌های نگارش نام یا علامت نقل‌قول تغییر کند، دوباره نوشته می‌شود. ویرایشی که هنگام باز بودن زبانه در نمودار انجام می‌شود، مانند ویرایش یک همکار یا یک عامل کدنویسی، زمانی نمایش داده می‌شود که از زبانه بیرون بروید و برگردید، یا یکی از آن تنظیمات تغییر کند.

پنل گزینه‌ها​

پنل زیر عنوان Saved in the document گزینه‌های Language، Database، Table Name Case و Column Name Case را فهرست می‌کند و تا وقتی زبان کد Doctrine، JPA یا SeaORM است، Bracket نیز پس از آن‌ها می‌آید. هر کدام یک فهرست کشویی است و هر تغییری کد را بی‌درنگ دوباره می‌نویسد.
وقتی زبان کد انتخاب‌شده Database یا شیوه‌های نگارش نام را نادیده می‌گیرد، این گزینه‌ها به‌صورت کم‌رنگ و با پیامی مانند Not used by DBML در زیرشان در پنل می‌مانند و همچنان قابل تغییرند.
Save file و Copy در پایین پنل قرار دارند؛ ذخیره یا کپی کردن نتیجه را ببینید.

این‌ها تنظیمات خود نمودارند، همان‌هایی که منوی زمینه و جست‌وجوی سریع نیز تغییرشان می‌دهند. Database مانند هر ویرایشی در فایل ذخیره می‌شود.
Language، Table Name Case، Column Name Case و Bracket فقط تا وقتی قفلشان در زبانهٔ تنظیمات خاموش است ذخیره می‌شوند (برای Bracket، قفل Bracket Type)، و در نمودار جدید همهٔ قفل‌ها روشن‌اند. تا وقتی قفلی روشن است، هر تغییری کد روی صفحه را دوباره می‌نویسد، اما فایل مقدار قفل‌شده را نگه می‌دارد و نمودار با همان مقدار دوباره باز می‌شود. پنل هیچ نشانی از قفل ندارد؛ برای نگه داشتن یک انتخاب در فایل، قفل آن را خاموش کنید؛ قفل را ببینید.

زبان کد​

بیست‌ودو هدف پشتیبانی می‌شوند که در سه گروه — زبان، ORM و سپس طرح‌واره — و درون هر گروه به ترتیب الفبایی فهرست شده‌اند. فهرست پنل و منوی زمینه میان گروه‌ها خطی می‌کشند، اما نام هیچ‌کدام را نمی‌آورند:

هدفگروهرابطه‌هاشاخص‌هاON DELETE / ON UPDATEذخیره با پسوند
C#زبان———.cs
Goزبان———.go
Javaزبان———.java
Kotlinزبان———.kt
PHPزبان———.php
Rustزبان———.rs
Scalaزبان———.scala
Swiftزبان———.swift
TypeScriptزبان———.ts
DoctrineORM✓✓فقط ON DELETE.php
DrizzleORM✓✓✓.ts
JPAORM✓——.java
SeaORMORM✓فقط یکتا✓.rs
SequelizeORM✓✓✓.ts
SQLAlchemyORM✓✓✓.py
TypeORMORM✓✓✓.ts
AMLطرح‌واره✓✓✓.aml
DBMLطرح‌واره✓✓✓.dbml
GraphQLطرح‌واره✓——.graphql
JSON Schemaطرح‌واره———.json
Mermaidطرح‌واره✓——.mmd
Zodطرح‌واره———.ts

پیش‌فرض GraphQL است. همهٔ هدف‌ها ستون‌ها را تولید می‌کنند؛ علامت‌های ✓ نشان می‌دهند هر هدف چه چیز دیگری تولید می‌کند.
جدول‌ها به ترتیب نام تولید می‌شوند، نه به ترتیب قرارگیری‌شان روی بوم، و شاخص‌ها همان‌هایی هستند که زیر Indexes در ویژگی‌های جدول فهرست شده‌اند، نه ردیف‌های Keys بالای آن‌ها. SeaORM فقط شاخص‌های یکتا را می‌نویسد و Mermaid ستون یکتا را با UK علامت می‌زند، اما هیچ شاخصی نمی‌نویسد.
همهٔ هدف‌ها به‌جز Java، AML، DBML و Mermaid ستون کلید اصلی را، چه Not Null روی آن تنظیم شده باشد چه نه، غیر NULL می‌نویسند. Java برای هیچ ستونی مشخص نمی‌کند که NULL می‌پذیرد یا نه، و AML، DBML و Mermaid این پرچم را همان‌طور که در نمودار است نگه می‌دارند.

آنچه برخی از هدف‌ها می‌نویسند:

  • PHP: کلاس‌های ساده با خاصیت‌های عمومی نوع‌دار که با <?php و declare(strict_types=1); آغاز می‌شوند.
  • Doctrine: موجودیت‌های Doctrine ORM 3 با صفت‌ها، برای DBAL نسخهٔ 4.2 یا بالاتر، که هر ستون در آن‌ها نوع DBAL و گزینه‌های خود را برای پایگاه دادهٔ انتخاب‌شده دارد.
  • Rust: یک pub struct برای هر جدول، با انواعی که با مسیر کامل نوشته می‌شوند، مانند chrono::NaiveDateTime یا rust_decimal::Decimal، و بدون هیچ خط use.
  • SeaORM: موجودیت‌های SeaORM 2.0 در قالب dense، که هر جدول در آن یک pub mod است، بنابراین کل متن به‌صورت یک فایل کامپایل می‌شود.
  • Swift: برای هر جدول یک struct که Codable، Hashable و Sendable است و به Swift نسخهٔ 6.1 یا بالاتر نیاز دارد.
  • TypeScript: برای هر جدول یک export interface که ردیف را به‌صورت JSON توصیف می‌کند، مانند طرح‌وارهٔ Zod — تاریخ یا زمان از نوع string است و ستونی که NULL می‌پذیرد T | null است.
  • Zod: برای هر جدول یک طرح‌وارهٔ ردیف Zod 4 و نوعی که از آن استنتاج می‌شود، بدون طرح‌وارهٔ درج و بدون رابطه.
  • JSON Schema: یک سند JSON Schema مطابق پیش‌نویس 2020-12، با یک طرح‌وارهٔ ردیف برای هر جدول زیر $defs.
  • Mermaid: یک erDiagram، از همان نوعی که GitHub رندر می‌کند، که در آن هر جدول موجودیتی است که همهٔ ستون‌ها را با نوعشان و هر نشانهٔ PK، FK یا UK فهرست می‌کند و هر رابطه خطی میان دو جدول خود است.

AML، DBML و GraphQL قالب‌های رفت‌وبرگشتی هستند: هر کدام منبعی برای وارد کردن نیز هست. وارد کردن یا صادر کردن فایل‌ها را ببینید. طرح‌واره‌های دیگر، یعنی JSON Schema، Mermaid و Zod، فقط خروجی‌اند.
DBML رنگ هر جدول را به‌صورت headercolor می‌نویسد و، در کد کل سند، برای هر گروه جدول که جدولی را در خود دارد یک بلوک TableGroup پس از دستورهای Ref می‌نویسد. AML رنگ جدول را به‌صورت نزدیک‌ترین نام از میان نام‌های رنگ AML می‌نویسد.

ON DELETE و ON UPDATE​

کنش‌های ON DELETE و ON UPDATE یک رابطه از منوی زمینهٔ آن تنظیم می‌شوند؛ ON DELETE و ON UPDATE را ببینید.
هدف‌هایی که در ستون ON DELETE / ON UPDATE جدول بخش زبان کد علامت ✓ دارند، کنش‌هایی را که یک رابطه تنظیم می‌کند می‌نویسند؛ کنشی که روی Not set مانده باشد چیزی نمی‌نویسد.
اینکه هدف‌های ORM کدام کنش‌ها را نگه می‌دارند به پایگاه دادهٔ انتخاب‌شده بستگی دارد، در حالی که AML و DBML همهٔ آن‌ها را نگه می‌دارند؛ پایگاه داده را ببینید.

  • Doctrine فقط ON DELETE را می‌نویسد، چون Doctrine هیچ ON UPDATE ندارد. این هدف onDelete: 'CASCADE' را به هر #[ORM\JoinColumn] از ManyToOne یا OneToOne سمت مالک اضافه می‌کند، مانند #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]، و چیزی به OneToMany یا OneToOne سمت معکوس اضافه نمی‌کند. رابطه‌ای با ستونی یکتا که کلید اصلی نیست به‌صورت ستون‌های ساده باقی می‌ماند که Doctrine آن‌ها را بدون پیوند نگاشت می‌کند، بنابراین هیچ کنشی برای آن نمی‌نویسد.
  • Drizzle آن‌ها را با حروف کوچک می‌نویسد. روی .references() به‌صورت گزینه می‌آیند، مانند { onDelete: "cascade", onUpdate: "set null" }؛ روی foreignKey()، که برای کلید چندستونی نوشته می‌شود، به‌صورت زنجیره‌ای می‌آیند، مانند .onDelete("restrict").onUpdate("no action").
  • SeaORM آن‌ها را روی رابطهٔ belongs_to در سمت فرزند، ابتدا ON UPDATE، با نام‌های SeaORM یعنی NoAction، Cascade، SetNull، SetDefault و Restrict می‌نویسد، مانند on_update = "Cascade", on_delete = "SetNull". has_one یا has_many در سمت والد هیچ کنشی نمی‌گیرد.
  • Sequelize مدخل‌های onDelete: "CASCADE" و onUpdate را در هر دو فراخوانی پیوند می‌نویسد: hasMany یا hasOne، و belongsTo. کلید چندستونی هیچ فراخوانی پیوندی نمی‌گیرد، بنابراین Sequelize هیچ کنشی برای آن نمی‌نویسد.
  • SQLAlchemy آرگومان‌های ondelete="CASCADE" و onupdate را برای کلید تک‌ستونی به ForeignKey() و برای کلید چندستونی به ForeignKeyConstraint() می‌دهد.
  • TypeORM گزینه‌های onDelete: "CASCADE" و onUpdate را روی @ManyToOne یا @OneToOne سمت مالک می‌نویسد و هرگز روی سمت معکوس نمی‌نویسد. این هدف همیشه SET DEFAULT را کنار می‌گذارد، چون TypeORM آن را به‌صورت DEFAULT می‌نوشت که هیچ پایگاه داده‌ای آن را نمی‌پذیرد.
  • DBML تنظیماتی به Ref اضافه می‌کند، مانند [delete: set null, update: no action].
  • AML رابطه‌ای را که کنشی دارد، به‌جای نوشتن درون‌خطی روی ستونش، به‌صورت یک دستور مستقل rel با خاصیت‌هایی مانند {onDelete: cascade, onUpdate: "set null"} می‌نویسد.

JPA هیچ‌کدام را نمی‌نویسد: JPA ساده گزینه‌ای برای آن‌ها ندارد و مولد کد از @OnDelete در Hibernate استفاده نمی‌کند. Mermaid نیز هیچ‌کدام را نمی‌نویسد، چون خطی در erDiagram جایی برای آن‌ها ندارد.
در زبانهٔ Code Generator ویژگی‌های جدول، که یک جدول را نشان می‌دهد، DBML هیچ Ref و AML هیچ دستور rel نمی‌نویسد، بنابراین هیچ‌کدام کنش‌ها را در آنجا نشان نمی‌دهند؛ AML رابطهٔ تک‌ستونی‌ای را که کنش دارد، مانند رابطهٔ بدون کنش، درون‌خطی روی ستونش نگه می‌دارد. Mermaid در آنجا اصلاً خط رابطه‌ای نمی‌نویسد. Doctrine و SeaORM در آنجا همان موجودیتی را می‌نویسند که در کل سند می‌نویسند، همراه با کنش‌ها.

شیوهٔ نگارش نام​

Table Name Case و Column Name Case هر کدام Pascal، Camel، Snake و None را پشتیبانی می‌کنند.
پیش‌فرض برای نام جدول‌ها Pascal و برای نام ستون‌ها Camel است. None نام را همان‌طور که در نمودار نوشته شده است تولید می‌کند.
در هر شیوهٔ نگارش، نامی که زبان هدف رزرو کرده است، جایی که آن زبان بتواند آن را گریز دهد گریز داده می‌شود، مانند @class در C# یا r#type در Rust، و جایی که نتواند تغییر نام می‌یابد، مانند class_ در Java.

AML، DBML و Mermaid هر دو تنظیم را نادیده می‌گیرند و همیشه نام‌ها را همان‌طور که در نمودار آمده‌اند تولید می‌کنند.
SeaORM نیز آن‌ها را نادیده می‌گیرد: فیلدها و ماژول‌ها را به شیوهٔ snake case نام‌گذاری می‌کند، همان شکلی که SeaORM آن را بازمی‌خواند، و نام‌های ذخیره‌شده را در table_name و، هر جا متفاوت باشند، در column_name می‌آورد.
برای این چهار هدف، پنل هر دو فهرست را کم‌رنگ می‌کند و پیام Not used by را زیر آن‌ها نشان می‌دهد.

پایگاه داده​

انواع داده بر اساس پایگاه دادهٔ انتخاب‌شده تعیین می‌شوند؛ پایگاه‌های داده را ببینید.
در این زبانه آن را از فهرست Database در پنل، از Database در منوی زمینه یا از جست‌وجوی سریع انتخاب کنید تا کد بی‌درنگ دوباره نوشته شود. این تنها تنظیم پایگاه دادهٔ نمودار است، همان تنظیمی که منوی زمینهٔ بوم و زبانهٔ طرح‌واره SQL تعیین می‌کنند، بنابراین تغییری که اینجا بدهید در آنجا نیز نمایش داده می‌شود.
Drizzle گویش خود را از همین تنظیم می‌گیرد: pgTable برای PostgreSQL، mysqlTable برای MySQL و MariaDB، sqliteTable برای SQLite و pgTable برای هر پایگاه دادهٔ دیگر.
SeaORM هر جا که SeaORM در غیر این صورت در PostgreSQL، MySQL، MariaDB یا SQLite نوع ستون متفاوتی ایجاد می‌کرد، یک column_type می‌نویسد و در MSSQL، Oracle، Snowflake یا Databricks، که SeaORM برای آن‌ها هیچ بک‌اندی ندارد، هیچ‌کدام را نمی‌نویسد.

پایگاه دادهٔ انتخاب‌شده همچنین تعیین می‌کند که هدف‌های ORM کدام کنش‌های ON DELETE و ON UPDATE را بنویسند.
Doctrine، SeaORM، Sequelize، SQLAlchemy و TypeORM هر کنشی را که طرح‌واره SQL آن پایگاه داده کنار می‌گذارد کنار می‌گذارند، مانند SET DEFAULT در MySQL و MariaDB، RESTRICT در MSSQL یا همهٔ کنش‌ها به‌جز NO ACTION در Snowflake و Databricks، بنابراین پیش‌فرض خود پایگاه داده اعمال می‌شود. فهرست کامل در ON DELETE و ON UPDATE آمده است.
Drizzle به‌جای آن از گویشی که می‌نویسد پیروی می‌کند: کد mysqlTable کنش SET DEFAULT را کنار می‌گذارد، در حالی که کد pgTable و sqliteTable همهٔ کنش‌ها را نگه می‌دارد، از جمله کد pgTable که این هدف برای MSSQL، Oracle، Snowflake و Databricks می‌نویسد.

AML، DBML و Mermaid استثنا هستند: این هدف‌ها هر نوع داده را همان‌طور که در نمودار نوشته شده است تولید می‌کنند، بنابراین تنظیم پایگاه داده خروجی آن‌ها را تغییر نمی‌دهد و پنل Database را برای آن‌ها کم‌رنگ می‌کند. AML و DBML هر کنشی را که رابطه تنظیم می‌کند می‌نویسند و Mermaid هیچ‌کدام را نمی‌نویسد.

علامت نقل‌قول​

Bracket فقط تا وقتی زبان کد Doctrine، JPA یا SeaORM است، در پنل، منوی زمینه و جست‌وجوی سریع ارائه می‌شود.
این همان تنظیم علامت نقل‌قول زبانهٔ طرح‌واره SQL است — طرح‌واره SQL را ببینید — بنابراین تغییری که اینجا بدهید، نحوهٔ نقل‌قول نام‌ها در طرح‌واره SQL را نیز تغییر می‌دهد. این تنظیم SingleQuote، DoubleQuote، Backtick و None را ارائه می‌کند و با None آغاز می‌شود.

  • Doctrine: با هر علامت نقل‌قولی به‌جز None، نام هر جدول، ستون و ستون اتصال داخل بک‌تیک قرار می‌گیرد، که روش Doctrine برای مشخص کردن نامی است که باید نقل‌قول شود، مانند #[ORM\Table(name: '`order`')]. با None فقط نامی که به آن نیاز دارد چنین می‌شود: واژه‌ای که یک پایگاه داده رزرو کرده است، نامی که شناسهٔ سادهٔ ASCII نیست یا نامی که داخل گیومه تایپ شده است.
  • JPA: با هر علامت نقل‌قولی به‌جز None، نام جدولی که واژهٔ رزروشده است درون @Table در علامت نقل‌قول قرار می‌گیرد، مانند @Table(name = "\"user\""). با None بدون علامت نقل‌قول باقی می‌ماند، همان‌طور که طرح‌واره SQL آن را باقی می‌گذارد.
  • SeaORM: با None، نام‌ها همان‌طور نوشته می‌شوند که پایگاه داده آن‌ها را ذخیره می‌کند: نام جدولی که نقطه دارد به schema_name و table_name تقسیم می‌شود و در PostgreSQL نامی که در علامت نقل‌قول نیست به حروف کوچک تبدیل می‌شود. با هر علامت نقل‌قول دیگری، نام یکپارچه و همان‌طور که نوشته شده است نگه داشته می‌شود.

ذخیره یا کپی کردن نتیجه​

Save file، در پایین پنل گزینه‌ها یا در منوی زمینه، کد نمایش‌داده‌شده را به‌صورت فایل ذخیره می‌کند.
نام این فایل، مانند هر فایل صادرشده، <database name>-<timestamp> و پس از آن پسوند مندرج در جدول بخش زبان کد است، مانند shop-2026-10-12T04_05_06.ts، و فایل در میزبانتان به همان جایی می‌رود که هر فایل صادرشدهٔ دیگری می‌رود؛ صادر کردن را ببینید. Java و JPA همهٔ کلاس‌ها را، همان‌طور که زبانه نشان می‌دهد، در یک فایل .java قرار می‌دهند.
منوی Export گزینه‌ای برای مولد کد ندارد و زبانهٔ Code Generator ویژگی‌های جدول نمی‌تواند فایل ذخیره کند.

برای کپی کردن کد، روی Copy در پایین پنل کلیک کنید، یا نشانگر را روی کد ببرید و روی دکمهٔ کپی در گوشهٔ بالای سمت راست آن کلیک کنید، که در ویژگی‌های جدول تنها راه است.
اعلان Copied! با یک علامت تیک، کپی را به مدت دو ثانیه تأیید می‌کند. اگر مرورگر یا میزبان دسترسی به کلیپ‌بورد را رد کند، به‌جای آن اعلان Couldn't copy to the clipboard با یک علامت هشدار این را اطلاع می‌دهد. کپی دوباره، به‌جای افزودن اعلانی دیگر، اعلان قبلی را جایگزین می‌کند.
متن قابل انتخاب نیز هست، بنابراین می‌توانید فقط بخشی را که نیاز دارید بردارید.