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));
});
}
推荐文章: