Laravel если оператор на блейд-представлении - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу отфильтровать данные таблицы моих пользователей по ролям и разделить их на две таблицы в представлении.

Мои роли:

  1. admin
  2. запись
  3. младший
  4. старший

В одной таблице я хочу, чтобы она отображала только данные пользователей с ролью администратора, а другая таблица должна показать данные пользователей с входом, младшие роли.

Таблица 1 отлично работает:

@foreach($users as $user)
   @if(implode (', ',$user->roles()->get()->pluck('name')->toArray()) == 'admin')
      <tr>
         <th scope="row">{{$user->id}}</th>
         <td>{{$user->name}}</td>
         <td>{{$user->email}}</td>
         <td>{{ implode (', ',$user->roles()->get()->pluck('name')->toArray()) }}</td>
         <td class="row" style="margin-left: 1%">
           <a href="{{ route('admin.users.edit', $user->id) }}" type="button" class="btn btn-primary" style="margin-right:10px;">Edit</a>
           <form action="{{ route('admin.users.destroy', $user) }}" method="POST">
               @csrf
               {{ method_field('DELETE') }}
               <button type="submit" class="btn btn-danger">Delete</button>
           </form>
        </td>
     </tr>
   @endif
@endforeach 

В таблице 2 возникают проблемы:

@foreach($users as $user)
   @if(implode (', ',$user->roles()->get()->pluck('name')->toArray()) == ['entry' && 'junior'])
      <tr>
         <th scope="row">{{$user->id}}</th>
         <td>{{$user->name}}</td>
         <td>{{$user->email}}</td>
         <td>{{ implode (', ',$user->roles()->get()->pluck('name')->toArray()) }}</td>
         <td class="row" style="margin-left: 1%">
           <a href="{{ route('admin.users.edit', $user->id) }}" type="button" class="btn btn-primary" style="margin-right:10px;">Edit</a>
           <form action="{{ route('admin.users.destroy', $user) }}" method="POST">
               @csrf
               {{ method_field('DELETE') }}
               <button type="submit" class="btn btn-danger">Delete</button>
           </form>
        </td>
     </tr>
   @endif
@endforeach 

Я пробовал следующее:

@if(implode (', ',$user->roles()->get()->pluck('name')->toArray()) == ['entry', 'junior'])
@if(implode (', ',$user->roles()->get()->pluck('name')->toArray()) == 'entry' && 'junior')
@if(implode (', ',$user->roles()->get()->pluck('name')->toArray()) == 'entry', 'junior')
@if(implode (', ',$user->roles()->get()->pluck('name')->toArray()) == ('entry' 'junior'))
@if(implode (', ',$user->roles()->get()->pluck('name')->toArray()) == ('entry', 'junior'))

и этот :

@if(implode (', ',$user->roles()->get()->pluck('name')->toArray()) == 'entry' || 'junior')

Возвращает таблицу со всеми данными.

Мне нужна таблица, чтобы вернуть все данные с пользовательскими ролями входа и младшего.

И я не могу использовать НЕ РАВНО, потому что есть старшая роль, которая обслуживается отдельно.

1 Ответ

1 голос
/ 23 апреля 2020

Вы делаете это более сложным, чем нужно. $user->roles - это коллекция, что означает, что в вашем распоряжении много вспомогательных функций. Все, что вам нужно сделать, это проверить, содержит ли коллекция значение .

@if ($user->roles->whereIn('name', ['entry', 'junior'])->count())

Вы также можете упростить свою работу @if с помощью вспомогательных функций,

@if ($user->roles->contains('name', 'admin'))
...