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.
المدونة
يونيو 17, 2025
React Labs: View Transitions وActivity المنشور اتكتب يوم 23 أبريل 2025 من Ricky Hanlon. في React Labs النهارده بيقدّموا ميزتين تجريبيّتين مودرن...
يوليو 07, 2025
إزاي نعمل كاش لتقارير بفترة زمنية ثابتة إزاي نولّد تقارير ضخمة في الخلفية باستخدام الـ Job Queues 1. 🧠 كاش للتقارير بفترة زمنية ثابتة لو ع...
يونيو 30, 2025
أحدث مميزات ECMAScript 2025 في 25 يونيو 2025، تم اعتماد ES2025 رسميًا. الإضافات الجاية هتسهل عليك كتابة الكود: 1. 📦 Import Attributes و JSON Module...
يوليو 27, 2025
أدوات قوية تقدر تستخدمها لتطوير تطبيقات Laravel بشكل احترافي: Inertia.js v2، وView Creators، وحزمة Laravel HLS لبث الفيديوهات بأمان. ١. Inertia.j...
أغسطس 06, 2025
عند بناء تطبيقات باستخدام React، هناك حاجة إلى إدارة البيانات التي تتغير نتيجة تفاعل المستخدم أو جلب البيانات من مصادر خارجية. توجد ثلاث وسائل رئيسي...
يوليو 20, 2025
🔧 1. لارافيل 12.0 – ستارتر كيتس وتعديلات أساسية إصدار 12.0 جاب Starter Kits جاهزة للـ React، Vue، Livewire، وكمان دمج مع WorkOS AuthKit،...