Laravel получение роли пользователя из модели поста - PullRequest
1 голос
/ 22 марта 2020

У меня проблема с получением имени из таблицы role_user для каждого сообщения. У меня есть ACL, поэтому у меня есть 3 таблицы - пользователи, роли, role_user.

Мой код выглядит следующим образом:

Пост-модель

public function user()
{
    return $this->belongsTo(user::class);
}

Модель пользователя.

public function posts()
{
    return $this->hasMany(post::class);
}

Ролевая модель.

public function users()
{
    return $this->hasmany(user::class);
}

PostController,

   return view ('admin.posts',[
        'posts' => Post::All()
    ]);

В блейде я повторяю имя пользователя FX по:

  @foreach ($posts as $post)
      <tr>
        <th scope="row">{{$post->id}}</th>
        <td>{{$post->category->name}}</td>
        **<td>{{$post->user->name}}</td>**
      </tr>
  @endforeach

Но проблема в том, что я хочу отобразить имя роли (из таблицы role_user) для пользователя, который написал сообщение, которое я зацикливаю.

update

Хорошо, я решил проблему, но, вероятно, есть лучший ват. Кто-нибудь?

Я добавил в модели:

Модель пользователя:

public function roles()
{
    return $this->belongsToMany(Role::class);
}

И изменил образец для подражания:

public function users()
    {
        return $this->belongsToMany(user::class);
    }

Пост-контроллер:

class PostController extends Controller
{
    public function index()
    {
        return view ('admin.posts',[
            'posts' => Post::with('user')->get(),
            'roleUsers' => User::with('roles')->get()
        ]);
    }

и в клинке я делаю

  @foreach ($posts as $post)
      <tr>
        <th scope="row">{{$post->id}}</th>
        <td>
          <p>
            @foreach ($roleUsers as $roleUser)
              @foreach($roleUser->roles as $role)
                <p>  
 {{ $role->pivot->user_id === $post->user->id ? "Role: $role->name" : "" }}
                </p>
              @endforeach
            @endforeach

Я думаю, могло бы быть лучшее решение.

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Хорошо, я решил мою проблему, спасибо за вашу помощь. Я обнаружил, что многие сообщения похожи на мои, поэтому я покажу решение.

Реализация: пользователь принадлежит посту. Роли принадлежат многим пользователям. Users принадлежит toMany Roles.

Структура БД: id пользователя | id_объекта user_name ID | name имя_пользователя ID | user_id | role_id

И я пытался добиться этого, пока просматривал все сообщения в блейде для отображения имени роль, которая принадлежит этой должности, и решение очень просто.

  @foreach ($posts as $post)
      {{$post->user->roles->first()->name}}
  @endforeach
0 голосов
/ 23 марта 2020

Используйте метод withPivot() для отношения. Вместо того, чтобы извлекать его из атрибута pivot, он будет на модели, если он получен через отношение «многие ко многим».

public function users()
{
    return $this->belongsToMany(user::class)->withPivot();
}

Тогда я бы изменил logi внешнего интерфейса c на что-то в стиле из, если предположить, что во всех сообщениях будет пользователь с данной ролью, иначе вам нужно будет выполнить проверку if.

@foreach ($roleUsers as $roleUser)
    {{ $roleUser->roles->where('id', $post->user->id)->first()->name }}
@endforeach

В вашем вопросе много кода, но я так его воспринимаю и, надеюсь, это поможет вам лучше понять это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...