如何从数据透视表中检查数据?

我有事件和用户模型。他们有数据透视表event_users。 当用户按下参与按钮时,event_id和user_id将保存在数据透视表中。

我已经显示了所有事件列表。 现在,我想显示参与的活动而不是参与的活动。

我试过了 控制者

public function vieweventlist(){
 $data['events'] = Event::with('users')->get();
 return view('page',$data);
}

刀片文件

@foreach($events as $event)
<h1>Event Name</h1>
@foreach($event->users as $check)
    @if($check->pivot->user_id == auth()->user()->id && $check->pivot->event_id == $event->id)
      <button type="button" class="btn participateevent" disabled>Participated</button>
    @else 
      <button type="button" class="btn participateevent">Participate</button>
    @endif
@endforeach 
@endforeach

我在事件和用户模型中都设置了belongsToMany关系。

此代码的问题是第二个foreach循环是数据透视表循环。假设我在数据透视表中有一个数据。我列出了5个事件。由于数据透视表foreach(第二个),刀片文件中仅显示了一个按钮,该按钮已参与但未显示@else参与按钮。

评论
  • et_ea
    et_ea 回复

    您的第二个foreach使它如此,只有具有参与者(无论是否为已登录用户)的事件才会显示一个按钮(已参与或参与)。如果事件没有任何用户连接,则不会显示任何按钮。

    如果您想获得带有信息“如果当前用户已经在参与或不参加”的事件列表,那么这是一种更好的方法。

    控制者

    public function vieweventlist(){
        $data['events'] = Event::withCount('users', function($user) {
            $user->where('id','=', auth()->id());
        })->get();
     return view('page',$data);
    }
    

    @foreach($events as $event)
        <h1>Event Name</h1>
        @if($event->users_count)
          <button type="button" class="btn participateevent" disabled>Participated</button>
        @else 
          <button type="button" class="btn participateevent">Participate</button>
        @endif
    @endforeach