• 0

كيف أضمن isActive=1 داخل جملة استعلام تربط بين جدولين على laravel؟

لدي البنية التالية على تطبيق مبني على إطار العمل Laravel، حيث تربط علاقة بين جدولين، بالشكل التالي:

User
  - id
  - other stuff
NeighborhoodFilter
  - id
  - userId
  - neighborhoodId
  - isActive
Neighborhood
  - id
  - other stuff

أريد إنشاء وظيفة methode خاصة بـ user للحصول على جميع nighbhood الذين تربطهم به علاقة، وهذه هي محاولتي:

public function neighborhoods()
{
    return $this->hasManyThrough('Neighborhood', 'NeighborhoodFilter', 'userId', 'id');
}

لكن لا أعلم كيف أجعل حملة الاستعلام تعتمد على isActive=1؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

توفّر Laravel خاصية الربط whereHas في حال احتجنا التأكد من توفر الجدول المرتبط به -مع جدول آخر- على قيمة معينة.

وفي حالتنا هذه حيث يوجد رابط بين Neighborhood وَNeighborhoodFilter، من Neighborhood يمكننا كتابة:

public function neighborhoods()
{
    return $this->hasManyThrough('Neighborhood', 'NeighborhoodFilter', 'userId', 'id')->whereHas('neighborhoodFilters', function($q){
        $q->where('isActive', 1);
    });
}

أو يمكنك استعمال رابطة belongsToMany وَ wherePivot:

public function neighborhoods()
{
    return $this->belongsToMany('Neighborhood', 'neighborhood_filters', 'user_id', 'neighbor_id')->wherePivot('isActive', 1);
}

laravel 5.2 relationships

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن