اذهب إلى المحتوى

السؤال

نشر

يوجد لدي حقل في الداتابيز مخزن على الشكل التالي {"en" :"value1," ar":value} احتاج استرجاع وعرض القيم في حال كانت اللغة انكليزية يعرض value1 والا يعرض value حسب اللغة يعرض القيمة 

Recommended Posts

  • 0
نشر

هناك تابع يدعى json_decode يمكنك استعماله لتحويل محتويات الحقل (التي تكون غالبا مخزنة على شكل نص) إلى غرض.

بعد ذلك يمكنك استعمال هذا الغرض بالوصول إلى قيمه لمعرفة ما الذي يجب عرضه.

يتبقى كيفية تحديد اللغة الحالية،  يمكن معرفة اللغة الحالية عن طريق:

Lang::locale();

حاول تطبيق ما سبق و في حال حصول أخطاء يمكنك سؤالنا عنها مع إرفاق الملفات طبعاً حتى يمكننا التحقق منها.

  • 0
نشر

للتعامل مع الـ JSON في Laravel، يجب استخدام ميزة Eloquent ORM التي تدعم الكثير من العمليات على البيانات بما في ذلك استرجاع البيانات المخزنة على شكل JSON وتحويلها إلى صيغ أخرى.

في هذه الحالة، يمكن استخدام دالة json_decode() لتحويل النص المخزن في الحقل إلى صيغة مصفوفة، ومن ثم الوصول إلى القيم بحسب اللغة المحددة.

وقبل الشروع في الكود، يجب التأكد من توفر حزمة "illuminate/support" و"illuminate/database"، وإذا لم تكن مثبتة، يمكن تثبيتها عبر Composer باستخدام الأمر التالي:

composer require illuminate/support illuminate/database

بعد ذلك، يمكن إنشاء نموذج لجدول قاعدة البيانات الخاص بنا باستخدام الأمر التالي:

php artisan make:model MyModel -m

ثم يجب تعديل الحقل في ملف الـ Migration بالشكل التالي:

$table->json('my_field');

ويمكن الآن إضافة بعض الدوال في نموذج الـ Model الخاص بنا لتنفيذ المهمة المطلوبة، ويمكن العثور على النموذج في المسار التالي app/Models/MyModel.php. حيث يجب إضافة الدوال التالية في النموذج:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class MyModel extends Model
{
    protected $fillable = ['my_field'];
    
    public function getValueByLanguage($language)
    {
        $data = json_decode($this->my_field, true);
        if (isset($data[$language])) {
            return $data[$language];
        }
        return null;
    }
}

ويحتوي النموذج السابق على دالة getValueByLanguage() التي تستخدم دالة json_decode() لتحويل الحقل إلى صيغة مصفوف، ويمكن استخدام هذه الدالة للاسترجاع القيم بحسب اللغة المحددة. إذا كانت اللغة متوفرة، فسيتم إرجاع القيمة المقابلة، وإلا سيتم إرجاع null.

 

  • 0
نشر

لما لا تستخدم حزمة laravel-translateble من spatie فهي تستخدم نفس المنطق ونفس طريقة التخزين، وبدل التفصيل في عملية ترجمة القيم بحسب مفتاح اللغة المفعلة، سيمكن مباشرة قراءة القيم بطريقة عادية جدا.

وعلى كل، سيمكنك قراءة المفتاح بحسب اللغة المفعلة كالتالي:

  1. قم باخفاء القيم المتعددة اللغات من كائن الانموذج عند استعلام قراءته، نصرح المفتاح field ضمن المصفوفة hidden للنموذج Model المعني:
    class MyModel extends Model {
        protected $hidden = ['field'];
    }

     

  2. ثم لنقم بتصريح مسترجع جديد وليكن باسم translated_field، وليعيد القيمة الموافقة للغة الحالية:

    class MyModel extends Model {
    
        public function getTranslatedFieldAttribute(){
             return json_decode($this->field)[app()->getLocale()];
        }
    }

     

  3. وأخيرا، لنقم بتضمين هذا الحقل مع اي كائن انموذج، نصرح المفتاح translated_field ضمن المصفوفة appends للنموذج Model المعني:

    class MyModel extends Model {
        protected $appends = ['translated_field'];
    }

     

  4. واخيرا، قم بتجربة قراءة مجموعة :

    MyModel::get()

    والحظ ان قيم translated_field المعروضة هي ما يوافق اللغة المفعلة.

يمكنك ايضا استعمال المعدلات Mutators لتطبيق العملية بشكل أكثر بساطة.

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...