स्थानीय स्कोप्स से एलोकेंट में कई जॉइन करता है

Aug 16 2020

एलोकेंट और स्कोप की कार्यक्षमता के बारे में एक प्रश्न प्राप्त करें:

दो स्कूप मानते हुए:

class Result extends Model {

   public function scopeIsRace($query) { return $query
            ->join('sessions', 'sessions.id', '=', 'results.session_id')
            ->where('sessions.type', 10)
   }

   public function scopeIsOfficial($query) { return $query
            ->join('sessions', 'sessions.id', '=', 'results.session_id')
            ->join('events', 'events.id', '=', 'sessions.event_id')
            ->where('events.regular_event', 1);
   }
}

दोनों को कॉल करने से सत्र के दो जोड़ होते हैं और परिणामी क्वेरी इस तरह दिखती है (काम नहीं करता)

select * from `results` inner join `sessions` on `sessions`.`id` = `results`.`session_id` inner join `sessions` on `sessions`.`id` = `results`.`session_id` inner join `events` on `events`.`id` = `sessions`.`event_id` where `driver_id` = 24 and (`sessions`.`type` = 10 or `sessions`.`type` = 11) and `events`.`regular_event` = 1

मैं सत्रों पर दोहरे जुड़ाव को कैसे रोकूं?

जवाब

1 Siggi Aug 16 2020 at 15:51

बहुत बहुत शुक्रिया @Nima पूरी तरह से एक उन्नत जहाँ के बारे में भूल जाते हैं। आपके सुझाए गए प्रश्न से एक संरचना का उपयोग किया है और यह पूरी तरह से ठीक काम करता है:

public function scopeIsRace($query) { return $query->whereHas('session', function($query){ $query->where('type', 10);
    });
}

public function scopeIsOfficial($query) { return $query->whereHas('session', function($query) { return $query->whereHas('event', function($query2) { $query2->where('regular_event', 1);
        });
    });
}