Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कई-से-अनेक संबंधों में व्यवस्थापकों को छोड़कर सभी उपयोगकर्ताओं को प्राप्त करना

यह अपेक्षा करते हुए कि संबंध ठीक से सेटअप किए गए हैं, इसे 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) का उपयोग करना होगा मेरे उदाहरण में।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WHERE मानदंड पर विशेष ध्यान न दें

  2. Flask_SQLAlchemy, MySQL, स्वीडिश अक्षरों को स्टोर करें , ä, ö?

  3. मैसकल इंडेक्स कॉन्फ़िगरेशन

  4. MYSQL:एक अतिरिक्त कॉलम वाली दूसरी तालिका के साथ MySQL में एक तालिका से दूसरी तालिका में पूरी पंक्ति की प्रतिलिपि कैसे करें?

  5. EXTRACT () उदाहरण – MySQL