راکت
حل شده

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

7 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

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

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

بهترین پاسخ

درود

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

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

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

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

Hamidev
Hamidev
@hamiidev

تخصص: 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
Mr.H
@Mr.H

تخصص: 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

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

سید حسین رضوی
سید حسین رضوی
@hossein.r.1442

تخصص: برنامه نویس وب و طراح رابط کاربری

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

$table->engine('innoDB')
coarad supp
coarad supp
@coaradsupp

تخصص: برنامه نویس لاراول

@hossein.r.1442

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

Mr.H
Mr.H
@Mr.H

تخصص: Laravel

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

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

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

موفق باشید

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

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