雄辩不更新集合中的第一项
问题描述:
我不明白为什么这个函数不会更新第一个应用程序,并将其锁定状态更改为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更新后:
答
sortByDesc()按降序排序,但它保持键在它返回的新集合中的顺序相同。
所以,即使其倒序在收集$键中的第一项可能不会始终为0
用途:
$pending_apps = $apps->where('status', 'PENDING')->sortByDesc('rank')->values()->all();
它会给你钥匙从0开始
什么你有错误吗? – GabMic
我没有收到错误。它只是不更新锁,当我更新数据库中的手动排名值。 – Waleed