راکت

اضافه کردن یک ستون غیر null به دیتابیس دارای اطلاعات

8 پاسخ

با عرض سلام و خسته نباشید
یادم هست که جناب موسوی برای این سوال من در آموزش لاراول فروشگاهی یه راه حلی ارائه داده بودن ولی یادم نمیاد تو کدوم قسمت بود برای همین مجبور شدم اینجا سوالم رو مطرح کنم.
من یه table دارم توی دیتابیسم که می خوام یه column به اسم company_id بهش اضافه کنم. ازونجایی که company_id نباید nullable باشه و من توی table اطلاعات دارم و نمی خوام که اون اطلاعات پاک بشه مایگریشنم انجام نمیشه و اررور می ده. اگه فیلد رو nullable بزارم اوکیه و انجام میشه ولی خب من نمی خوام nullable باشه. راه حل چیه که بدون پاک شدن اطلاعاتم این کار انجام بشه ؟

    public function up()
    {
        Schema::table('tasks', function (Blueprint $table) {
            $table->unsignedInteger('company_id')->nullable()->after('id');

            $table->foreign('company_id')
                ->references('id')
                ->on('companies')
                ->onDelete('cascade');
        });
    }

الان به nullable زدم رفت بالا اوکی شد ولی خب این چیزی نیست که مد نظرمه

@Alimotreb
@ali.bayat
@hesammousavi

ثبت پرسش جدید

پاسخ‌ها

8
smart
smart
@smartgarden2016

وقت بخیر
میتونی یه مقدار default بهش بدی مثلا 0.

    public function up()
    {
        Schema::table('tasks', function (Blueprint $table) {
            $table->unsignedInteger('company_id')->default(0)->after('id');

            $table->foreign('company_id')
                ->references('id')
                ->on('companies')
                ->onDelete('cascade');
        });
    }
hamed sarkhosh
hamed sarkhosh
@ham.sarkhosh

تخصص: برنامه نویس

@smartgarden2016
اخه اونم باز کار درستی نیست. چون من شاید company با id برابر با 0 نداشته باشم اصلا و در جاهای دیگه برنامه به اررور خواهم خورد با این کار و فقط خود من روی پروژه کار نمی کنم. شاید مثلا من company با id برابر با 1 داشته باشم ولی همکار دیگم که رو پروژه کار می کنه نداشته باشه و اون به اررور بخوره. یا وقتی آپدیت شد پروژه و رفت روی سرور کلا سایت به یه باگ بخوره به همین خاطر. نمی دونم اصلا راه حلی برای این مشکلات وجود داره یا نه :(

شاید پاسخ شما همین‌جا باشد

smart
smart
@smartgarden2016

من اون راه رو گفتم که ابتدای کار null نذاری. راه حل پیشنهادی من اینه که مقدار default رو یه id بذاری که توی جدول company باشه. به این شکل همه taskها مربوط به یه company میشن. بعدا بیای taskها رو ویرایش کنی و مقدار company_idهای هرکدوم که اونی که میخوای بذاری. البته اگه تعداد taskها الان زیاد نیست.

حالا شاید دوستان روش دیگه ای بلد باشن. ما هم استفاده میکنیم.

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

درود
به صورت زیر امتحان کردید؟

$table->unsignedInteger('company_id')->nullable(false);
TEFO
TEFO
@tefo.ha27

تخصص: لاراول

راه حل من اینه که بیاین یک مقدار پیش فرض یا نالیبل بذارین بعد اطلاعات رو بریزین اگه از همه‌چی مطمئن شدین بعد با یک مایگریشن دیگه ستون تغییر بدین و از حالت پیش فرض یا نالیبل درش بیارین

hamed sarkhosh
hamed sarkhosh
@ham.sarkhosh

تخصص: برنامه نویس

@ali.bayat
این چه فرقی با ()nullable خالی می کنه ؟

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

میشه گفت عکس nullable عمل میکنه

سعید کریمی
سعید کریمی
@saeedkarimi

تخصص: برنامه نویس PHP و Laravel

سلام . سه تا کار میشه انجام داد

  1. مقدار ستون رو نالیبل قرار بدید
  2. مقدار ستون رو دیفالت ست کنید
  3. کل اطلاعات اون جدول رو پاک کنید و ستونتون رو به صورت غیر نالیبل اعمال کنید

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام