Model在循环内执行自增/自减操作后的save问题
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start by running the issue's loop reproduction and compare the generated update for dec('stock_qty', 1)->save() with the Db::Raw alternative. No source file or test is named; trace the dec and save entry points, then add coverage showing repeated iterations preserve each decrement instead of resetting the value.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
模拟一个扣库存动作
for ($i = 0; $i < 10; $i++) {
$info = (new MerchantGoods())->where('id', 1)->findOrEmpty();
$info->dec('stock_qty', 1)->save();
}
上面的写法执行后无论库存数是都是,最终均会被设置成1
跟踪后发现最后一次执行的update语句为UPDATE b_merchant_goods SET stock_qty = '1' WHERE id = '1'
改写成一下方式则符合预期
for ($i = 0; $i < 10; $i++) {
$info = (new MerchantGoods())->where('id', 1)->findOrEmpty();
$info->save([
'stock_qty' => Db::Raw('stock_qty -1'),
]);
}
- Lingua principale
- PHP
- Stelle
- 437
- Fork
- 188
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di top-think/think-orm
-
升级 PHP 8.5 后报错Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
-
getChangedData() 松散比较导致前导零丢失Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
-
在php7.3及以上版本中,会出错Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
-
模型的`data()`方法调用之后,之前的赋值丢失Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
Tutte le issue di top-think/think-orm
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
backdrop-contrib/paragraphs#299 ·
-
tech-debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
landsman/adminer-desktop#206 ·
I maintainer di solito rispondono entro 1 giorno
-
Explosm: Cyanide & Happiness failed with: https://explosm.net/comics/latest#comic resulted in 307Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
RSS-Bridge/rss-bridge#5154 ·
I maintainer di solito rispondono entro 1 giorno
-
[Sync EN] calendar: document the ValueErrors thrown for invalid calendar IDs and dates (#6005)Apertasync-en
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
I maintainer di solito rispondono entro 2 giorni