有两张表,一张用户表,一张文章表,用户通过发表文章预测比赛结果。
现在假定所有文章都已结算完(用is_hit
表示文章是否猜中结果,1=>未结算 2猜中 3=>未猜中)
然后取每位用户的最近十篇文章来获得命中率
因为是对所有用户一次性更新信息的,我写的代码如下
$users = User::where('status',2)->get(); //先把所有状态正常的用户取出来
foreach ($users as $user){
$articles = Articles::where('user_id',$user->id)->where('is_hit','>',1)->orderByDesc('id')->take(10)->get(); //取用户已经结算(is_hit>1)的最近的十篇文章
foreach ($articles as $article){
if ($article->is_hit ==2){
$ids[] = $article->id; //把已猜中的文章id放入数组里
}
$user->update(['hit_num'=>count($ids)]);
}
}
这样写的结果是,文章找不到对应的用户id
,导致$ids
这个数组是累加的情况,比如:
有A、B两个用户,A的文章猜中3篇,B的文章猜中5篇,$ids
第一次存入的数据是3,故A的hit_num
字段更新是正确的,而第二次$ids
累加了第一次的数据,导致B的hit_num
的值为8(正确应为5)
请问大佬们有什么好的解决办法,感谢
$users = User::where('status',2)->get(); //先把所有状态正常的用户取出来
foreach ($users as $user){
}