sql >> データベース >  >> RDS >> Mysql

管理者を除くすべてのユーザーを多対多の関係に置く

    関係が適切に設定されていることを期待すると、これは whereDoesntHave()を使用してかなり簡単に実現できます。 :

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

    コメントについて:少なくとも1つの役割を持つすべてのユーザーを取得したいが、それらの役割に管理者の役割が含まれていない可能性がある場合は、次のクエリを使用できます:

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

    has('roles') EXISTSがあることを確認します ユーザーの1つの役割、 whereDoesntHave('roles'、fn()) 管理者の役割ではないことを確認します。

    @Jino Antonyの提案された編集に関するメモ:

    多対多の関係を扱う場合、すべての whereX($ col、$ val) クエリビルダーのメソッドは、他のテーブルを操作します (役割 この場合)、ピボットテーブルではありません ( role_user )。ピボットテーブルの列をクエリするには、 wherePivot('role_id'、$ roleToExclude)を使用する必要があります。 私の例では。



    1. MySQLのオプションとしてテーブル名を使用できますか?

    2. RecyclerViewでのデータの表示

    3. MySQLで新しいユーザーを作成して権限を付与する方法

    4. MySQL-このバージョンのMySQLは、'LIMIT&IN / ALL / ANY/SOMEサブクエリをまだサポートしていません