WhereHasIn

通常我们在使用laravel模型关联的时候,有部分需求需要筛选出匹配关联模型的条件,这里介绍一个第三方插件laravel-wherehasin,
composer安装

composer require dcat/laravel-wherehasin

模型model: MarketActivity

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

通过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']
                ],
            ]
        );
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容