4

在我的一個基於某些度量標準存儲聚合計數的工作者腳本中,我沒有使用Eloquent,因爲查詢有點複雜,而且使用查詢生成器很容易編寫。我目前正在從數據庫中獲取值,我需要在數據庫中插入/更新它。通過使用查詢生成器可以使用save()方法來實現upsert操作嗎?或者我是否每次都需要檢查此條目是否在數據庫中?使用查詢生成器的Laravel upsert操作

我總共有100,000個條目,並希望將其作爲日常工作來運行。所以如果我需要檢查數據庫中是否有特定的條目,我需要多次訪問數據庫。有沒有其他解決方案呢?

我在考慮創建兩個模型類,一個使用雄辯和一個使用查詢生成器。我可以在Eloquent模型中使用我的自定義查詢嗎?

回答

3

雄辯有updateOrCreate()方法,它可以讓你做到完全想要你想要的。但是查詢生成器沒有類似的方法。

你可以建立原始查詢與查詢生成器,並使用INSERT ... ON DUPLICATE KEY UPDATE爲UPSERT解決方案。

+1

請注意'updateOrCreate'不像SQL upsert那樣原子化:https://github.com/illuminate/database/blob/2656d7a7118a6d9fe1f8c9ed22d65ab609b8ae1d/Eloquent/Builder.php#L391。它首先選擇,然後插入或更新,這可能容易出現競爭狀況。 –