من می خواستم در یک جدول به نام مثلا users در لاراول، یک ستون اضافی به نام مثلا paid اضافه کنم. چه دستوری در migration لاراول باید بزنیم تا این کار را انجام دهد؟
روشی که من در نظر گرفتم به صورت زیر هست:
<?php
public function up()
{
Schema::create('users', function ($table) {
$table->integer("paid");
});
}
ولی وقتی که دستور php artisan migrate رو میزنم خطا میده و میگه که جدول users قبلا تعریف شده!
برای انجام دادن اینکار راه حل های مختلفی وجود دارد ولی استاندارترین راه حل به صورت زیر می باشد:
در ابتدا باید با استفاده از دستور زیر یک ماگریشن (Migration) ایجاد کنید، توجه داشته باشید که عنوان add_paid_to_users کاملا دلخواه بوده و هر چیزی می توانید بگذارید، فقط باید برای جداسازی کلمات در عنوان خود از علامت ـ (آندرلاین) استفاده کنید:
php artisan make:migration add_paid_to_users --table=users
در واقع این دستور اشاره می کند یک فایل ماگریشن برای من ایجاد کن که با استفاده از آن بتوانم جدول users را آپدیت کنم.
پس از زدن این دستور باید به مسیر database/migrations بروید و در آنجا یک فایل که عنوان آن شامل عبارت add_paid_to_users هست، وجود دارد. این فایل را باز کرده و با کدهایی شامل محتویات زیر رو به رو می شوید:
public function up()
{
Schema::table('users', function($table) {
});
}
این کدها در واقع به جدول users اشاره می کنند. یعنی شما می توانید هم اکنون هر ستونی که خواستید را به جدول users اضافه کنید. در کد بالایی که شما ارسال کردید از دستور create-- بهره برده بودید و خطای کار شما اینجا بود.
بنابراین یک ستون به جدول موردنظر به صورت زیر اضافه می کنم:
public function up()
{
Schema::table('users', function($table) {
$table->integer('paid');
});
}
در نهایت دقت کنید که حتما باید در متد down یک دستور برای حذف ستون بنویسید تا اگر احیانا خواستید با استفاده از دستور php artisan migrate:rollback به عقب برگردید، خطایی دریافت نکنید:
public function down()
{
Schema::table('users', function($table) {
$table->dropColumn('paid');
});
}
در نهایت با زدن دستور php artisan migrate ستون موردنظر به جدول users اضافه می شود.
به عنوان نکته ی پایانی، اگر بخواهید مکان دقیق ستون را مشخص کنید می توانید از دستورهای after و یا before به صورت زیر استفاده کنید:
// username نام ستونی است که در پایگاه داده وجود دارد
$table->integer('paid')->after('username');
به جمع هزاران کاربر اینستاگرامی روکسو بپیوندید.