سلام دوستان وقت بخیر.
کاربری داریم که چندین پست و کامنت داره. ممکنه ادمین کاربر رو حذف کنه به صورت Sof delete . با این کار نمیخام که پست های این کاربر دیگه نمایش داده بشه در سایت و همچنین کامنت هاش. از طرفی ممکنه دوباره کاربر رو بازیابی کنم و بخوام پست ها و کامنت هاش دوباره نمایش داده بشه در سایت.
روش مناسب برای پیاده سازی این مسئله چیست؟
@abdolrahman @gomnam @mhyeganeh @juza66 @endworld @hesammousavi
با تشکر
سلام وقتتون بخیر.
یک گلوبال اسکوپ توی مدل 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 هست باشه.
درود ...
اگر می خوای برای همیشه دیتاهای softdelete شده بر نگرده می توانید از کد زیر استفاده کنید:
$post->forceDelete();
این کد دیتا را برای همیشه حذف می کنه...
ممنون از راهنمایی و پیگیری های شما @endworld
فکر کنم من سوالم رو اشتباه و مبهم پرسیدم. نگاه کنید کاربری داریم که چندین پست و کامنت داره. ممکنه ادمین کاربر رو حذف کنه به صورت Sof delete با این کار نمیخام که پست های این کاربر دیگه نمایش داده بشه در سایت و همچنین کامنت هاش. از طرفی ممکنه دوباره کاربر رو بازیابی کنم و بخوام پست ها و کامنت هاش دوباره نمایش داده بشه در سایت.
@matio
به پیوند زیر مراجعه کن به جوابت می رسی یا نه :
https://medium.com/@chrissoemma/laravel-5-8-delete-and-soft-delete-practical-examples-b9b71c0a97f
سلام وقتتون بخیر.
یک گلوبال اسکوپ توی مدل 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 هست باشه.
ممنون @MehdiAghighi
فعلا دارم از همین روش استفاده می کنم. خواستم بدونم با تجربه ها هم از همین روش استفاده می کنن.
@matio شاید یه راه منطقی تر این باشه که که گلوبال اسکوپ کلاس درست کنید و هر جا خواستید ازش استفاده کنید صرفا همین تیکه رو بزارید
static::addGlobalScope(new ActiveUsers);
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟