mt.rezaei
6 سال پیش توسط mt.rezaei مطرح شد
9 پاسخ

عدم حذف شدن پست ها با حذف یک کاربر

سلام دوستان
من یه مشکلی دارم وقتی کاربری رو حذف میکنم پست های مربوط به اون کاربر نیز حذف میشن، چیکار کنم که این کار انجام نشه؟
چون تو جدول پست هام user_id کلید خارجی هست که اشاره داره به id در جدول یوزرها و مقدار ondelete(cascade) براش ست شده.
اگه این مقدار ست نشه درسته ولی وقتی ست نمیکنی خطا میده موقع حذف کردن

 Schema::create('posts', function (Blueprint $table) {  
      $table->increments('id');  
      $table->string('title');  
      $table->string('slug')->unique();  
      $table->text('meta_description')->nullable();  
      $table->text('body');  
      $table->string('tags');  
      $table->tinyInteger('status')->unsigned();  
      $table->integer('viewCount')->default(0);  
      $table->integer('commentCount')->default(0);  

      $table->unsignedInteger('user_id');
       $table->unsignedInteger('photo_id');
       $table->unsignedInteger('taxonomy_id');

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

          $table->timestamps();
    });

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

@mt.rezaei1989

کد migration تون رو به اشتراک بذارید.


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 6 سال پیش مطرح شد
1

سلام
@mt.rezaei1989

توی مایگریشن جایی که cascade زدید رو حذف کنید


mt.rezaei
@mt.rezaei1989 6 سال پیش آپدیت شد
1

سلام
@ali.bayat
کد های مایگریشن رو در سوالی که پرسیدم گذاشتم


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 6 سال پیش آپدیت شد
3

@mt.rezaei1989
سلام
معنی عبارت

onDelete('cascade')

دقیقا همین میشه که اگر user حذف شد تمام post هاش هم حذف بشه. حالا اگر خواسته باشید جلوی این کار رو بگیرید کافیه بجای cascade عبارت set null قرار بدید. یعنی:

->onDelete('set null');

با اینکار اگر user حذف شد تمام پست های مربوط به اون در ستون‌ user_id مقدار null میگیرند ولی حذف نمی‌شوند. فقط خاطر جمع بشید که user_id تون از نوع nullable() تعریف بشه. یعنی باید اینجور بشه:

$table->unsignedInteger('user_id')->nullable();

https://stackoverflow.com/q/20869072


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 6 سال پیش مطرح شد
1

بهترین پاسخ رو واقعا بجا و مناسب انتخاب کردین! :-D


mt.rezaei
@mt.rezaei1989 6 سال پیش مطرح شد
1

@mhyeganeh
سلام با تشکر از پاسختون
ولی اینکار اشتباهه و وقتی به عنوان مثال وقتی پستی که مربوط به کاربری باشه که حذف شده ان کاربر و user_id آن null شده است موقع نمایش پست های مربوط به کاربر اگر بخواهیم نویسنده پست را نمایش دهیم خطا میدهد چون نویسنده را نمیتواند پیدا کند
این مورد برای دسته بندی ها هم صدق میکند...


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

@mt.rezaei1989
اگر با onDelete('cascade') دز لاراول مشکل دارید٬ میتونید این کار رو بصورت دستی هم انجام بدید.
از Model Events استفاده کنید.
http://www.mattmorgante.com/technology/laravel-model-events

حتی از Event های عادی هم میتونید استفاده کنید


سهیل ساقیان
تخصص : درحال یادگیری ...
@webeveloper 6 سال پیش مطرح شد
1

سلام
@ali.bayat
@hesammousavi
من هم همین مشکل را دارم، ممنون میشوم راه درست را بفرمایید.
گزینه onDelete('cascade') همه زو پاک میکنه و اگر نباشد خطای زیر داده میشود:

Cannot delete or update a parent row: a foreign key constraint fails 

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

@soheilsaghian
مایگریشن هارو چک کردید؟


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

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