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

时间:2017-09-22 19:25:32

标签: laravel laravel-eloquent

我不明白为什么这个函数不会更新第一个应用程序并将其锁定状态更改为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()函数更新where where子句中的app,但它给出了相同的结果。此函数在索引函数的第一行执行,即它是在与应用程序交互的页面上运行的第一个函数。它以dd()或exit()结束,停止运行任何其他内容。

编辑:

当我在db中手动更新排名值时,我运行此脚本并且它应该更新锁,但事实并非如此。对于第一个应用程序,它应该使lock = 0,对于所有其他应用程序,应该使lock = 1,并且由于应用程序按排名desc排序,因此具有18个等级的应用程序应位于顶部,因此在更新后锁定= 0:

enter image description here

1 个答案:

答案 0 :(得分:0)

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

因此即使它的desc顺序集合中的第一项$ key也可能不总是为0.

使用:

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

这将为您提供从0开始的键。