التأكد من وجود علاقة ما بين الجداول وجلب البيانات، يعتبر سهل جداً بإستخدام إطار العمل لارافيل، وللقيام بذلك كان يتم إستخدام الدالة 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