我有下表
id | invoice_id | position | item_name | qty
---|------------|----------|-----------|----
1 | 1234 | 200 | shaft | 2
2 | 1234 | 202 | spear | 1
3 | 1235 | 200 | shaft | 10
4 | 1235 | 202 | spear | 20
如果invoice_id
和position
匹配,我如何“目标”更新第一行(id
是1
)?如果我为1234的invoice_id
添加一个position
500的新项目,它将插入一个新行,否则如果position
是200或202,它将更新现有的(名称或数量)?
我见过laravel的v8 upsert()
函数,但它只需要一个唯一的标识列,而不是在这种情况下两个。
1条答案
按热度按时间bxpogfeg1#
使用方法
updateOrCreate()
,第一个参数是唯一性条件,第二个参数是属性的剩余部分,它是upsert()
的单行版本upsert()
不限于一个唯一列第一个参数用于条目,第二个参数用于标识列的列表,第三个参数用于发现匹配项时更新的字段。
除SQL Server之外的所有数据库系统都要求提供给upsert方法的第二个参数中的列具有“主”或“唯一”索引。
为了能够使用
upsert
方法,需要在由invoice_id
和position
组成的复合键上添加unique
约束