Mr.H
5 سال پیش توسط Mr.H مطرح شد
7 پاسخ

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

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


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

درود

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

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

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

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


Hamidev
تخصص : backend Developer | laravel |...
@hamiidev 5 سال پیش آپدیت شد
0

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

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

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

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


Mr.H
تخصص : Laravel
@Mr.H 5 سال پیش آپدیت شد
0

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


سید حسین رضوی
تخصص : برنامه نویس وب و طراح رابط کار...
@hossein.r.1442 5 سال پیش مطرح شد
0

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

$table->engine('innoDB')

coarad supp
تخصص : برنامه نویس لاراول
@coaradsupp 5 سال پیش مطرح شد
0

@hossein.r.1442

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


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

درود

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

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

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

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


Mr.H
تخصص : Laravel
@Mr.H 5 سال پیش آپدیت شد
0

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


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

موفق باشید


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

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