مارک پلاس

تکنولوژی نوین اینترنتی

Foreign Keys در Migrations

دسته‌بندی‌ها

Foreign Keys در Migrations

🔗 Foreign Keys در Migrations لاراول


📌 تعریف رابطه بین جدول‌ها به روش استاندارد


🧠 Foreign Key چیست؟

در پایگاه داده، Foreign Key ستونی است که به کلید اصلی (primary key) یک جدول دیگر اشاره می‌کند. این کار باعث برقراری رابطه بین جدول‌ها و حفظ انسجام داده‌ها می‌شود.

مثلاً در جدول posts، ستون user_id به ستون id جدول users اشاره می‌کند.


🛠️ ساخت جدول با Foreign Key در Laravel

bash
php artisan make:migration create_posts_table

سپس در فایل مایگریشن:

php
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('user_id'); $table->string('title'); $table->text('body'); $table->timestamps(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); });

📌 توضیح کد بالا

قسمتتوضیح
unsignedBigIntegerچون id در جدول users از نوع bigIncrements هست
foreign()تعریف کلید خارجی
references('id')اشاره به ستون id جدول مقصد
on('users')جدول مقصد رابطه
onDelete('cascade')اگر user حذف شد، پست‌هاش هم حذف بشن

⚙️ روش ساده‌تر با Eloquent:

از foreignId() استفاده کن:

php
$table->foreignId('user_id')->constrained()->onDelete('cascade');

این معادل همان کدی است که دستی نوشتیم، ولی کوتاه‌تر و خواناتر!


🔄 گزینه‌های حذف و به‌روزرسانی

php
$table->foreignId('user_id') ->constrained() ->onUpdate('cascade') // وقتی کلید اصلی تغییر کرد، این هم تغییر کنه ->onDelete('set null'); // وقتی کلید اصلی حذف شد، این مقدار null بشه

نکته: برای set null باید user_id را nullable تعریف کرده باشی:

php
$table->foreignId('user_id')->nullable()->constrained()->onDelete('set null');

🧹 حذف Foreign Key در مایگریشن‌ها

اگر بخوای foreign key رو حذف کنی:

php
$table->dropForeign(['user_id']);

یا اگر اسم constraint رو می‌دونی:

php
$table->dropForeign('posts_user_id_foreign');

برای دیدن نام Foreign Key constraint می‌تونی از ابزارهای پایگاه داده مثل phpMyAdmin یا SHOW CREATE TABLE استفاده کنی.


📋 چند مثال کاربردی

✅ جدول comments که به posts و users متصل است:

php
Schema::create('comments', function (Blueprint $table) { $table->id(); $table->foreignId('post_id')->constrained()->onDelete('cascade'); $table->foreignId('user_id')->constrained()->onDelete('cascade'); $table->text('content'); $table->timestamps(); });

🧪 چک‌لیست تعریف کلید خارجی

  • ستون از نوع unsignedBigInteger یا foreignId باشه

  • رابطه references و on مشخص باشه

  • گزینه‌های onDelete و onUpdate به درستی تنظیم شده باشه

  • اگر set null، حتماً nullable باشه

  • ایندکس‌ها به‌درستی تعریف شده باشن (در صورت نیاز)


✅ جمع‌بندی

تعریف Foreign Key در Laravel Migration نه‌تنها ساختار دیتابیس رو منظم‌تر می‌کنه، بلکه جلوی ورود داده‌های نادرست رو هم می‌گیره. با استفاده از foreignId()->constrained() کدت تمیزتر و استانداردتر می‌شه.

محتوای مرتبط

پست‌های مرتبط