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

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

برای ساخت یک جدول ساده با استفاده از مایگریشن در لاراول، می‌توانید مراحل زیر را انجام دهید:

ابتدا یک فایل مایگریشن جدید با دستور زیر ایجاد می‌کنیم:
php artisan make:migration create_posts_table --create=posts


این دستور یک فایل مایگریشن جدید به نام create_posts_table در پوشه database/migrations ایجاد می‌کند.

حالا می‌توانید به فایل ایجاد شده مراجعه کنید و متد up() را ویرایش کنید تا جدول posts ساخته شود. به عنوان مثال:
return new class extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content')->nullable();
$table->timestamps();
});
}

public function down()
{
Schema::dropIfExists('posts');
}
}


مایگریشن بالا یک جدول با نام posts ایجاد میکند و 5 فیلد مشخص شده در متد up را در آن ایجاد میکند.

در نهایت، برای اجرای مایگریشن و ایجاد جدول در پایگاه داده، دستور زیر را اجرا کنید:
php artisan migrate


در ادامه متد های قابل استفاده برای ساخت جدول توضیح داده می شود.

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

1- متد create
این متد برای ایجاد یک جدول جدید استفاده می‌شود. درون این متد، می‌توان با استفاده از کلاس Blueprint ستون‌ها و ویژگی‌های جدول را تعریف کرد.
Schema::create('posts', function (Blueprint $table) {
//
});


2- متد table
این متد مشابه create اما برای تغییر ساختار یک جدول موجود استفاده می‌شود. می‌توانید ستون‌ها را اضافه، تغییر یا حذف کنید.

3- متد hasTable
این متد بررسی می‌کند که آیا جدول مشخصی در پایگاه داده وجود دارد یا خیر.
if (Schema::hasTable('posts')) {
//
}


4- متد hasColumn
این متد بررسی می‌کند که آیا ستون خاصی در یک جدول مشخص وجود دارد یا خیر.
if (Schema::hasColumn('posts', 'title')) {
//
}


5- متد hasIndex
این متد بررسی می‌کند که آیا یک ایندکس (کلید یا شاخص) خاص در جدول موردنظر وجود دارد یا خیر. توجه داشته باشید که این متد ممکن است به همراه برخی نسخه‌های دیتابیس‌ها یا پل‌های خاص لاراول بیشتر کاربرد داشته باشد.
if (Schema::hasIndex('posts', 'posts_title_index')) {
//
}


6- متد connection
این متد برای انجام عملیات Schema بر روی یک اتصال خاص پایگاه داده استفاده می‌شود. به شما اجازه می‌دهد با دیتابیس‌های مختلفی کار کنید.
Schema::connection('sqlite')->create('products', function (Blueprint $table) {
//
});


7- متد rename
این متد نام یک جدول را تغییر می‌دهد.
Schema::rename('old_posts', 'new_posts');


8- متد drop
این متد برای حذف کامل یک جدول استفاده می‌شود.
Schema::drop('posts');


9- متد dropIfExists
این متد جدول را تنها در صورتی که وجود داشته باشد، حذف می‌کند. این رویکرد از بروز خطا در صورت عدم وجود جدول جلوگیری می‌کند.

10- متد enableForeignKeyConstraints
این متد، محدودیت‌های کلید خارجی را در پایگاه داده فعال می‌کند. این متد معمولاً در سیستم‌های مدیریت پایگاه داده مانند MySQL و SQLite مفید است.
Schema::enableForeignKeyConstraints();


11- متد disableForeignKeyConstraints
این متد، محدودیت‌های کلید خارجی را در پایگاه داده غیرفعال می‌کند. غیرفعال کردن محدودیت‌ها می‌تواند برای حذف جداول یا تغییر ساختار آنها (مانند حذف یا اضافه کردن ستون‌های مرتبط) که ممکن است در حالت عادی باعث خطا شود، مفید باشد.

12- متد withoutForeignKeyConstraints
این متد یک Closure را اجرا می‌کند که در حین اجرای آن، محدودیت‌های کلید خارجی به طور موقت غیرفعال می‌شوند. پس از پایان اجرای Closure، محدودیت‌ها به‌طور خودکار به حالت اولیه بازمی‌گردند.
Schema::withoutForeignKeyConstraints(function () {
Schema::dropIfExists('posts');
});


در قسمت ها بعدی با متد کلاس Blueprint برای کار با column ها می پردازیم.

▫️ 🟠
🔎 #laravel #لاراول #فصل_۵
💠 @AmirhDeveloper
.
  • 👍 3
  • ❤ 2
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 →