laravel 不理解的call方法

返回结果:

 原来是调用同控制器的这四个方法之一...vendorzhiyicxplus-questionsrcAPI2ControllersUserQuestionController.php

/**
     * Get all.
     *
     * @author bs<414606094@qq.com>
     * @param  Request $request
     * @param  Question $questionModel
     * @return Collection
     */
    public function all(Request $request, QuestionModel $questionModel, int $user_id)
    {
        $limit = $request->query('limit', 15);
        $after = $request->query('after', 0);
        $questions = $questionModel->with('user')
        ->where('user_id', $user_id)
        ->when($after, function ($query) use ($after) {
            return $query->where('id', '<', $after);
        })
        ->limit($limit)
        ->orderBy('id', 'desc')
        ->get();

        return $questionModel->getConnection()->transaction(function () use ($questions, $user_id) {
            return $questions->map(function ($question) use ($user_id) {
                $question->answer = $question->answers()
                    ->with('user')
                    ->orderBy('id', 'desc')
                    ->first();

                if ($question->answer) {
                    if ($question->answer->anonymity && $question->answer->user_id !== $user_id) {
                        $question->answer->addHidden('user');
                        $question->answer->user_id = 0;
                    }
                    $question->answer->liked = (bool) $question->answer->liked($user_id);
                    $question->answer->collected = (bool) $question->answer->collected($user_id);
                    $question->answer->rewarded = (bool) $question->answer->rewarders()->where('user_id', $user_id)->first();
                }

                return $question;
            });
        });
    }

    /**
     * Get invitation questions.
     *
     * @author bs<414606094@qq.com>
     * @param  Request $request
     * @param  Question $questionModel
     * @return Collection
     */
    public function invitation(Request $request, QuestionModel $questionModel, int $user_id)
    {
        $limit = $request->query('limit', 15);
        $after = $request->query('after', 0);
        $questions = $questionModel->with('user')
        ->whereExists(function ($query) {
            return $query->from('question_invitation')->whereRaw('question_invitation.question_id = questions.id');
        })
        ->where('user_id', $user_id)
        ->when($after, function ($query) use ($after) {
            return $query->where('id', '<', $after);
        })
        ->orderBy('questions.id', 'desc')
        ->limit($limit)
        ->get();

        return $questionModel->getConnection()->transaction(function () use ($questions, $user_id) {
            return $questions->map(function ($question) use ($user_id) {
                $question->answer = $question->answers()
                    ->with('user')
                    ->orderBy('id', 'desc')
                    ->first();

                if ($question->answer) {
                    if ($question->answer->anonymity && $question->answer->user_id !== $user_id) {
                        $question->answer->addHidden('user');
                        $question->answer->user_id = 0;
                    }
                    $question->answer->liked = (bool) $question->answer->liked($user_id);
                    $question->answer->collected = (bool) $question->answer->collected($user_id);
                    $question->answer->rewarded = (bool) $question->answer->rewarders()->where('user_id', $user_id)->first();
                }

                return $question;
            });
        });
    }

    /**
     * Get reward questions.
     *
     * @author bs<414606094@qq.com>
     * @param  Request $request
     * @param  Question $questionModel
     * @return Collection
     */
    public function reward(Request $request, QuestionModel $questionModel, int $user_id)
    {
        $limit = $request->query('limit', 15);
        $after = $request->query('after', 0);
        $questions = $questionModel->with('user')
        ->where('user_id', $user_id)
        ->where('amount', '>', 0)
        ->whereNotExists(function ($query) {
            return $query->from('question_invitation')->whereRaw('question_invitation.question_id = questions.id');
        })
        ->when($after, function ($query) use ($after) {
            return $query->where('id', '<', $after);
        })
        ->limit($limit)
        ->orderBy('questions.id', 'desc')
        ->get();

        return $questionModel->getConnection()->transaction(function () use ($questions, $user_id) {
            return $questions->map(function ($question) use ($user_id) {
                $question->answer = $question->answers()
                    ->with('user')
                    ->orderBy('id', 'desc')
                    ->first();

                if ($question->answer) {
                    if ($question->answer->anonymity && $question->answer->user_id !== $user_id) {
                        $question->answer->addHidden('user');
                        $question->answer->user_id = 0;
                    }
                    $question->answer->liked = (bool) $question->answer->liked($user_id);
                    $question->answer->collected = (bool) $question->answer->collected($user_id);
                    $question->answer->rewarded = (bool) $question->answer->rewarders()->where('user_id', $user_id)->first();
                }

                return $question;
            });
        });
    }

    /**
     * Get other questions.
     *
     * @author bs<414606094@qq.com>
     * @param  Request $request
     * @param  Question $questionModel
     * @return Collection
     */
    public function other(Request $request, QuestionModel $questionModel, int $user_id)
    {
        $limit = $request->query('limit', 15);
        $after = $request->query('after', 0);
        $questions = $questionModel->with('user')
        ->where('user_id', $user_id)
        ->where('amount', '=', 0)
        ->whereNotExists(function ($query) {
            return $query->from('question_invitation')->whereRaw('question_invitation.question_id = questions.id');
        })
        ->when($after, function ($query) use ($after) {
            return $query->where('id', '<', $after);
        })
        ->limit($limit)
        ->orderBy('questions.id', 'desc')
        ->get();

        return $questionModel->getConnection()->transaction(function () use ($questions, $user_id) {
            return $questions->map(function ($question) use ($user_id) {
                $question->answer = $question->answers()
                    ->with('user')
                    ->orderBy('id', 'desc')
                    ->first();

                if ($question->answer) {
                    if ($question->answer->anonymity && $question->answer->user_id !== $user_id) {
                        $question->answer->addHidden('user');
                        $question->answer->user_id = 0;
                    }
                    $question->answer->liked = (bool) $question->answer->liked($user_id);
                    $question->answer->collected = (bool) $question->answer->collected($user_id);
                    $question->answer->rewarded = (bool) $question->answer->rewarders()->where('user_id', $user_id)->first();
                }

                return $question;
            });
        });
    }

理解不了call()...暂记下来 vendorlaravelframeworksrcIlluminateContainerBoundMethod.php


原文地址:https://www.cnblogs.com/sgm4231/p/10413724.html