Hiii 我有2个数据库表,其中的列表为:1“ id,invoice_id,主题,总计”表:2“ id,invoice_id,item_name,价格”。当我尝试通过invoice_id来更新记录时(如果记录不存在)在项目表中,不会在项目表中插入新项目。
在这里我附上了我的JSON数据
{
"date": "2019-06-08",
"client_id": "1",
"currency_id": 4,
"total_amount": null,
"subject": "RD Management",
"items": [
{
"item_name": "Saving",
"price": "500"
},
{
"item_name": "Fix",
"price": "500"
},
{
item_name": "Current",
"price": "200"
}
]
}
这里也是一个问题 我的JSON也无法发送item_id 所以没有商品编号,我该如何更新我的记录...? 这里第三项不在我的桌子上
这是我的控制器
foreach ($request->items as $key => $items)
{
$item_update = [
'item_name' => $items['item_name'],
'price' => $items['price']
];
DB::table('items')
->where('invoice_id', $id)
->update($item_update);
}
我除了这样的输出
"items": [
{
"id": 1,
"invoice_id": "1",
"item_name": "Saving",
"price": "500",
},
{
"id": 2,
"invoice_id": "1",
"item_name": "Fix",
"price": "500",
},
{
"id": 3,
"invoice_id": "1",
"item_name": "current",
"price": "200",
},
]
但我的实际输出是
"items":[
{
"id":"1"
"item_name": "Fix",
"price": "500",
},
{
"id":"2"
"invoice_id": "1",
"item_name": "Fix",
"price": "500",
}
]
此输出在更新时覆盖item_name。 有什么办法可以解决这两个问题。
答案 0 :(得分:0)
如果您无法识别已经存在的项目和哪些是新项目,则剩下的选择是通过item_name
+ invoice_id
来识别项目。不利之处是您无法通过这种方式更新item_name
。
如果您已正确设置了雄辩的模型,则可以使用updateOrCreate()
。
<?php
foreach ($request->items as $key => $items)
{
$itemAfterUpdate = App\Item::updateOrCreate(
[
'invoice_id' => $id,
'item_name' => $items['item_name']
],
[ 'price' => $items['price'] ]
);
}
如果没有,那么您基本上必须执行Eloquent在幕后所做的事情,即根据item_name
和invoice_id
检查该项目是否已经存在,然后相应地进行插入或更新。
<?php
foreach ($request->items as $key => $items)
{
$alreadyExists = DB::table('items')
->where('invoice_id', $id)
->where('item_name', $items['item_name'])
->exists();
}
if($alreadyExists){
DB::table('items')
->where('invoice_id', $id)
->where('item_name' => $items['item_name'])
->update(['price' => $items['price']);
}
else{
DB::table('items')->insert([
'invoice_id' => $id,
'item_name' => $items['item_name'],
'price' => $items['price']
]);
}
}