Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nhận tất cả người dùng ngoại trừ quản trị viên trong mối quan hệ nhiều người

Mong rằng các mối quan hệ được thiết lập đúng cách, điều này có thể đạt được khá dễ dàng với whereDoesntHave() :

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

Về nhận xét:nếu bạn muốn truy xuất tất cả người dùng có ít nhất một vai trò, nhưng vai trò của họ có thể không chứa vai trò quản trị viên, thì bạn có thể sử dụng truy vấn sau:

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

has('roles') sẽ đảm bảo có EXISTS một vai trò cho người dùng, trong khi whereDoesntHave('roles', fn()) sẽ đảm bảo đó không phải là vai trò quản trị viên.

Lưu ý về chỉnh sửa được đề xuất của @Jino Antony:

Khi xử lý quan hệ nhiều-nhiều, tất cả whereX($col, $val) các phương thức của trình tạo truy vấn hoạt động trên bảng khác (roles trong trường hợp này), không phải là bảng tổng hợp (role_user ). Để truy vấn một cột trên bảng tổng hợp, bạn cần sử dụng wherePivot('role_id', $roleToExclude) trong ví dụ của tôi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quyền bị từ chối bên trong / var / www / html khi tạo một trang web và đó là các tệp với máy chủ apache2

  2. Giám sát hiệu quả MySQL với Bảng điều khiển SCUMM:Phần 3

  3. Làm cách nào để kết nối bàn làm việc mysql với chạy mysql bên trong docker?

  4. Làm thế nào để tránh sửa chữa với Keycache?

  5. json_encode không trả về bất cứ thứ gì