我在控制器中有一個函式,它根據 Auth::id 獲取所有產品:
$products = DB::table('products')
->where('created_by_id', Auth::id())
->get();
然后有一個 for each 回圈如下插入和更新:
foreach($products as $key => $product){
$previous_product = Product::create((array) $product);
$previous_product->save();
$previous_product->update(['created_by_id' => $reseller_id->reseller_id]);
}
哪個作業得很好,但我面臨的問題是產品被復制了兩次而不是一次。如下圖所示:

我試圖做的是使用 replicate() 方法而不是 create() 但是我在復制時得到了 null 并且問題仍然存在。
為解決我的問題而提供的任何幫助將不勝感激。
uj5u.com熱心網友回復:
嘗試將 insertOrIgnore 方法與查詢生成器一起使用它將解決您的問題。
DB::table('products')->insertOrIgnore($arrayOfProducts);
uj5u.com熱心網友回復:
我再試replicate一次:
$products = Product::where('created_by_id', Auth::id())->get();
foreach ($products as $product) {
$product->replicate()
->fill(['created_by_id' => $reseller_id->reseller_id])
->save();
}
您擁有的代碼似乎不會導致插入 2 條新記錄,盡管save不需要您的呼叫,因為create創建記錄(保存它)并update呼叫save.
uj5u.com熱心網友回復:
您還可以為updateOrCreate()操作設定方法,這樣您就可以確保僅在記錄存在或創建時才進行更新。這是一個鏈接https://laravel-news.com/firstornew-firstorcreate-firstor-updateorcreate
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407024.html
標籤:
上一篇:如何在url中包含函式
下一篇:用戶觀察者仍然是相同的值
