laravel 查询

public function recommends(Request $request)
    {
        // $sort = $request->query('sort');
        $userId = $request->query('userId');
        $email = $request->query('email');
        $name = $request->query('name');
        $phone = $request->query('phone');
        // $role = $request->query('role');
        $perPage = $request->query('perPage', 1);
        $showRole = $request->has('show_role');
        $datas = [
            'page' => [],
            'roles' => '',
            'lastPage' => 0,
            'perPage' => $perPage,
            'total' => 0,
        ];

        if ($showRole) {
            $datas['roles'] = Role::all();
        }

        // user id
        if ($userId && $users = UserRecommended::where('user_id', $userId)->paginate($perPage)) {
            $datas['page'] = $users->map(function ($user) {
                $user->setHidden([]);
                $user->load('user');

                return $user->user;
            });

            return response()->json($datas)->setStatusCode(200);
        }

        $sourceUsers = [];
        if ($name || $email || $phone) {
            $sourceUsers = User::when($name, function ($query) use ($name) {
                return $query->where('name', 'like', "%{$name}%");
            })
            ->when($email, function ($query) use ($email) {
                return $query->where('email', '=', $email);
            })
            ->when($phone, function ($query) use ($phone) {
                return $query->where('phone', 'like', "%{$phone}%");
            })
            ->select('id')
            ->get()
            ->pluck('id');
        }

        $users = UserRecommended::with('user')
            ->when($sourceUsers, function ($query) use ($sourceUsers) {
                return $query->whereIn('user_id', $sourceUsers);
            })
            ->paginate($perPage);

        $list = $users->getCollection();

        $datas['page'] = $list->map(function ($user) {
            $user->user->setHidden([]);

            return $user->user;
        });

        $datas['lastPage'] = $users->lastPage();
        $datas['perPage'] = $perPage;
        $datas['total'] = $users->total();
        $datas['currentPage'] = $users->currentPage();

        return response()->json($datas)->setStatusCode(200);
    }
posted @ 2019-03-20 14:10  心之所依  阅读(761)  评论(0编辑  收藏  举报