Laravel 12.19: استخدام Attributes لتنظيم الـ Query Builder
يوليو 7, 2025Laravel 12.19: استخدام Attributes تنظّم Query Builder
في Laravel 12.19، دلوقتي تقدر تستخدم Attribute اسمه #[UseEloquentBuilder]
علشان تحدد Query Builder خاص بالموديل، من غير ما تبقى محتاج تعمل override للـ newEloquentBuilder()
— ده بيخلي الكود أوضح وأسهل في الصيانة.
ليه تستخدم "Query Builder" خاص؟
- خلي الموديلات مركزة — ركّز على العلاقات، مش على استعلامات معقدة.
- جمّع المنطق القابل لإعادة الاستخدام زي
wherePublished()
في مكان واحد. - ارتّب الكود أكتر وتجميع الاستعلامات يخليه أوضح.
الطريقة القديمة
// app/Models/Article.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Builders\ArticleBuilder;
class Article extends Model {
public function newEloquentBuilder($query) {
return new ArticleBuilder($query);
}
}
الطريقة الجديدة
// app/Models/Article.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Builders\ArticleBuilder;
use Illuminate\Database\Eloquent\Attributes\UseEloquentBuilder;
#[UseEloquentBuilder(ArticleBuilder::class)]
class Article extends Model {
// مش محتاجين Override
}
مثال على Builder
// app/Builders/ArticleBuilder.php
namespace App\Builders;
use Illuminate\Database\Eloquent\Builder;
class ArticleBuilder extends Builder {
public function whereActive(): static {
return $this->where('is_active', true);
}
public function recent(int $days = 7): static {
return $this->whereDate('created_at', '>=', now()->subDays($days));
}
public function byCategory(string $slug): static {
return $this->whereHas('category', fn($q) => $q->where('slug', $slug));
}
}
إزاي تستخدمه
$articles = Article::query()
->whereActive()
->recent(14)
->byCategory('tech')
->orderByDesc('published_at')
->paginate(10);
نصائح احترافية
- ✅ استخدمه بس لما الكود بتاعك تتكرر فيه الاستعلامات.
- ⚙️ خلي الأسامي مرنة، زي
recent(int $days)
. - 🧪 اكتب tests لكل دالة في الـ Builder.
- 📘 ممكن تخلطها مع Global Scopes لو حابب تنظف الكود أكتر.
الميزة دي جات ضمن إصدار Laravel 12.19 اللي كمان ضمّت: نوع Casting جديد AsFluent
، Middleware للـ Job اسمه FailOnException
، ودوال assertions جديدة للـ redirect back.
المدونة
تذكير بالمهام مع Laravel وMongoDB
يونيو 30, 2025
📌 بناء تطبيق تذكير مهام المقال ده بيشرح إزاي نعمل تطبيق Laravel يستخدم MongoDB علشان يذكرك بالمهمات بتاعتك، مع تسجيل دخول، CRUD، وتذكير بالإيميلات...
الدليل الكامل لتحديثات ECMAScript 2025 للمطورين
يوليو 06, 2025
📘 شرح تفصيلي لتحديثات ECMAScript 2025 جميع مميزات ECMAScript 2025، مع أمثلة عملية وفهم ليه الميزة دي مهمة لأي مبرمج واجهة أمامية. ١. مجموعات مسما...
تحديث Laravel 12.18.0
يونيو 17, 2025
تحديث Laravel 12.18.0 صدر نسخه Laravel 12.18.0 فيها شوية ميزات جامدة كده: توابع لتشفير وفك تشفير النصوص باستخدام Stringable ديركت في chain strings...
إزاي تستخدم Web Components ببساطة وذكاء
يوليو 06, 2025
إزاي تستخدم Web Components ببساطة وذكاء كتير من المطورين بيفكروا إن Web Components معمولة عشان تبقى بديل كامل لفريموركات زي React أو Vue. بس الحقيق...
إتقان التحقق الشرطي في Laravel 12
يوليو 07, 2025
إتقان التحقق الشرطي في Laravel 12 في Laravel 12، نظام التحقق (validation) قوي جدًا، وميزة التحقق الشرطي بتخليك تتحكم في القوانين بتاعتك ب...
دليل للأنيميشن المتحركة بالسكّول بس بـ CSS
يونيو 26, 2025
دليل للأنيميشن المتحركة بالسكّول بـ CSS دلوقتي تقدر تربط الأنيميشن بتاعتك بـ السكّول من غير جافاسكريبت — كله CSS بحت. 1. التلات مكونات بتوع...
