簡體   English   中英

在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來指定實際上要更新的記錄where如下所示:

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()在單個方法中創建/更新。

Produk::updateOrCreate(['po_transaction'=>$po_transaction,'nama_produk'=>$value->produk],['harga_jual'=>$value->price]);

有關更多信息, 請參見此https://laravel.com/docs/5.7/eloquent

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM