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

问题描述 投票:1回答:1

我有事件和用户模型。他们有数据透视表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参与按钮。

laravel
1个回答
0
投票

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

如果您想获得事件列表,并带有信息“当前用户是否已经参加”,这是一个更好的方法。

Controller

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
© www.soinside.com 2019 - 2024. All rights reserved.