美文网首页
WhereHasIn

WhereHasIn

作者: charmingcheng | 来源:发表于2023-03-09 10:01 被阅读0次

    通过whereHasIn查询出关联关系中的筛选条件
    Controller

    public function list(Request $request)
    {
            $pageSize = $request->query->get('page_size', 30);
            $activityName = $request->input('activity_name');
            $startAt = $request->input('start_at');
            $endAt = $request->input('end_at');
    
            $query = MarketActivity::searchQuery($request->except(['activity_name', 'start_at', 'end_at']))
                ->with(['tenant', 'baseActivity']);
    
            if (isset($activityName)) {
                $query = $query->whereHasIn('baseActivity', function($q) use ($activityName) {
                    $q->where('name', 'like', "%{$activityName}%");
                });
            }
    
            if (isset($startAt)) {
                $query = $query->whereHasIn('baseActivity', function($q) use ($startAt) {
                    $q->whereBetween('start_at', $startAt);
                });
            }
    
            if (isset($endAt)) {
                $query = $query->whereHasIn('baseActivity', function($q) use ($endAt) {
                    $q->whereBetween('end_at', $endAt);
                });
            }
    
            $pagedData = $query->paginate($pageSize)->toArray();
    
            $activities = $pagedData['data'];
            $data = [];
    
            foreach ($activities as $activity) {
                $data[] = [
                    'id' => $activity['id'],
                    'tenant' => $activity['tenant'],
                    'activity_name' => $activity['base_activity']['name'],
                    'start_at' => $activity['base_activity']['start_at'],
                    'end_at' => $activity['base_activity']['end_at'],
                ];
            }
    
            return response()->json(
                [
                    'status' => 0,
                    'message' => 'OK',
                    'data' => [
                        'list' => $data,
                        'column_info' => MarketActivity::columnInfo(),
                        'total' => $pagedData['total'],
                        'current_page' => $pagedData['current_page'],
                        'per_page' => $pagedData['per_page']
                    ],
                ]
            );
    }
    

    model:

    public function baseActivity()
    {
            return $this->belongsTo(Activity::class, 'base_activity_id');
    }
    

    相关文章

      网友评论

          本文标题:WhereHasIn

          本文链接:https://www.haomeiwen.com/subject/zpyaldtx.html