无指定关联字段,通过A表的数据更新B表的某个字段

有两张表,一张用户表,一张文章表,用户通过发表文章预测比赛结果。
现在假定所有文章都已结算完(用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)
请问大佬们有什么好的解决办法,感谢

阅读 1.9k
1 个回答

$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)的最近的十篇文章

***$ids = []; //要在此处定义$ids为空数组***

foreach ($articles as $article){
    if ($article->is_hit ==2){
        $ids[] = $article->id;  //把已猜中的文章id放入数组里
    }
    $user->update(['hit_num'=>count($ids)]);
}

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题