Osama Kha نشر 18 أبريل 2023 أرسل تقرير نشر 18 أبريل 2023 يوجد لدي حقل في الداتابيز مخزن على الشكل التالي {"en" :"value1," ar":value} احتاج استرجاع وعرض القيم في حال كانت اللغة انكليزية يعرض value1 والا يعرض value حسب اللغة يعرض القيمة 2 اقتباس
0 Kais Hasan نشر 18 أبريل 2023 أرسل تقرير نشر 18 أبريل 2023 هناك تابع يدعى json_decode يمكنك استعماله لتحويل محتويات الحقل (التي تكون غالبا مخزنة على شكل نص) إلى غرض. بعد ذلك يمكنك استعمال هذا الغرض بالوصول إلى قيمه لمعرفة ما الذي يجب عرضه. يتبقى كيفية تحديد اللغة الحالية، يمكن معرفة اللغة الحالية عن طريق: Lang::locale(); حاول تطبيق ما سبق و في حال حصول أخطاء يمكنك سؤالنا عنها مع إرفاق الملفات طبعاً حتى يمكننا التحقق منها. اقتباس
0 Mustafa Suleiman نشر 18 أبريل 2023 أرسل تقرير نشر 18 أبريل 2023 للتعامل مع الـ 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 Adnane Kadri نشر 18 أبريل 2023 أرسل تقرير نشر 18 أبريل 2023 لما لا تستخدم حزمة laravel-translateble من spatie فهي تستخدم نفس المنطق ونفس طريقة التخزين، وبدل التفصيل في عملية ترجمة القيم بحسب مفتاح اللغة المفعلة، سيمكن مباشرة قراءة القيم بطريقة عادية جدا. وعلى كل، سيمكنك قراءة المفتاح بحسب اللغة المفعلة كالتالي: قم باخفاء القيم المتعددة اللغات من كائن الانموذج عند استعلام قراءته، نصرح المفتاح field ضمن المصفوفة hidden للنموذج Model المعني: class MyModel extends Model { protected $hidden = ['field']; } ثم لنقم بتصريح مسترجع جديد وليكن باسم translated_field، وليعيد القيمة الموافقة للغة الحالية: class MyModel extends Model { public function getTranslatedFieldAttribute(){ return json_decode($this->field)[app()->getLocale()]; } } وأخيرا، لنقم بتضمين هذا الحقل مع اي كائن انموذج، نصرح المفتاح translated_field ضمن المصفوفة appends للنموذج Model المعني: class MyModel extends Model { protected $appends = ['translated_field']; } واخيرا، قم بتجربة قراءة مجموعة : MyModel::get() والحظ ان قيم translated_field المعروضة هي ما يوافق اللغة المفعلة. يمكنك ايضا استعمال المعدلات Mutators لتطبيق العملية بشكل أكثر بساطة. اقتباس
السؤال
Osama Kha
يوجد لدي حقل في الداتابيز مخزن على الشكل التالي {"en" :"value1," ar":value} احتاج استرجاع وعرض القيم في حال كانت اللغة انكليزية يعرض value1 والا يعرض value حسب اللغة يعرض القيمة
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.