Lumen 为何不能够像 Laravel 一样在 function 中就根据主键自动实例化出 EloquentModel 实例?

像laravel public function like(Comment $comment, CommentService $service) 这样你route中{comment}主键ID, 你后面程序中就会自动获取到$comment这个Eloquent实例, 不存在这个ID就会抛出异常, 而在lumen中为何这种形式就不行了必须把$comment= Comment::find($comment) 再去查找一遍, 这样让我不爽, 有没有像laravel这样去实现的方法.
laravel :

public function like(Comment $comment, CommentService $service)
    {
        return DB::transaction(function () use ($comment, $service) {
            $like = CommentLike::where(['create_user_id' => auth()->user()->id, 'comment_id' => $comment->id])->first();

            if ($like != null) {
                //已存在点赞, 执行取消点赞
                $comment->decrement('like');
                $comment->decrement('hot', $service->getIncrementHotValue());
                $like->delete();
            } else {
                $comment->increment('like');
                $comment->increment('hot', $service->getIncrementHotValue());

                CommentLike::create([
                    'article_id' => $comment->article_id,
                    'create_user_id' => auth()->user()->id,
                    'comment_id' => $comment->id
                ]);
            }

            return responseSuccess($service->getSingleComment($comment, auth()->user(), false));
        });
    }

Lumen:

 public function like($comment, CommentService $service)
    {
        //Lumen无法在进入这个方法的时候直接根据ID注入生成我需要的对象
        $comment = Comment::where(['id' => $comment])->firstOrFail();

        return DB::transaction(function () use ($comment, $service) {
            $like = CommentLike::where(['create_user_id' => auth()->user()->id, 'comment_id' => $comment->id])->first();

            if ($like != null) {
                //已存在点赞, 执行取消点赞
                $comment->decrement('like');
                $comment->decrement('hot', $service->getIncrementHotValue());
                $like->delete();
            } else {
                $comment->increment('like');
                $comment->increment('hot', $service->getIncrementHotValue());

                CommentLike::create([
                    'article_id' => $comment->article_id,
                    'create_user_id' => auth()->user()->id,
                    'comment_id' => $comment->id
                ]);
            }

            return responseSuccess($service->getSingleComment($comment, auth()->user(), false));
        });
    }
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3

Lumen 默认是不开启 DBEloquent 如果绑定了,那你没开启这个路由岂不是解析不了了?

6年前 评论

@DavidNineRoc 我开启了lumen的Eloquent功能

6年前 评论

我的意思是框架默认不开启这个数据库查询,所以就不存在这个模型注入了,而且性能会低, Lumen 做为 API 开发应该没有这个功能

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!