دیتابیس: مایگریشن

در حال تکمیل منقضی شده رایگان
این داکیومنت از طرف توسعه‌دهنده ساپورت نمی‌شود، جدیدترین ورژن داکیومنت بزودی ترجمه خواهد شد.

مقدمه

مایگریشن‌ها نقش ورژن کنترل را برای دیتابیس بازی می‌کنند، که به اعضای تیم‌تان امکان ویرایش و به اشتراک‌گذاری اِسکیمای دیتابیس اپلیکیشن را می‌دهد. مایگریشن‌ها معمولا از اِسکیما بیلدر (Schema Builder) استفاده می‌کنند تا به سادگی بتوانید اِسکیمای دیتابیس اپلیکیشن خود را بسازید. اگر تاکنون مجبور بوده‌اید تا به هم‌تیمی‌های خود بگویید تا یک ستون را به صورت دستی به اِسکیمای دیتابیسِ لوکال‌شان اضافه کنند، با مشکلی مواجه هستید که مایگریشن‌ها آن را حل کرده‌اند.

فساد Schema دیتابیس اَگنوستیک (database agnostic) را ارائه می‌دهد که امکان ساخت و دستکاری تیبل‌های تمامی سیستم‌های دیتابیس ساپورت شده توسط لاراول را فراهم می‌آورد.

تولید مایگریشن

برای ساخت یک مایگریشن، از کامند آرتیزان make:migration استفاده کنید:

php artisan make:migration create_users_table

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

آپشن‌های --table و --create می‌توانند برای نمایش نام تیبل و اینکه آیا مایگریشن منجر به ساخت تیبل جدیدی خواهد شد، استفاده شود. این آپشن‌ها، نام دیتابیس، متد فساد Schema و قسمتی از بدنه را برای مایگریشن سِت می‌کنند.

php artisan make:migration create_users_table --create=users

php artisan make:migration add_votes_to_users_table --table=users

اگر می‌خواهید مسیر خروجی کاستومایزی را برای تولید مایگریشن مشخص کنید، می‌توانید هنگام اجرای کامند make:migration از آپشن --path استفاده کنید. مسیر مشخص شده باید به مسیر پایه اپلیکیشن‌تان مرتبط باشد.

ساختار مایگریشن

هر کلاس مایگریشن حاوی دو متدِ up و down است. متد up برای افزودن تیبل‌ها، ستون‌ها و ایندکس‌های جدید به دیتابیس استفاده می‌شود، در حالی که متد down باید عملیات اجرا شده توسط متد up را برعکس کند.

در بدنه هر دو متد می‌توانید از اِسکیما بیلدر لاراول برای ساخت و ویرایش تیبل‌ها استفاده کنید. برای آشنایی با تمامی متدهایی که در Schema در دسترس هستند، داکیومنت آن را مطالعه کنید. برای مثال، مایگریشن مثال زیر، یک تیبل با نام flights می‌سازد:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFlightsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('airline');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('flights');
    }
}

اجرای مایگریشن‌ها

برای اجرای تمامی مایگریشن‌های اجرا نشده، کامند آرتیزان migrate را اجرا کنید:

php artisan migrate

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

اجرای مایگریشن در محیط پروداکشن

برخی از عملیاتی که توسط مایگریشن‌ها انجام می‌شوند، مخرب هستند، به این معنی که می‌توانند منجر به از دست دادن داده‌ها شوند. به منظور محافظت در مقابل اجرای این کامندها در محیط پروداکشن، باید قبل از اجرای این کامندها، اجرای آن‌ها را تایید کنید. برای اجرای کامندها بدون تاییدیه، از فلَگ --force استفاده کنید:

php artisan migrate --force

رول‌بَک کردن مایگریشن‌ها

برای رول‌بَک کردن آخرین عملیات مایگریشن اجرا شده، می‌توانید از کامند استفاده کنید. این کامند آخرین دسته مایگریشن‌های اجرا شده را که می‌توانند شامل چندین فایل باشند را رول‌بَک می‌کند.

php artisan migrate:rollback

با استفاده از آپشن step برای کامند rollback می‌توانید تعداد مایگریشن‌ها برای رول‌بَک را محدود کنید. برای مثال، کامند زیر پنج مایگریشن آخر را رول‌بَک می‌کند:

php artisan migrate:rollback --step=5

کامند migrate:reset تمامی مایگریشن‌های اپلیکیشن را رول‌بَک خواهد کرد:

php artisan migrate:reset

رول‌بَک و مایگریت مجدد با یک کامند

کامند migrate:refresh تمامی مایگریشن‌ها را رول‌بَک کرده و سپس کامند migrate را اجرا می‌کند. این کامند در واقع کل دیتابیس را دوباره می‌سازد:

php artisan migrate:refresh

// Refresh the database and run all database seeds...
php artisan migrate:refresh --seed

برای رول‌بَک و مایگریت مجدد تعداد محدودی از مایگریشن‌ها، از آپشن step برای کامند refresh استفاده کنید. برای مثال، کامند زیر، پنج مایگریشن آخر را رول‌بَک کرده و مجددا می‌سازد:

php artisan migrate:refresh --step=5

حذف تمامی تیبل‌ها و مایگریت

کامند migrate:fresh تمامی تیبل‌ها را از دیتابیس حذف کرده و سپس کامند migrate را اجرا می‌کند:

php artisan migrate:fresh

php artisan migrate:fresh --seed

تیبل‌ها

ساخت تیبل

برای ساخت یک تیبل جدید در دیتابیس، از متد create فساد Schema استفاده کنید. متد create دو آرگومان می‌پذیرد. اولین آرگومان نام تیبل و دومین آرگومان یک کلوژر است که آبجکت Blueprint که برای تعریف تیبل جدید استفاده می‌شود را می‌گیرد:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
});

طبیعتا، هنگام ساخت تیبل، می‌توانید از متدهای مخصوص ایجاد ستون اسکیما بیلدر، برای تعریف ستون‌های تیبل استفاده کنید.

بررسی وجود ستون/تیبل

با استفاده از متدهای hasTable و hasColumn می‌توانید به راحتی وجود یا عدم وجود یک ستون یا تیبل را بررسی کنید:

if (Schema::hasTable('users')) {
    //
}

if (Schema::hasColumn('users', 'email')) {
    //
}

دیتابیس کانکشن و آپشن‌های تیبل

اگر می‌خواهید یک عملیات اِسکیما را بر روی کانکشنی غیر از کانکشن پیش‌فرض اجرا کنید، از متد connection استفاده کنید:

Schema::connection('foo')->create('users', function (Blueprint $table) {
    $table->increments('id');
});

از کامندهای زیر در اِسکیما بیلدر، می‌توانید برای تعریف آپشن‌های تیبل استفاده کنید:

کامند توضیح
$table->engine = 'InnoDB'; موتور ذخیره‌سازی تیبل را مشخص می‌کند. (MySQL)
$table->charset = 'utf8'; کَرَکتر سِت پیش‌فرض (default character set) تیبل را مشخص می‌کند. (MySQL)
$table->collation = 'utf8_unicode_ci'; یک کولیشن (collation) پیش‌فرض برای تیبل مشخص می‌کند. (MySQL)
$table->temporary(); یک تیبل موقت ایجاد می‌کند. (به جز در SQL Server)

تغییر نام / حذف تیبل

برای تغییر نام تیبل موجود در دیتابیس، از متد rename استفاده کنید:

Schema::rename($from, $to);

برای حذف یک تیبل موجود در دیتابیس، از متدهای drop یا dropIfExists استفاده کنید:

Schema::drop('users');

Schema::dropIfExists('users');

تغییر نام تیبل دارای کلیدهای خارجی

قبل از تغییر نام یک تیبل، باید مشخص کنید که هر قید کلید خارجی (foreign key constraints) موجود در تیبل، به جای اینکه لاراول نامی بر پایه کانونشن‌های خود بر آن بگذارد، دارای نامی مشخص در فایل‌های مایگریشن دارد. در غیر اینصورت، نام قید کلید خارجی، به نام قدیمی تیبل اشاره خواهد داشت.

ستون‌ها

ساخت ستون

متد table در فساد Schema می‌تواند برای آپدیت تیبل موجود استفاده شود. مانند متد create، متد table نیز دو آرگومان می‌پذیرد: نام تیبل و یک کلوژر که یک instance از Blueprint را می‌گیرد که برای افزودن ستون‌ها به تیبل استفاده می‌شود.

Schema::table('users', function (Blueprint $table) {
    $table->string('email');
});

تایپ‌های ستونی در دسترس

طبیعتا، اِسکیما بیلدر حاوی تایپ‌های مختلفی برای ستون‌ها است که می‌توانید هنگام ساخت تیبل خود از آن‌ها استفاده کنید:

کامند توضیحات
$table->bigIncrements('id'); معادل ستون Auto-incrementing UNSIGNED BIGINT (primary key)
$table->bigInteger('votes'); معادل ستون BIGINT
$table->binary('data'); معادل ستون BLOB
$table->boolean('confirmed'); معادل ستون BOOLEAN
$table->char('name', 100); معادل ستون CHAR با طول دلخواه
$table->date('created_at'); معادل ستون DATE
$table->dateTime('created_at'); معادل ستون DATETIME
$table->dateTimeTz('created_at'); معادل ستون DATETIME (با timezone)
$table->decimal('amount', 8, 2);

معادل ستون DECIMAL به همراه کل ارقام (precision) و ارقام اعشاری (scale)

$table->double('amount', 8, 2);

معادل ستون DOUBLE به همراه کل ارقام (precision) و ارقام اعشاری (scale)

$table->enum('level', ['easy', 'hard']); معادل ستون ENUM
$table->float('amount', 8, 2);

معادل ستون FLOAT به همراه کل ارقام (precision) و ارقام اعشاری (scale)

$table->geometry('positions'); معادل ستون GEOMETRY
$table->geometryCollection('positions'); معادل ستون GEOMETRYCOLLECTION
$table->increments('id'); معادل ستون Auto-incrementing UNSIGNED INTEGER (primary key)
$table->integer('votes'); معادل ستون INTEGER
$table->ipAddress('visitor'); معادل ستون IP address
$table->json('options'); معادل ستون JSON
$table->jsonb('options'); معادل ستون JSONB
$table->lineString('positions'); معادل ستون LINESTRING
$table->longText('description'); معادل ستون LONGTEXT
$table->macAddress('device'); معادل ستون MAC address
$table->mediumIncrements('id'); معادل ستون Auto-incrementing UNSIGNED MEDIUMINT (primary key)
$table->mediumInteger('votes'); معادل ستون MEDIUMINT
$table->mediumText('description'); معادل ستون MEDIUMTEXT
$table->morphs('taggable'); معادل ستون‌های taggable_id UNSIGNED BIGINT و taggable_type VARCHAR
$table->multiLineString('positions'); معادل ستون MULTILINESTRING
$table->multiPoint('positions'); معادل ستون MULTIPOINT
$table->multiPolygon('positions'); معادل ستون MULTIPOLYGON
$table->nullableMorphs('taggable'); حالت nullable برای ستون‌های morphs()
$table->nullableTimestamps(); نام مستعاری برای timestamps()
$table->point('position'); معادل ستون POINT
$table->polygon('positions'); معادل ستون POLYGON
$table->rememberToken(); معادل ستون nullable remember_token VARCHAR(100)
$table->smallIncrements('id'); معادل ستون Auto-incrementing UNSIGNED SMALLINT (primary key)
$table->smallInteger('votes'); معادل ستون SMALLINT
$table->softDeletes(); معادل ستون nullable deleted_at TIMESTAMP برای soft delete
$table->softDeletesTz(); معادل ستون nullable deleted_at TIMESTAMP (به همراه timezone) برای soft delete
$table->string('name', 100); معادل ستون VARCHAR با طول دلخواه
$table->text('description'); معادل ستون TEXT
$table->time('sunrise'); معادل ستون TIME
$table->timeTz('sunrise'); معادل ستون TIME (به همراه timezone)
$table->timestamp('added_on'); معادل ستون TIMESTAMP
$table->timestampTz('added_on'); معادل ستون TIMESTAMP (به همراه timezone)
$table->timestamps(); معادل ستون‌های created_at و updated_at از نوع TIMESTAMP و nullable
$table->timestampsTz(); معادل ستون‌های created_at و updated_at از نوع TIMESTAMP (به همراه timezone) و nullable
$table->tinyIncrements('id'); معادل ستون Auto-incrementing UNSIGNED TINYINT (primary key)
$table->tinyInteger('votes'); معادل ستون TINYINT
$tabl->unsignedBigInteger('votes'); معادل ستون UNSIGNED BIGINT
$table->unsignedDecimal('amount', 8, 2); معادل ستون UNSIGNED DECIMAL به همراه کل ارقام (precision) و ارقام اعشاری (scale)
$table->unsignedInteger('votes'); معادل ستون UNSIGNED INTEGER
$table->unsignedMediumInteger('votes'); معادل ستون UNSIGNED MEDIUMINT
$table->unsignedSmallInteger('votes'); معادل ستون UNSIGNED SMALLINT
$table->unsignedTinyInteger('votes'); معادل ستون UNSIGNED TINYINT
$table->uuid('id'); معادل ستون UUID
$table->year('birth_year'); معادل ستون YEAR

مدیفایرهای ستون

علاوه بر انواع ستون‌های لیست شده در جدول بالا، "مُدیفایرهای" مختلفی وجود دارد که می‌توانید هنگام افزودن یک ستون به تیبل از آن‌ها استفاده کنید. برای مثال، برای "قابل نال" ساختن ستون، می‌توانید از متد nullable استفاده کنید:

Schema::table('users', function (Blueprint $table) {
    $table->string('email')->nullable();
});

جدول زیر حاولی لیستی از مدیفایرهای ستون در دسترس است. این لیست حاوی مدیفایرهای index نیست:

مدیفایر توضیح
->after('column') ستون را بعد از ستون دیگری ایجاد می‌کند (MySQL)
->autoIncrement() ستون‌های INTEGER را به عنوان auto-increment (primary key) سِت می‌کند.
->charset('utf8') برای ستون یک character set مشخص می‌کند (MySQL)
->collation('utf8_unicode_ci') یک collation برای ستون مشخص می‌کند. (MySQL/SQL Server)
->comment('my comment') یک کامنت به ستون اضافه می‌کند. (MySQL)
->default($value) برای ستون مقداری پیش‌فرض را تعیین می‌کند.
->first() ستون را به عنوان اولین ستون تیبل قرار می‌دهد. (MySQL)
->nullable($value = true) اجازه می‌دهد تا ستون مقادیر NULL را نیز بپذیرد.
->storedAs($expression) یک ستون stored generated ایجاد می‌کند. (MySQL)
->unsigned() برای ستون‌های INTEGER اتریبیوت UNSIGNED سِت می‌کند. (ستون MySQL)
->useCurrent() ستون‌های TIMESTAMP را به گونه‌ای سِت می‌کند تا CURRENT_TIMESTAMP را به عنوان مقدار پیش‌فرض استفاده کنند.
->virtualAs($expression) یک ستون virtual generated ایجاد می‌کند. (MySQL)

ویرایش ستون‌ها

پیش‌نیازها

قبل از ویرایش یک ستون، باید دیپندنسی doctrine/dbal را به فایل composer.json پروژه خود اضافه کنید. لایبرری Doctrine DBAL برای تعیین وضعیت فعلی ستون و ساخت کوئری SQL مورد نیاز برای مشخص ساختن تنظیمات ستون استفاده می‌شود.

composer require doctrine/dbal

آپدیت اتریبیوت‌های ستون

متد change امکان ویرایش نوع ستون‌های موجود به یک نوع جدید و یا ویرایش اتریبیوت‌های ستون را فراهم می‌آورد. برای مثال، ممکن است بخواهید سایز یک ستون از نوع استرینگ را تغییر دهید. برای مشاهده کاری که عملا متد change انجام می‌دهد، سایز ستون را از 25 به 50 تغییر می‌دهیم:

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->change();
});

همچنین یک ستون را nullable قرار می‌دهیم:

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->nullable()->change();
});

تنها نوع ستون‌های bigInteger و binary و boolean و date و dateTime و dateTimeTz و decimal و integer و json و longText و mediumText و smallInteger و string و text و time و unsignedBigInteger و unsignedInteger و unsignedSmallInteger قابل تغییر هستند.

تغییر نام ستون‌ها

برای تغییر نام یک ستون، می‌توانید از متد renameColumn در اِسکیما بیلدر استفاده کنید. قبل از تغییر نام یک ستون، باید دیپندنسی doctrine/dbal را به فایل composer.json پروژه خود اضافه کنید.
Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});

تغییر نام هر ستونی در تیبل که نوع ستون آن enum باشد، در حال حاضر امکان‌پذیر نیست.

حذف ستون‌ها

برای حذف ستون‌ها، از متد اِسکیما بیلدر استفاده کنید. قبل از حذف ستون‌ها از دیتابیسی که توسط SQLite مدیریت می‌شود، باید وابستگی doctrine/dbal را به فایل composer.json پروژه خود اضافه کرده و برای نصب آن، کامند composer update را در ترمینال خود اجرا کنید:

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn('votes');
});

برای حذف چندین ستون از یک تیبل، نام ستون‌ها را به شکل آرایه به متد dropColumn پاس دهید:

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn(['votes', 'avatar', 'location']);
});

حذف یا ویرایش چندین ستون در یک مایگریشن توسط دیتابیس SQLite پشتیبانی نمی‌شود.

نام‌های مستعار در دسترس برای ستون‌ها

کامند توضیح
$table->dropRememberToken(); ستون remember_token را حذف می‌کند.
$table->dropSoftDeletes(); ستون deleted_at را حذف می‌کند.
$table->dropSoftDeletesTz(); نام مستعاری برای متد dropSoftDeletes()
$table->dropTimestamps(); ستون‌های created_at و updated_at را حذف می‌کند.
$table->dropTimestampsTz(); نام مستعاری برای متد dropTimestamps()

ایندکس‌ها

ساخت ایندکس

اِسکیما بیلدر از چندین نوع بیلدر پشتیبانی می‌کند. ابتدا، مثال زیر را ببینید که مشخص می‌کند که مقادیر یک ستون مشخص باید یونیک (غیرتکراری) باشد. برای ایجاد ایندکس، متد unique را به متد تعریف ستون زنجیر می‌کنیم:

$table->string('email')->unique();

یا به عنوان راه حلی جایگزین، ممکن است ایندکس را بعد از تعریف ستون ایجاد کنید. برای مثال:

$table->unique('email');

با ارسال آرایه‌ای حاوی نام ستون‌ها به متد index ، می‌توانید یک ایندکس مرکب (compound یا composite) ایجاد کنید:

$table->index(['account_id', 'created_at']);

لاراول به صورت خودکار یک نام منطقی برای ایندکس تولید می‌کند، با این حال، برای مشخص کردن نام ایندکس، پارامتر دومی را به این متد پاس دهید:

$table->unique('email', 'unique_email');

تایپ‌های در دسترس برای ایندکس‌ها

هر متد index یک آرگومان اختیاری دوم را می‌پذیرد که نام ایندکس را مشخص می‌کند. اگر این آرگومان حذف شده باشد، نام ایندکس از نام‌های تیبل و ستون (ها) مشتق می‌شود.

کامند توضیح
$table->primary('id'); یک primary key اضافه می‌کند.
$table->primary(['id', 'parent_id']); کلیدهای ترکیبی اضافه می‌کند.
$table->unique('email'); یک ایندکس unique اضافه می‌کند.
$table->index('state'); یک ایندکس plain اضافه می‌کند.
$table->spatialIndex('location'); یک ایندکس spatial اضافه می‌کند. (به جز SQLite)

طول ایندکس‌ها و MySQL/ MariaDB

لاراول به صورت پیش‌فرض از کَرَکتر سِت utf8mb4 استفاده می‌کند، که از امکان ذخیره emoji در دیتابیس پشتیبانی می‌کند. اگر ورژن MySQL مورد استفاده شما از 5.7.7 کمتر باشد یا از MariaDB و ورژن‌های قدیمی‌تر از ریلیس 10.2.2 آن استفاده می‌کنید، احتمالا باید طول استرینگ تولید شده توسط مایگریشن‌ها را به صورت دستی تنظیم کنید تا MySQL برای آن‌ها ایندکس بسازد. برای اینکار متد Schema::defaultStringLength را درون AppServiceProvider فراخوانی کنید:

use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
}

یا به عنوان راه حلی دیگر، می‌توانید آپشن innodb_large_prefix را برای دیتابیس خود فعال کنید. برای مطالعه راهنمای نحوه فعال‌سازی این آپشن را در داکیومنت دیتابیس مراجعه کنید.

تغییر نام ایندکس‌ها

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

$table->renameIndex('from', 'to')

حذف ایندکس‌ها

برای حذف یک ایندکس باید نام ایندکس را مشخص کنید. لاراول به صورت پیش‌فرض، نامی منطقی را به صورت اتوماتیک به ایندکس‌ها تخصیص می‌دهد. که این نام از ترکیب نام تیبل، نام ستون اندیس‌گذاری شده و type ایندکس به دست می‌آید. مثال‌های زیر را ببینید:

کامند توضیحات
$table->dropPrimary('users_id_primary'); یک primary key را از تیبل "users" حذف می‌کند.
$table->dropUnique('users_email_unique'); یک ایندکس unique را از تیبل "users" حذف می‌کند.
$table->dropIndex('geo_state_index'); یک ایندکس (basic index) را از تیبل "geo" حذف می‌کند.
$table->dropSpatialIndex('geo_location_spatialindex'); یک ایندکس spatial را از تیبل "geo" حذف می‌کند (به جز SQLite).

اگر نام ستون‌ها را به صورت آرایه به یکی از متدهای حذف ایندکس ارسال کنید، نام ایندکس متناسب بر پایه نام تیبل، ستون و تایپ کلید تولید خواهد شد.

Schema::table('geo', function (Blueprint $table) {
    $table->dropIndex(['state']); // Drops index 'geo_state_index'
});

قیدهای کلید خارجی

همچنین لاراول از امکان ساخت قیدهای کلید خارجی (foreign key constraints) نیز پشتیبانی می‌کند، که یکپارچی داده‌ها در سطح دیتابیس را حفظ می‌کند. در مثال زیر، ستون user_id در تیبل posts به ستون id در تیبل users رفرنس شده است.

Schema::table('posts', function (Blueprint $table) {
    $table->unsignedInteger('user_id');

    $table->foreign('user_id')->references('id')->on('users');
});

همچنین اکشن مناسب برای پراپرتی‌های "on delete" و "on update" قید را نیز می‌توانید تعیین کنید:

$table->foreign('user_id')
      ->references('id')->on('users')
      ->onDelete('cascade');

برای حذف یک کلید خارجی می‌توانید از متد dropForeign استفاده کنید. قیدهای کلید خارجی از الگوی نامگذاری مشابه ایندکس‌ها استفاده می‌کنند. در نتیجه، از ترکیب نام تیبل ستون‌ها به همراه پسوند _foreign ایجاد می‌شوند.

$table->dropForeign('posts_user_id_foreign');

یا می‌توانید یک آرایه از مقادیر را به این متد ارسال کنید که به صورت خودکار برای تولید نام قید مناسب در هنگام حذف استفاده می‌شود:

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

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

Schema::enableForeignKeyConstraints();

Schema::disableForeignKeyConstraints();

سایر پست‌های داکیومنت

  • پیش‌گفتار
    • Release Notes ترجمه در ورژن‌های بعدی
    • راهنمای آپگرید ترجمه در ورژن‌های بعدی
    • Contribution Guide ترجمه در ورژن‌های بعدی
  • شروع
    • نصب
    • پیکربندی
    • ساختار دایرکتوری ترجمه در ورژن‌های بعدی
    • Laravel Homestead ترجمه در ورژن‌های بعدی
    • Laravel Valet ترجمه در ورژن‌های بعدی
    • دپلویمنت ترجمه در ورژن‌های بعدی
  • مفاهیم معماری
  • اصول اولیه
  • فرانت‌اند
  • امنیت
    • Authentication ترجمه در ورژن‌های بعدی
    • API Authentication (Passport) ترجمه در ورژن‌های بعدی
    • Authorization ترجمه در ورژن‌های بعدی
    • Encryption ترجمه در ورژن‌های بعدی
    • Hashing ترجمه در ورژن‌های بعدی
    • Resetting Passwords ترجمه در ورژن‌های بعدی
  • مباحث عمیق‌تر
    • Artisan Console ترجمه در ورژن‌های بعدی
    • Broadcasting ترجمه در ورژن‌های بعدی
    • Cache ترجمه در ورژن‌های بعدی
    • Collections ترجمه در ورژن‌های بعدی
    • Events ترجمه در ورژن‌های بعدی
    • File Storage ترجمه در ورژن‌های بعدی
    • Helpers ترجمه در ورژن‌های بعدی
    • Mail ترجمه در ورژن‌های بعدی
    • Notifications ترجمه در ورژن‌های بعدی
    • Package Development ترجمه در ورژن‌های بعدی
    • Queues ترجمه در ورژن‌های بعدی
    • Task Scheduling ترجمه در ورژن‌های بعدی
  • دیتابیس
  • Eloquent ORM
    • Eloquent: Getting Started ترجمه در ورژن‌های بعدی
    • Eloquent: Relationships ترجمه در ورژن‌های بعدی
    • Eloquent: Collections ترجمه در ورژن‌های بعدی
    • Eloquent: Mutators ترجمه در ورژن‌های بعدی
    • Eloquent: API Resources ترجمه در ورژن‌های بعدی
    • Eloquent: Serialization ترجمه در ورژن‌های بعدی
  • Testing
    • Testing: Getting Started ترجمه در ورژن‌های بعدی
    • HTTP Tests ترجمه در ورژن‌های بعدی
    • Browser Tests (Laravel Dusk) ترجمه در ورژن‌های بعدی
    • Database Testing ترجمه در ورژن‌های بعدی
    • Mocking ترجمه در ورژن‌های بعدی
  • Official Packages
    • Laravel Cashier ترجمه در ورژن‌های بعدی
    • Envoy Task Runner ترجمه در ورژن‌های بعدی
    • Laravel Horizon ترجمه در ورژن‌های بعدی
    • API Authentication (Passport) ترجمه در ورژن‌های بعدی
    • Laravel Scout ترجمه در ورژن‌های بعدی
    • Laravel Socialite ترجمه در ورژن‌های بعدی