الدالة whereRelation ، النسخة المحسنة من whereHas في لارافيل 8.57

الدالة whereRelation ، النسخة المحسنة من whereHas في لارافيل 8.57

2024-05-15 وقت القراءه : 1 دقائق

التأكد من وجود علاقة ما بين الجداول وجلب البيانات، يعتبر سهل جداً بإستخدام إطار العمل لارافيل، وللقيام بذلك كان يتم إستخدام الدالة whereHas، إلا أنه ومنذ نسخة 8.57.0 يمكن إستبدال whereHas بدالة whereRelation حيث توفر سهولة في كتابة الكود.


لفرض أن لدي جدول من المستخدمين، وجدول للمقالات، ونريد أن نجلب المستخدمين الذي لديهم مقالات وحالة status المقالة يكون 1 أي مفعل.

بإستخدام whereHas

User::select('id','name')
    ->whereHas('Articles',function (Builder $query){
        $query->where('status',1);
})->get();

أما بإستخدام whereRelation

User::select('id','name')->whereRelation('Articles','status',1)->get();


مثال أخر

لفرض أن لدي جدول الكتب، وكل كتاب له مجموعة من النجوم كتقييم، ونريد أن نجلب الكتب التي لديها أكثر من 3 نجوم

بإستخداام whereHas

$books = Book::whereHas('reviews', function (Builder $query) {
    $query->where('stars', '>', 3);
})->get();

أما بإستخدام whereRelation

$books = Book::whereRelation('reviews', 'stars', '>', 3)->get();

كما نلاحظ أن هذه الدالة whereHas تجعل من الكود أقل وأكثر قابليه للقراءه، ولا نحتاج لتمرير closure لها.


كما يمكن إيضا إستخدام orWhereRelation

إضافة تعليق
Loading...