input('page_size', 20))); $query = WechatUser::query()->orderByDesc('id'); if ($request->filled('keyword')) { $keyword = trim((string) $request->input('keyword')); $query->where(function ($q) use ($keyword) { $q->where('phone', 'like', "%{$keyword}%") ->orWhere('nickname', 'like', "%{$keyword}%") ->orWhere('real_name', 'like', "%{$keyword}%"); }); } $user = $request->user(); if (! $user->isSuperAdmin()) { $venueIds = $user->venues()->pluck('venues.id')->all(); if (empty($venueIds)) { $query->whereRaw('1 = 0'); } else { // 活动预约可能仅填手机号、wechat_user_id 为空;通过后一条件,在「个人中心」已绑定手机号的用户仍可按手机号检索到 $query->where(function ($outer) use ($venueIds) { $outer->whereExists(function ($sub) use ($venueIds) { $sub->selectRaw('1') ->from('reservations') ->whereNull('reservations.deleted_at') ->whereColumn('reservations.wechat_user_id', 'wechat_users.id') ->whereIn('reservations.venue_id', $venueIds); })->orWhereExists(function ($sub) use ($venueIds) { $sub->selectRaw('1') ->from('reservations') ->whereNull('reservations.deleted_at') ->whereIn('reservations.venue_id', $venueIds) ->whereNotNull('reservations.visitor_phone') ->whereNotNull('wechat_users.phone') ->whereColumn('reservations.visitor_phone', 'wechat_users.phone'); }); }); } } return response()->json($query->paginate($pageSize)); } }