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

السؤال

نشر

يحتوي الجدول الخاص بي على الأعمدة التالية message و data حيث message عبارة عن سلسلة نصية string و data عبارة عن json مُحوَل إلى مصفوفة. عموما العمود message يحتوي على مفاتيح هذه المفاتيح قيمها تكون مخزنة في المصفوفة في العمود data مثلاً: 

message - 'This is test for {some_key}'
data - ['some_key' => 'laravel']

أريد تغيير هذه السلسلة في الخاصية message إلى القيمة في مصفوفة البيانات عند استرداد النموذج (ولكن عند الاسترداد فقط وليس عند الحفظ)، مثلاً في المثال السابق يكون الناتج:

This is test for laravel

كيف يُمكن عمل ذلك؟

Recommended Posts

  • 1
نشر

يُمكن عمل ذلك عن طريق الموصلات او Accessors مثلا لنقل أنه لديك عمود first_name و عمود last_name و تريد الإسم الكامل عند إسترجاع النموذج يُمكنك ذلك عن طريق إنشاء موصل بالشكل التالي في النموذج:

public function getFullNameAttribute()
{
   return "{$this->first_name} {$this->last_name}";
}

و عند جلب النموذج يُمكنك الوصول للإسم الكامل عن طريق الخاصية: full_name.

بنفس الطريقة يُمكنك إستخدام موصل لجلب الخاصية message بالشكل الذي تريد و بداخلها تستخدم الدالة str_replace لإستبدال المفاتيح بما يوافقها من قيم في الخاصية data بهذا الشكل مثلا:

public function getFormattedMessageAttribute()
{
  $message = $this->message;
  foreach ($this-data as $key => $value) {
    $message = str_replace("{{$key}}", $value, $message);
  }

  return $message
}

ثم عند جلب النموذج يُمكنك الوصول للشكل الذي تريده من خلال الوصول للخاصية formatted_message.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...