Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

laravel belongsToMany Filter

I have three tables as below:

users

id|name|username|password

roles

id|name

users_roles

id|user_id|role_id

These tables communicate via belongsToMany. I would like to find a way to select all data in “users” table except ones that their user value of "role_id" is 5 in table “users_roles”. How can I do it?

like image 607
Navid Sedehi Avatar asked Oct 31 '25 17:10

Navid Sedehi


1 Answers

You should use whereDoesntHave() to select models that don't have a related model meeting certain criteria:

$users = User::whereDoesntHave('roles', function($q){
    $q->where('role_id', 5);
})->get();
like image 148
lukasgeiter Avatar answered Nov 02 '25 06:11

lukasgeiter