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