Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mendapatkan semua pengguna kecuali admin dalam hubungan banyak-ke-banyak

Mengharapkan bahwa hubungan diatur dengan benar, ini dapat dicapai dengan lebih mudah dengan whereDoesntHave() :

$roleToExclude = 1;
$users = User::query()
    ->whereDoesntHave('roles', function (Builder $query) use ($roleToExclude) {
        $query->where('id', $roleToExclude);
    })
->get();

Mengenai komentar:jika Anda ingin mengambil semua pengguna yang memiliki setidaknya satu peran, tetapi peran mereka mungkin tidak berisi peran admin, maka Anda dapat menggunakan kueri ini:

$roleToExclude = 1;
$users = User::query()
    ->has('roles')
    ->whereDoesntHave('roles', function (Builder $query) use ($roleToExclude) {
        $query->where('id', $roleToExclude);
    })
->get();

has('roles') akan memastikan ada EXISTS satu peran untuk pengguna, sedangkan whereDoesntHave('roles', fn()) akan memastikan itu bukan peran admin.

Catatan tentang saran edit dari @Jino Antony:

Saat menangani relasi banyak ke banyak, semua whereX($col, $val) metode pembuat kueri beroperasi di tabel lain (roles dalam hal ini), bukan tabel pivot (role_user ). Untuk membuat kueri kolom pada tabel pivot, Anda harus menggunakan wherePivot('role_id', $roleToExclude) dalam contoh saya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan Hibernasi saat menjalankan DDL melalui Pernyataan JDBC

  2. Jumlah koneksi yang optimal di kumpulan koneksi

  3. Cara Menggabungkan Beberapa Baris Menjadi Satu Kolom di MySQL

  4. Libpuzzle Mengindeks jutaan gambar?

  5. Bergabunglah dengan dua tabel dan filter dengan klausa where