laravel 不理解的call方法

返回结果:

 原来是调用同控制器的这四个方法之一...vendor\zhiyicx\plus-question\src\API2\Controllers\UserQuestionController.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()...暂记下来 vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php

 

 

转载于:https://www.cnblogs.com/sgm4231/p/10413724.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值