在 laravel 中使用 foreach 更新数据库
Update database using foreach in laravel
我想使用 API 在数据库中插入新数据,但首先,我想使用 $po_transaction 检查数据库,它是否存在,如果 $po_transaction 存在,做更新。但是当我输入相同的数据时,它用一个值更改了所有数据
这是我的数据库,第一次插入时:
这是我的数据库,当我输入相同的数据时(这是问题):
这是我的控制器:
public function post_data(Request $request){
$po_transaction = $request->input('po_transaction');
$data = $request->input('data');
$decode_data = json_decode($data);
if(!$decode_data){
return response()->json(['message'=>'No Data','success'=>0]);
}
$po_id = Produk::where('po_transaction','=', $po_transaction)->first();
// if po_id exist, update the data
if ($po_id) {
foreach ($decode_data as $item => $value) {
DB::table('produk')
->where('po_transaction', $po_transaction)
->update(['po_transaction'=>$po_transaction, 'nama_produk'=>$value->produk, 'harga_jual'=>$value->price]);
}
return response()->json(['message'=>'success, data saved','success'=>1]);
}else{
// if po_id not exist, create new
foreach($decode_data as $item => $value)
{
$saveTransaction = new Produk();
$saveTransaction->po_transaction = $po_transaction;
$saveTransaction->nama_produk = $value->produk;
$saveTransaction->harga_jual = $value->price;
$saveTransaction->save();
}
if($saveTransaction->save()){
return response()->json(['message'=>'success, data saved','success'=>1]);
}else{
return response()->json(['message'=>'no data saved','success'=>0]);
}
}
}
对于数据,我正在使用 json 这样的数据:
[
{"produk":"shampoo","price":"12000"},
{"produk":"noodle","price":"110200"},
{"produk":"cup","price":"1000"}
]
这是decode_data:
如何解决这个问题,当我输入相同的数据时,它不仅将所有数据更改为一个值?
您需要通过在 where
子句中证明 id 来指定您实际想要更新的记录,如下所示:
DB::table('produk')
->where([
'po_transaction' => $po_transaction,
'id_produk'=> $value->id,
])
->update([
'po_transaction'=>$po_transaction,
'nama_produk'=>$value->produk,
'harga_jual'=>$value->price,
]);
您可以在单一方法中使用此 method <model_name>::updateOrCreate()
到 Create/Update。
Produk::updateOrCreate(['po_transaction'=>$po_transaction,'nama_produk'=>$value->produk],['harga_jual'=>$value->price]);
有关详细信息,请查看此 https://laravel.com/docs/5.7/eloquent
我想使用 API 在数据库中插入新数据,但首先,我想使用 $po_transaction 检查数据库,它是否存在,如果 $po_transaction 存在,做更新。但是当我输入相同的数据时,它用一个值更改了所有数据
这是我的数据库,第一次插入时:
这是我的数据库,当我输入相同的数据时(这是问题):
这是我的控制器:
public function post_data(Request $request){
$po_transaction = $request->input('po_transaction');
$data = $request->input('data');
$decode_data = json_decode($data);
if(!$decode_data){
return response()->json(['message'=>'No Data','success'=>0]);
}
$po_id = Produk::where('po_transaction','=', $po_transaction)->first();
// if po_id exist, update the data
if ($po_id) {
foreach ($decode_data as $item => $value) {
DB::table('produk')
->where('po_transaction', $po_transaction)
->update(['po_transaction'=>$po_transaction, 'nama_produk'=>$value->produk, 'harga_jual'=>$value->price]);
}
return response()->json(['message'=>'success, data saved','success'=>1]);
}else{
// if po_id not exist, create new
foreach($decode_data as $item => $value)
{
$saveTransaction = new Produk();
$saveTransaction->po_transaction = $po_transaction;
$saveTransaction->nama_produk = $value->produk;
$saveTransaction->harga_jual = $value->price;
$saveTransaction->save();
}
if($saveTransaction->save()){
return response()->json(['message'=>'success, data saved','success'=>1]);
}else{
return response()->json(['message'=>'no data saved','success'=>0]);
}
}
}
对于数据,我正在使用 json 这样的数据:
[
{"produk":"shampoo","price":"12000"},
{"produk":"noodle","price":"110200"},
{"produk":"cup","price":"1000"}
]
这是decode_data:
如何解决这个问题,当我输入相同的数据时,它不仅将所有数据更改为一个值?
您需要通过在 where
子句中证明 id 来指定您实际想要更新的记录,如下所示:
DB::table('produk')
->where([
'po_transaction' => $po_transaction,
'id_produk'=> $value->id,
])
->update([
'po_transaction'=>$po_transaction,
'nama_produk'=>$value->produk,
'harga_jual'=>$value->price,
]);
您可以在单一方法中使用此 method <model_name>::updateOrCreate()
到 Create/Update。
Produk::updateOrCreate(['po_transaction'=>$po_transaction,'nama_produk'=>$value->produk],['harga_jual'=>$value->price]);
有关详细信息,请查看此 https://laravel.com/docs/5.7/eloquent