我试图根据其他列记录来更新记录的列,但是由于对表中的每个记录执行了重复查询,因此导致重复查询。我有办法避免这种情况并改进此代码。
public function updateReviewColumn(){
$reviewData = $this->pluck('indicator')->toArray();
foreach ($reviewData as $datum) {
if ($datum == 'Y')
$this->where('indicator', $datum)
->update(['reviewindicator' => 'Yes']);
else
$this->where('indicator', $datum)
->update(['reviewindicator' => 'No']);
}
}
答案 0 :(得分:1)
我会将以下查询转换为雄辩的stmt:
UPDATE yourTable
SET indicator = IF(indicator = 'Y', 'Yes','No'),
WHERE indicator= 'Y' OR indicator= 'N'
要想一试,我认为您应该进行数据库原始查询(如果您落后了MySQL)
否则,您可以使用两种不同的口才技巧
MyTable::where('indicator', 'Y')->update(['indicator' => 'Yes']);
MyTable::where('indicator', 'N')->update(['indicator' => 'No']);
如果在MySQL中启用了safe_updates,可能会遇到问题