I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

أسرار الـ Eloquent ORM اللي هتنقلك لمستوى تاني في لارفيل

أسرار الـ Eloquent ORM اللي هتنقلك لمستوى تاني في لارفيل أكيد مريت باللحظة اللي بتكتب فيها كود طويل وعريض جوه الـ Controller عشان بس تجيب شوية بيانات من الداتا

أسرار الـ Eloquent ORM اللي هتنقلك لمستوى تاني في لارفيل
Reading Count: 137

أسرار الـ Eloquent ORM اللي هتنقلك لمستوى تاني في لارفيل

أكيد مريت باللحظة اللي بتكتب فيها كود طويل وعريض جوه الـ Controller عشان بس تجيب شوية بيانات من الداتا بيز (Database)، وتلاقي نفسك بتكرر نفس الـ Query في أكتر من مكان. الإحساس ده هو "وجع" كل مبرمج لارفيل (Laravel) في بداياته. الحقيقة إن لارفيل موفرة لينا أداة جبارة اسمها Eloquent ORM، بس كتير مننا بيستخدمها في الأساسيات بس، مع إن فيها "خبايا" لو عرفتها هتوفر عليك ساعات من كتابة الكود وتخلي الكود بتاعك أنضف بكتير.

يعني إيه Eloquent ORM وليه لازم نحترفها؟

الـ Eloquent ORM هي طريقة لتمثيل جداول الداتا بيز في شكل كلاسات (Classes) بنسميها Models. الميزة الكبيرة هنا إنك بتتعامل مع الداتا كأنها "أوبجكت" (Object) بدل ما تقعد تكتب SQL بايدك. السر بقى مش في الاستخدام العادي، السر في المميزات اللي بتخلي الكود بتاعك "احترافي" وقابل للصيانة (Maintainable).

قوة الـ Local Scopes: اختصار الـ Queries

تخيل عندك جدول للمقالات (Posts) وعايز دايماً تجيب المقالات "المنشورة" بس. بدل ما تكتب where('status', 'published') في كل Controller، الـ Scopes بتسمحلك تعمل ده في الـ Model نفسه.


// جوا الـ Model بتاع Post
public function scopePublished($query) {
    return $query->where('status', 'published');
}

// في الـ Controller تستخدمها كده:
$posts = Post::published()->get();

لاحظ الجمال! الكود بقى مقروء جداً وكأنك بتتكلم إنجليزي، ولو قررت تغير منطق "المنشورة" دي مستقبلاً، هتعدل في مكان واحد بس.

الـ Accessors والـ Mutators: تظبيط الداتا قبل وبعد

الـ Accessors بتسمحلك تعدل شكل الداتا وهي طالعة من الداتا بيز، والـ Mutators بتعدلها قبل ما تتخزن. مثلاً، لو عايز دايماً اسم المستخدم يبدأ بحرف كبير، مش لازم تعمل ده في كل مكان، الـ Accessor هيقوم بالواجب.


// Accessor عشان تخلي الاسم يبدأ بحرف كبير
public function getFirstNameAttribute($value) {
    return ucfirst($value);
}

// Mutator عشان تعمل هاش للباسورد أوتوماتيك
public function setPasswordAttribute($value) {
    $this->attributes['password'] = bcrypt($value);
}

استخدام الـ Appends والـ Hidden: التحكم في الـ API Responses

لو بتبني API، أكيد مش عايز ترجع كل أعمدة الجدول (زي الـ password أو created_at). تقدر تستخدم مصفوفة $hidden في الـ Model عشان تخفي أعمدة معينة، أو $appends عشان تضيف بيانات مش موجودة أصلاً في الجدول بس عايز تظهرها في الـ JSON.


protected $hidden = ['password', 'remember_token'];
protected $appends = ['full_name'];

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

نصيحة من أخ لمطور واعد

يا بطل، الـ Eloquent مش بس وسيلة لتخزين البيانات، دي لغة تواصل بينك وبين قاعدة البيانات. نصيحتي ليك: ما تكتفيش باللي بتعرفه، افتح الـ Documentation الرسمي للارفيل وخصص وقت كل أسبوع تقرأ عن ميزة جديدة زي الـ (Relationships) المتقدمة أو الـ (Events). البرمجة مش بس إن الكود يشتغل، البرمجة هي إن الكود يكون "جميل" ومفهوم لأي حد يجي وراك. استمر في التطوير، والممارسة هي اللي هتخليك خبير!


Share

Related posts

May 13, 2026 • 1 min read
Reading Count: 5
إزاي تخلي مشروعك بـ Inertia صديق لمحركات البحث عن طريق الـ SSR

إزاي تخلي مشروعك بـ Inertia صديق لمحركات البحث عن طريق الـ SSR أكيد مريت بالموقف ده: بدأت مشروعك بـ...

May 12, 2026 • 1 min read
Reading Count: 7
إدارة الحالة (State Management) في تطبيقات Laravel Inertia.. هل لسه محتاج Redux أو Vuex؟

إدارة الحالة (State Management) في تطبيقات Laravel Inertia.. هل لسه محتاج Redux أو Vuex؟ لو أنت مبرم...

May 12, 2026 • 1 min read
Reading Count: 10
دليل احتراف Laravel مع Inertia و React: بناء تطبيقات Single Page بدون تعقيدات الـ API

دليل احتراف Laravel مع Inertia و React: بناء تطبيقات Single Page بدون تعقيدات الـ API كثير مننا كمبر...