Скажем, у меня есть пользователи, роли и сводная таблица. Мне принадлежит принадлежит, настроенная как на роль, так и на пользователя.
Модель пользователя :
<?php
namespace App;
...
use App\Models\Role;
class User extends Authenticatable
{
...
public function roles()
{
return $this->belongsToMany(Role::class, "UserRoles", "userId", "roleId")
->withPivot("read", "write", "update", "delete")
->withTimestamps();
}
}
Ролевая модель :
<?php
namespace App\Models;
...
use App\User;
class Role extends Model
{
...
public function users()
{
return $this->belongsToMany(User::class, "UserRoles", "roleId", "userId")
->withPivot("read", "write", "update", "delete")
->withTimestamps();
}
}
Таблица «Пользователи» :
userId username
1 admin
2 johndoe
3 menghour
Таблица «Роли» :
roleId roleName
1 Admin
2 HR
3 Account
Сводная таблица "UserRoles" :
id userId roleId read write update delete
1 1 1 1 1 1 1
2 1 2 1 1 1 1
3 1 3 1 1 1 1
4 2 2 1 0 0 0
5 3 3 1 1 1 0
У меня вопрос, как мне получить фильтр в сводной таблице.
Например : я хочу фильтровать только userId
или roleId
или оба userId and roleId
если я выберу user = admin
в шаблоне блейда, я хочу получить все роли, которые есть у пользователя.
ожидаемый результат:
username roleName
admin Admin
admin HR
admin Account
если я выберу опцию role = HR
в шаблоне блейда, я хочу, чтобы все пользователи имели эту роль.
ожидаемый результат:
username roleName
admin HR
johndoe HR
если я выберу опцию user = admin
и role = HR
, я хочу получить только определенного пользователя и роль.
ожидаемый результат:
username roleName
admin HR
Я устал:
User::whereHas("roles", function ($query) use ($request) {
if ($request->userId) {
$query->where("userRoles.userId", "=", $request->userId);
}
if ($request->roleId) {
$query->where("userRoles.roleId", "=", $request->roleId);
}
})->get();
примечание: я использую Laravel 5.7