如何在laravel中用不同的值更新前三行

如何使用不同的值(从 1 到 3)更新前三个结果:


查询以获取前 3 个结果:


$top3 = DB::table('quests')

                    ->orderby('score', 'desc') 

                    ->take(3)

                    ->pluck('id'); 

查询更新排名为 1 到 3 的列:


DB::table('quests')->whereIn('id', $top3)

                     ->first()->update(['rank', 1])

                     ->second()->update(['rank', 2])

                     ->third()->update(['rank', 3]);

              //of course the above updates are from my imagination :)

              //just trying to describe what I'm trying to do


茅侃侃
浏览 130回答 1
1回答

呼啦一阵风

您的第二个查询是多余的;没有理由查询ids只是再次查询表。在一个查询/循环中完成所有操作:$top3 = Quest::orderBy("score", "DESC")->take(3)->get();foreach($top3 AS $index => $quest){  $quest->rank = $index+1;  $quest->save();}注意:这假设您有一个Quest模型;仍然可以使用DB::table(),但如果您使用 Laravel,请使用模型。以上将在单个查询中获取 3 条记录,正确处理排序和限制,然后循环并分配排名(基于 0 $index,每次循环递增,加 1 处理)
打开App,查看更多内容
随时随地看视频慕课网APP