Php 在UpdateOrCreate中添加if语句

Php 在UpdateOrCreate中添加if语句,php,laravel,eloquent,Php,Laravel,Eloquent,我想将用户的预测与比赛的实际分数进行比较。如果预测结果正确,则在我的预测表中,result列将更新为true。我使用collection循环我的匹配项,并使用updateOrCreate更新我的数据库字段 如何正确添加检查值是否相互匹配的if语句? 代码 public function compareScores() { $matches = $this->getMatches(); collect($matches['match']) ->ea

我想将用户的预测与比赛的实际分数进行比较。如果预测结果正确,则在我的预测表中,
result
列将更新为
true
。我使用collection循环我的匹配项,并使用
updateOrCreate
更新我的数据库字段

如何正确添加检查值是否相互匹配的if语句?

代码

public function compareScores() {

    $matches = $this->getMatches();


    collect($matches['match'])
        ->each(function ($match, $key) {

            Prediction::updateOrCreate([
                'match_id' => $match['match_id'],
            ],[

                // if($match['homeScore'] == 'homeScore'  && $match['awayScore'] == 'awayScore') {
                //    'result' => true
                // }
            ]);

        });
}

public function getMatches() {

    $finished = Match::all()->where('status', 'FINISHED');

    return $finished;

}

我想我现在完全明白了。对于这种情况,我不建议使用updateOrCreate。我会这样做:

public function compareScores() {

    $matches = $this->getMatches();


    foreach($matches as $match) {
        $predictions = Prediction::where('match_id',$match->id)->get();

        foreach($predictions as $prediction) {
            if($prediction->homeScore == $match->homeScore && $prediction->awayScore == $match->awayScore ) {
                $prediction->result=true;
                $prediction->save();
            }
        }
    }
}
这将贯穿每一场比赛,并找到为其做出的所有预测。然后,它将检查预测homeScore和awayScore是否与比赛的实际分数相匹配。如果两个分数都匹配,则会将结果更改为true

请注意,如果正确设置了模型关系,则可以进一步简化此过程。然后,您可以删除拉入$predictions=Prediction::where('match_id,$match->id)->get()的行;相反,您只需直接跳转到foreach循环并运行以下代码:

foreach($match->predictions as $prediction) { 
    ...
}

您是否尝试过在updateOrCreate中将主场得分和客场得分添加到参数中?如下所示:
Prediction::updateOrCreate(['match\u id'=>$match['match\u id'],'homeScore'=>$match['homeScore'],'awayScore'=>$match['awayScore']]
Marc-这通常是一个很好的解决方案,但如果值不匹配,他不想创建新的预测。他只想更新它们。预测是否取决于匹配id和用户id?现在,您正在显示的代码表明,每个匹配只有一个预测。您不是有很多预测吗r匹配?我想实现每个用户的每个预测都得到检查。因此,是的,一个匹配可以有来自不同用户的多个预测。我认为在这种情况下,用户Id不相关,因为我检查了所有预测,而不是特定用户的预测。我猜我所问的是,每个匹配是否有多个预测。如果因此,updateOrCreate语句需要比match_id具有更多的唯一标识信息。如果有许多预测具有相同的match_id,则无论是哪个用户做出的预测,每次运行时都会更新这些预测。最终结果将只是您检查的上一个预测的结果。D这有意义吗?