雄辩不更新集合中的第一项

问题描述:

我不明白为什么这个函数不会更新第一个应用程序,并将其锁定状态更改为0并将其设置为1.它应该更新所有具有暂挂状态的应用程序。雄辩不更新集合中的第一项

public function updateLockState($stu_id) 
    { 

    $apps = Application::where('stu_id', $stu_id)->get(); 

    $acceptedApps = $apps->whereIn('status', [ 'ACCEPTED_W_SCHOLARSHIP', 'ACCEPTED_WO_SCHOLARSHIP', 'ACCEPTED_BYSTUDENT', 'ACCEPTED_CONDITIONALLY', 'UNDER_REVIEW', 'REGISTERED' ]); 

    if ($acceptedApps->count() == 0) 
    { 
     // This has two apps showing in descending order by rank. 
     $pending_apps = $apps->where('status', 'PENDING')->sortByDesc('rank'); 

     foreach ($pending_apps as $key => $value) 
     { 

      if ($key == 0) 
      { 
       $value->update(['locked' => 0]); 
      } 
      else 
      { 
       $value->update(['locked' => 1]); 
      } 

     } 

    } 

    dd(); 

} 

我甚至试图使用DB:table()函数来更新应用程序id在where子句中,但它会给出相同的结果。该函数在索引函数的第一行执行,即它是在与应用程序交互的页面上运行的第一个函数。它以dd()或exit()结束,这会阻止其他任何运行。

编辑:

当我手动更新分贝等级值,运行此脚本,它应该更新锁,但事实并非如此。它应该做的第一个应用程序,并锁定= 1锁定= 0所有其他应用程序,因为应用程序的职级进行排序DESC它,应用程序与18级应该是顶部,因此它的锁= 0更新后:

enter image description here

+0

什么你有错误吗? – GabMic

+0

我没有收到错误。它只是不更新​​锁,当我更新数据库中的手动排名值。 – Waleed

sortByDesc()按降序排序,但它保持键在它返回的新集合中的顺序相同。

所以,即使其倒序在收集$键中的第一项可能不会始终为0

用途:

$pending_apps = $apps->where('status', 'PENDING')->sortByDesc('rank')->values()->all(); 

它会给你钥匙从0开始