راکت
حل شده

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

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();
    });
mt.rezaei
mt.rezaei
@mt.rezaei1989
ثبت پرسش جدید

پاسخ‌ها

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

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

بهترین پاسخ

@mt.rezaei1989

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

Alimotreb
Alimotreb
@Alimotreb

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

سلام
@mt.rezaei1989

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

mt.rezaei
mt.rezaei
@mt.rezaei1989

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

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

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

@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
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

mt.rezaei
mt.rezaei
@mt.rezaei1989

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

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

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

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

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

سهیل
سهیل
@webeveloper

تخصص: درحال یادگیری ...

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

Cannot delete or update a parent row: a foreign key constraint fails 
علی بیات
علی بیات
@ali.bayat

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

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

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

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