💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ Mehrjoo
ایجاد برچست برای متغییر انگلیسی
محمدرسول اصغری حل شده توسط محمدرسول اصغری

سلام من توی دیتابیسم اومدم یک فیلد به اسم status گذاشتم که داخلش دو تا مقدار active و inactive رو گذاشتم . چطوری بدون اینکه بخوام از کد زیر استفاده کنم اصطلاح فارسی شو بگم

{{ $user->status == 'inactive'? 'فعال' : 'غیر فعال' }}

با تشکر .

درود 

میتونید از یه Enum استفاده کنید و یه متد toPersian برای ترجمه اش مثل این:

<?php
enum UserStatus: string {
    case Active = 'active';
    case Inactive = 'inactive';
    public function toPersian(): string {
        return match($this) {
            self::Active => 'فعال',
            self::Inactive => 'غیر فعال',
        };
    }
}

بعد توی مدل یوزر تون این متد رو قرار بدید که از این Enum  استفاده کنه (از cast هم میتونید استفاده کنید(در موردش سرچ کنید)) 

<?php
use App\Enums\UserStatus;
class User extends Model
{
    public function getStatusAttribute($value): string
    {
        return UserStatus::from($value)->toPersian();
    }
}

حالا هر جایی که خواستید اینطوری میتونید وضعیت کاربر رو به فارسی بگیرید :

$user->status

موفق باشید

محمدرسول اصغری ۱۷ آبان ۱۴۰۳، ۰۸:۴۷

میشه توی مدل یه گِتِر به نام دلخواه بزنم بعد بگم :

use App\Enums\UserStatus;
class User extends Model
{
    public function getParsionStatusAttribute(): string
    {
        return ($this->value == 'active') ? 'غیر فعال' : 'فعال';
    }
}

دیگه نیام اون چیزی که شما اضافه کردید به اسم تابع رو بهش بدم؟؟؟؟؟؟

موقع فراخوانی میگم :

{{ $user->parsionstatus }}
Mehrjoo ۱۷ آبان ۱۴۰۳، ۱۱:۴۸

بله 

چیزی که من نوشتم یه sample بود و بسته به شرایط بیزینس هرطوری که بخواید میتونید استفاده کنید

محمدرسول اصغری ۱۷ آبان ۱۴۰۳، ۲۰:۵۳

ولی بهتر هست همیشه توی مواردی که یه مقداری ثابت هست از Enum‌ها استفاده کنید تا هر دو شکل رو بتونید استفاده کنید و کدتون توسعت پذیر‌تر باشه

بهترین پاسخ
محمدرسول اصغری ۱۷ آبان ۱۴۰۳، ۲۰:۵۴