محمد لارافيل نشر 6 مارس 2023 أرسل تقرير نشر 6 مارس 2023 كيف أجعل الموديل يقوم بإرجاع عمود افتراضي وليكن اسمه على سبيل المثال title_body وقيمته كالتالي $post->title . ' ' . $post->body عندما اقوم بتنفيذ Post:all() أريد أن يأتي العمود مع باقي الاعمدة, هل هذا ممكن ؟ اقتباس
0 سمير عبود نشر 7 مارس 2023 أرسل تقرير نشر 7 مارس 2023 يُمكنك إنشاء خاصية إفتراضية بداخل النموذج بالشكل التالي عن طريق إستخدام الموصلات (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 Mustafa Suleiman نشر 7 مارس 2023 أرسل تقرير نشر 7 مارس 2023 بالإضافة إلى ما قام بشرحه سمير، هناك بعض التوضيحات اللازمة: يمكن تعديل اسم الخاصية الافتراضية من 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 هي الأسلوب الأفضل. ولكن إذا كانت العملية معقدة وتتطلب مزيدًا من التخصيص، فقد تحتاج إلى استخدام الأحداث أو الاستعلامات الحسابية. اقتباس
السؤال
محمد لارافيل
كيف أجعل الموديل يقوم بإرجاع عمود افتراضي وليكن اسمه على سبيل المثال title_body وقيمته كالتالي
$post->title . ' ' . $post->body
عندما اقوم بتنفيذ
Post:all()
أريد أن يأتي العمود مع باقي الاعمدة, هل هذا ممكن ؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.