TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #347 208
فصل پنج - Migrations and Database

بخش اول - تعریف
و اجرای Migrationها

1- متد unique
این متد یک ایندکس یکتا برای یک یا چند ستون تعریف می‌کند. ایندکس یکتا باعث می‌شود که مقدارهای تکراری برای این ستون‌ها در جدول ذخیره نشود.
$table->string('email')->unique();


2- متد index
این متد یک ایندکس ساده برای یک یا چند ستون ایجاد می‌کند. این ایندکس برای بهبود عملکرد کوئری‌هایی استفاده می‌شود که مرتباً این ستون‌ها را جستجو یا فیلتر می‌کنند.
$table->string('username')->index();


3- متد primary
این متد یک کلید اصلی (Primary Key) برای یک یا چند ستون تعریف می‌کند. ستون‌های کلید اصلی نمی‌توانند مقدار NULL بپذیرند و باید یکتا باشند.
$table->integer('order_id')->primary();


4- متد fullText
این متد یک ایندکس تمام‌متنی (Full Text Index) برای جستجوی سریع متن در ستون‌های متنی (مثل TEXT یا VARCHAR) ایجاد می‌کند.
$table->fullText('content');


5- متد spatialIndex
این متد یک ایندکس مکانی (Spatial Index) برای ستون‌های مختصات جغرافیایی (مانند ستون‌هایی با نوع GEOMETRY) ایجاد می‌کند.
$table->point('coordinates')->spatialIndex();


6- متد renameIndex
این متد کلید اصلی جدول را حذف می‌کند.
 $table->dropPrimary();


7- متد dropUnique
این متد یک ایندکس یکتا را از جدول حذف می‌کند.
$table->dropUnique('users_email_unique');


8- متد dropIndex
این متد یک ایندکس ساده را از جدول حذف می‌کند.
$table->dropIndex('users_username_index');


9- متد dropFullText
این متد یک ایندکس تمام‌متنی را از جدول حذف می‌کند.
$table->dropFullText('articles_content_fulltext');


10- متد dropSpatialIndex
این متد یک ایندکس مکانی را از جدول حذف می‌کند.
$table->dropSpatialIndex('locations_coordinates_spatialindex');


11- متد foreign
این متد مشخص می‌کند که یک ستون در جدول فعلی قرار است به‌عنوان کلید خارجی عمل کند.
معمولاً به همراه متدهای references و on استفاده می‌شود.
$table->unsignedBigInteger('user_id');
$table->foreign('user_id');


12- متد references
این متد مشخص می‌کند که کلید خارجی به کدام ستون از جدول دیگر اشاره دارد.
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id');


13- متد on
این متد مشخص می‌کند که کلید خارجی باید به کدام جدول در پایگاه داده متصل شود.
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');


14- متد foreignId
این متد یک راه کوتاه‌تر برای تعریف ستون کلید خارجی است. به طور پیش‌فرض، نوع ستون را unsignedBigInteger تعریف می‌کند.
$table->foreignId('user_id');


15- متد constrained
این متد تعریف کلید خارجی را آسان‌تر و سریع‌تر می‌کند. زمانی که از آن استفاده کنید:
- ستون را به‌عنوان کلید خارجی تعریف می‌کند.
- به صورت پیش‌فرض جدول مقصد را از نام ستون حدس می‌زند (مثلاً اگر ستون user_id باشد، به جدول users اشاره می‌کند).
- به ستون id به‌عنوان کلید اصلی در جدول مقصد اشاره می‌کند.
$table->foreignId('user_id')->constrained('users');


16- متد dropForeign
برای حذف یک کلید خارجی (Foreign Key) در جدول استفاده می‌شود. این متد زمانی استفاده می‌شود که بخواهید محدودیت‌های کلید خارجی روی یک ستون را از بین ببرید.
$table->dropForeign('posts_user_id_foreign');


17و 18- متد های onUpdate و onDelete
زمانی که یک کلید خارجی (foreign key) تعریف می‌کنید، می‌توانید رفتار حذف یا به‌روزرسانی رکوردهای مرتبط را مشخص کنید.
$table->foreignId('user_id')->constrained('users')->onDelete('cascade')->onUpdate('cascade');

ورودی می تواند حالت های restrict، set null، no action نیز باشد.

19- متد cascadeOnDelete
وقتی رکورد اصلی حذف شود، رکوردهای مرتبط در جدول فرعی هم حذف می‌شوند.
$table->foreignId('user_id')->constrained('users')->cascadeOnDelete();


20- متد restrictOnDelete
اگر رکوردهای مرتبط در جدول فرعی وجود داشته باشند، حذف رکورد اصلی ممنوع است.

21- متد nullOnDelete
اگر رکورد اصلی حذف شود، مقدار کلید خارجی در جدول فرعی به NULL تغییر می‌کند.

22- متد noActionOnDelete
حذف رکورد اصلی تأثیری روی جدول فرعی ندارد (هیچ کاری انجام نمی‌شود).

23- متد restrictOnUpdate
اگر رکورد مرتبط در جدول فرعی وجود داشته باشد، تغییر مقدار کلید خارجی در جدول اصلی ممنوع است.

24- متد nullOnUpdate
اگر مقدار کلید خارجی در جدول اصلی تغییر کند، مقدار کلید خارجی در جدول فرعی به NULL تغییر می‌کند.

25- متد noActionOnUpdate
تغییر مقدار کلید خارجی در جدول اصلی تأثیری روی جدول فرعی ندارد (هیچ کاری انجام نمی‌شود).

#laravel #لاراول #فصل_۵
@AmirhDeveloper
.
  • ❤ 6
  • 👍 1
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →