۴ مصطفی مهرجو
ایجاد برچست برای متغییر انگلیسی
محمدرسول اصغری حل شده توسط محمدرسول اصغری

سلام من توی دیتابیسم اومدم یک فیلد به اسم 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 }}
مصطفی مهرجو ۱۷ آبان ۱۴۰۳، ۱۱:۴۸

بله 

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

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

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

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