zoukankan      html  css  js  c++  java
  • 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

    
    
  • 相关阅读:
    路飞学城-Python开发集训-第3章
    路飞学城-Python开发集训-第2章
    路飞学城-Python开发集训-第1章
    Python:Day55 ORM多表操作
    Python:Day54 ORM
    Django的auth【认证】模块简介
    importlib的用法
    Django中的forms一些小点
    利用xlrd模块读取excel利用json模块生成相应的json文件的脚本
    json的内容回顾
  • 原文地址:https://www.cnblogs.com/sgm4231/p/10413724.html
Copyright © 2011-2022 走看看