hamed sarkhosh
5 سال پیش توسط hamed sarkhosh مطرح شد
8 پاسخ

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

با عرض سلام و خسته نباشید
یادم هست که جناب موسوی برای این سوال من در آموزش لاراول فروشگاهی یه راه حلی ارائه داده بودن ولی یادم نمیاد تو کدوم قسمت بود برای همین مجبور شدم اینجا سوالم رو مطرح کنم.
من یه 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


ثبت پرسش جدید
smart
@smartgarden2016 5 سال پیش مطرح شد
0

وقت بخیر
میتونی یه مقدار 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
تخصص : برنامه نویس
@ham.sarkhosh 5 سال پیش مطرح شد
0

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


smart
@smartgarden2016 5 سال پیش مطرح شد
1

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

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

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

$table->unsignedInteger('company_id')->nullable(false);

TEFO
تخصص : لاراول
@tefo.ha27 5 سال پیش مطرح شد
0

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


hamed sarkhosh
تخصص : برنامه نویس
@ham.sarkhosh 5 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

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


سعید کریمی
تخصص : برنامه نویس PHP و Laravel
@saeedkarimi 5 سال پیش مطرح شد
1

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

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

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

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