پاک کردن مقاله ای که یوزر آن قبلا پاک شده

6 روز پیش
توسط علی بیات آپدیت شد
Mr.H ( 6240 تجربه )
1 هفته پیش
تخصص : Laravel

با عرض سلام و خسته نباشید
مثلا در سایتی یک یوزر ثبت نام کرده و وارد پنل کاربری خودش میشه و تیکت یا مقاله ای ثبت میکنه .
ادمین سایت اقدام به حذف اون یوزر میکنه اما اون مقاله یا تیکتی که قبلا توسط اون کاربر ثبت شده هنوز هست
میخواستم بدونم چطور میتونم با حذف اون کاربر همه اون چیز هایی که بوجود آورده هم حذف بشه
باید بگم برای اینکار از پکیج iatstuti/laravel-cascade-soft-deletes استفاده کردم منتهی بقیه موارد ( بعنوان مثال کامنت های مقاله حذف شده هم حذف میشه ) به درستی کار میکنه بجز همین موضوعی که خدمتتون عرض کردم
ممنون میشم که من راهنمایی کنید
باتشکر

بهترین پاسخ انتخاب شده توسط Mr.H
علی بیات
1 هفته پیش

درود

شما به ۲ شکل میتونی این مشکل رو حل کنی:

  • در سطح دیتابیس
  • در کدهای PHP

در سطح دیتابیس رو دوستان توضیح دادند

مدل های الکوئنت، اونت های مخصوص خودشون رو دارند که اونت deleting هم جزشون هست
میتونی وقتی که یه کاربر حذف میشه
جداول دیگه رو چک کنی
هر جا user_id اون کاربر موجود بود
اون سطر رو حذف کنی

Hamidev ( 9545 تجربه )
1 هفته پیش
تخصص : backend Developer | laravel | php

سلام وقت بخیر برای حل این مشکل باید توی هر ریلیشن (Relation) که می زنید ;onDelete('cascade') بزارید تا موقعی اون مقاله یا تیکتی که قبلا توسط اون کاربر ثبت شده پاک شود.

  • به مثال پایین که در migration اون مدل مثل article گذاشته میشه دقت نمایید

    $table->integer('user_id')->unsigned()->nullable(true);
    $table->foreign('user_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade');  

    آرزوی موفقیت برای شما

Mr.H ( 6240 تجربه )
1 هفته پیش
تخصص : Laravel

HELPER FUNCTION

public function foreign_key ($feild, $nullable = false, $table = null, $type = 'unsignedInteger', $references = 'id', $cascade = 'cascade')  
{  
if ( is\_null( $table ) )  
$table = Str::plural( Str::replaceLast('\_id', '', $feild) );

    if ( $nullable )
        $this->$type( $feild )->nullable();
    else
        $this->$type( $feild );

    $this->foreign( $feild )
        ->references( $references )
        ->on( $table )
        ->onDelete( $cascade )
        ->onUpdate( $cascade );
}

MIGRATION ARTICLE

public function up()  
{
    / start for have default Blueprint class /
    $Schema = DB::connection()->getSchemaBuilder();
    $Schema->blueprintResolver( function( $table, $callback ) {
        return new Blueprint( $table, $callback );
    });
    / end  /

    $Schema->create('articles', function (Blueprint $table) {
        $table->increments('id')->unsigned();

        $table->foreign_key('user_id', 'users');
        $table->foreign_key('subject_id', true, 'subjects');

        $table->string('title', 50);
        $table->string('slug', 50);
        $table->string('description', 255)->nullable();
        $table->string('image');
        $table->text('body');
        $table->full_timestamps();
    });
}

با عرض سلام چیزی که شما فرمودید من در این helper function رعایت کردم منتهی بازم کار نمیکنه
@Hamidev

سید حسین رضوی ( 37571 تجربه )
1 هفته پیش
تخصص : برنامه نویس وب و طراح رابط کاربری

ببینید شما باید engine دیتابیستون رو روی innoDB تنظیم کنید تا یه جدول باقابلیت ریلیشن داشته باشید یا مستقیم توی کانفیگ mysql تنظیم کنید یا توی همون مایگریشن بنویسید

$table->engine('innoDB')
coarad supp ( 9640 تجربه )
1 هفته پیش

@hossein.r.1442

سلام داداش، میشه وقتی جدول مقدار داره این engine رو عوض کرد؟از توی phpmyadmin

علی بیات ( 296347 تجربه )
1 هفته پیش
تخصص : توسعه دهنده ارشد وب

درود

شما به ۲ شکل میتونی این مشکل رو حل کنی:

  • در سطح دیتابیس
  • در کدهای PHP

در سطح دیتابیس رو دوستان توضیح دادند

مدل های الکوئنت، اونت های مخصوص خودشون رو دارند که اونت deleting هم جزشون هست
میتونی وقتی که یه کاربر حذف میشه
جداول دیگه رو چک کنی
هر جا user_id اون کاربر موجود بود
اون سطر رو حذف کنی

Mr.H ( 6240 تجربه )
1 هفته پیش
تخصص : Laravel

با عرض سلام خدمت دوستان ممنون که بنده رو راهنمایی کردید
@hossein.r.1442
@Hamidev
@ali.bayat

علی بیات ( 296347 تجربه )
6 روز پیش
تخصص : توسعه دهنده ارشد وب

موفق باشید

برای ارسال پاسخ باید وارد سایت شوید