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

كيف يمكنني إنشاء عمود افتراضي في النموذج في Laravel؟

محمد لارافيل

السؤال

كيف أجعل الموديل يقوم بإرجاع عمود افتراضي وليكن اسمه على سبيل المثال title_body وقيمته كالتالي

$post->title . ' ' . $post->body

عندما اقوم بتنفيذ 

Post:all()

أريد أن يأتي العمود مع باقي الاعمدة, هل هذا ممكن ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يُمكنك إنشاء خاصية إفتراضية بداخل النموذج بالشكل التالي عن طريق إستخدام الموصلات (Accessors):

public function getTitleBodyAttribute() {
  return $this->title . ' ' . $this->body;
}

في النُسخ الحديثة يُمكنك إستخدام الطريقة أعلاه أو الطريقة التالية:

use Illuminate\Database\Eloquent\Casts\Attribute;


protected function titleBody(): Attribute
{
  return Attribute::make(
    get: fn () => $this->title . ' ' . $this->body,
  );
}

بعد جلب البيانات ستتمكن من الوصول للخاصية title_body من الكائن لكن لن تظهر مع البيانات، إن أردت ذلك يجب إضافتها إلى المصفوفة appends:

protected $appends = [
  'title_body'
];
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بالإضافة إلى ما قام بشرحه سمير، هناك بعض التوضيحات اللازمة:

  • يمكن تعديل اسم الخاصية الافتراضية من title_body إلى أي اسم آخر يتم اختياره.
  • باستطاعتك استخدام الموصلات لتحويل أي عمود آخر في الجدول، وليس فقط العمودين title و body.
  • أيضًا يمكن إضافة مزيد من الطرق لتعديل السلوك الافتراضي لنموذج ما باستخدام Laravel. على سبيل المثال، يمكن تغيير قواعد الصحة (Validation rules) الافتراضية، أو استخدام المتغيرات المحيطة (Environmental variables) لتكوين النموذج، وما إلى ذلك.

 مثلاً يمكنك إضافة الكود التالي داخل النموذج Model:

public function getTitleBodyAttribute() {
  return $this->attributes['title'] . ' ' . $this->attributes['body'];
}

protected $appends = [
  'title_body'
];

بعد ذلك، يمكنك الوصول لقيمة العمود الجديد title_body بعد جلب البيانات من الجدول:

$posts = Post::all();
foreach ($posts as $post) {
  echo $post->title_body;
}

الكود السابق يقوم بدمج قيمة عمود title وعمود body وإرجاعهما كعمود افتراضي جديد title_body. كما يتم إضافة الخاصية title_body إلى المصفوفة appends لجعلها تأتي مع البيانات الأساسية في حالة الاستعلام عنها.

طرق أخرى لإنشاء عمود افتراضي في النموذج في Laravel

 هناك طرق أخرى لإنشاء عمود افتراضي في النموذج في Laravel، ولكن الأسلوب الأكثر شيوعًا هو استخدام Accessors كما تم شرحه سابقًا.

ومن بين الطرق الأخرى:

1- استخدام الأحداث (Events): يمكن استخدام الأحداث لتحويل قيمة العمود بعد إنشاء أو تحديث النموذج. يمكنك استخدام حدث مثل "saving" أو "saved" لتنفيذ هذه العملية.

2- استخدام الاستعلامات الحسابية (Raw SQL Queries): يمكنك استخدام استعلام SQL المباشر لإضافة عمود افتراضي إلى نتيجة استعلام. يمكن استخدام هذا الأسلوب إذا كان لديك استعلامات معقدة وكنت بحاجة إلى تعديل نتائج الاستعلام بشكل مباشر.

3- استخدام حزم الحقول الافتراضية (Default Field Packages): يوفر Laravel حزم حقول افتراضية لإضافة حقول إضافية إلى النموذج، ومن بينها الحزمة المسماة "laravel-nova-fields-value" التي تسمح بإضافة حقول افتراضية.

بالنسبة لأفضل طريقة؟، يعتمد ذلك على حاجتك ومتطلبات مشروعك. إذا كانت العملية بسيطة ولا تحتاج إلى مزيد من العمل، فقد تكون Accessors هي الأسلوب الأفضل. ولكن إذا كانت العملية معقدة وتتطلب مزيدًا من التخصيص، فقد تحتاج إلى استخدام الأحداث أو الاستعلامات الحسابية.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...