راکت
حل شده

برنگرداندن پست های کاربری که soft delete شده

8 پاسخ

سلام دوستان وقت بخیر.
کاربری داریم که چندین پست و کامنت داره. ممکنه ادمین کاربر رو حذف کنه به صورت Sof delete . با این کار نمیخام که پست های این کاربر دیگه نمایش داده بشه در سایت و همچنین کامنت هاش. از طرفی ممکنه دوباره کاربر رو بازیابی کنم و بخوام پست ها و کامنت هاش دوباره نمایش داده بشه در سایت.
روش مناسب برای پیاده سازی این مسئله چیست؟
@abdolrahman @gomnam @mhyeganeh @juza66 @endworld @hesammousavi
با تشکر

ثبت پرسش جدید

پاسخ‌ها

8
مهدی عقیقی
مهدی عقیقی
@MehdiAghighi

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

بهترین پاسخ

سلام وقتتون بخیر.

یک گلوبال اسکوپ توی مدل Post و Comment تعریف کنید. مثل کد زیر:

class Post extends Model
{
    /**
     * The "booted" method of the model.
     *
     * @return void
     */
    protected static function booted()
    {
        static::addGlobalScope('activeUsers', function (Builder $builder) {
            $builder->whereHas('user', function (Builder $query) { 
                $query->whereNull("deleted_at")
            });
        });
    }
}

مستندات گلوبال اسکوپ‌ها هم اینجا بخونید.

این کوئری یک اسکوپ گلوبال ( که توی همه‌ی کوئری‌هاتون خودش به صورت اتوماتیک این رو هم میزاره ) درست بشه و فقط پست‌های کاربر‌هایی بیاد که فیلد deleted_at شون null هست.

فقط پارامتر اولی که به whereHas میدید باید اسم ریلیشنی که بین Post و User هست باشه.

رایموند
رایموند
@Raymond

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

درود ...
اگر می خوای برای همیشه دیتاهای softdelete شده بر نگرده می توانید از کد زیر استفاده کنید:

$post->forceDelete();

این کد دیتا را برای همیشه حذف می کنه...

Matio
Matio
@matio

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

ن نمیخام برای همیشه. چون کاربرا ممکنه دوباره بازیابی بشه
@endworld

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

رایموند
رایموند
@Raymond

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

برای بازیابی دیتا کد زیر:

$post->restore();
Matio
Matio
@matio

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

ممنون از راهنمایی و پیگیری های شما @endworld
فکر کنم من سوالم رو اشتباه و مبهم پرسیدم. نگاه کنید کاربری داریم که چندین پست و کامنت داره. ممکنه ادمین کاربر رو حذف کنه به صورت Sof delete با این کار نمیخام که پست های این کاربر دیگه نمایش داده بشه در سایت و همچنین کامنت هاش. از طرفی ممکنه دوباره کاربر رو بازیابی کنم و بخوام پست ها و کامنت هاش دوباره نمایش داده بشه در سایت.

رایموند
رایموند
@Raymond

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

@matio
به پیوند زیر مراجعه کن به جوابت می رسی یا نه :
https://medium.com/@chrissoemma/laravel-5-8-delete-and-soft-delete-practical-examples-b9b71c0a97f

Matio
Matio
@matio

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

ممنون @MehdiAghighi
فعلا دارم از همین روش استفاده می کنم. خواستم بدونم با تجربه ها هم از همین روش استفاده می کنن.

مهدی عقیقی
مهدی عقیقی
@MehdiAghighi

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

@matio شاید یه راه منطقی تر این باشه که که گلوبال اسکوپ کلاس درست کنید و هر جا خواستید ازش استفاده کنید صرفا همین تیکه رو بزارید

static::addGlobalScope(new ActiveUsers);

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

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