स्थानीय स्कोप्स से एलोकेंट में कई जॉइन करता है
एलोकेंट और स्कोप की कार्यक्षमता के बारे में एक प्रश्न प्राप्त करें:
दो स्कूप मानते हुए:
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
बहुत बहुत शुक्रिया @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);
});
});
}