यह अपेक्षा करते हुए कि संबंध ठीक से सेटअप किए गए हैं, इसे whereDoesntHave()
के साथ आसानी से प्राप्त किया जा सकता है :
$roleToExclude = 1;
$users = User::query()
->whereDoesntHave('roles', function (Builder $query) use ($roleToExclude) {
$query->where('id', $roleToExclude);
})
->get();
टिप्पणी के संबंध में:यदि आप उन सभी उपयोगकर्ताओं को पुनः प्राप्त करना चाहते हैं जिनकी कम से कम एक भूमिका है, लेकिन उनकी भूमिकाओं में व्यवस्थापक भूमिका नहीं हो सकती है, तो आप इस क्वेरी का उपयोग कर सकते हैं:
$roleToExclude = 1;
$users = User::query()
->has('roles')
->whereDoesntHave('roles', function (Builder $query) use ($roleToExclude) {
$query->where('id', $roleToExclude);
})
->get();
has('roles')
यह सुनिश्चित करेगा कि EXISTS
उपयोगकर्ता के लिए एक भूमिका, जबकि whereDoesntHave('roles', fn())
सुनिश्चित करेगा कि यह एक व्यवस्थापक भूमिका नहीं है।
@Jino Antony के सुझाए गए संपादन के बारे में एक नोट:
कई-से-अनेक संबंधों से निपटने के दौरान, सभी whereX($col, $val)
क्वेरी निर्माता के तरीके अन्य तालिका . पर काम करते हैं (roles
इस मामले में), पिवट टेबल . नहीं (role_user
) पिवट टेबल पर किसी कॉलम को क्वेरी करने के लिए, आपको wherePivot('role_id', $roleToExclude)
का उपयोग करना होगा मेरे उदाहरण में।