Laravel 8 updateOrCreate

2021-07-19 11:31 更新

你還可能遇到希望更新現(xiàn)有模型或在不存在的情況下則創(chuàng)建新的模型的情景。 Laravel 提供 updateOrCreate 方法來一步實(shí)現(xiàn)。 類似于 firstOrCreate 方法,updateOrCreate 持久化模型,因此無需調(diào)用 save()

// 如果有從奧克蘭到圣地亞哥的航班,則價(jià)格定為 99 美元...
// 如果沒匹配到存在的模型,則創(chuàng)建一個(gè)...
$flight = App\Models\Flight::updateOrCreate(
    ['departure' => 'Oakland', 'destination' => 'San Diego'],
    ['price' => 99, 'discounted' => 1]
);

如果你想在單次查詢中執(zhí)行多個(gè) upsert,那么應(yīng)該使用 upsert 方法。該方法的第一個(gè)參數(shù)是由要插入或更新的值組成,而第二個(gè)參數(shù)列出相應(yīng)表中惟一標(biāo)識(shí)記錄的列,該方法的第三個(gè)也是最后一個(gè)參數(shù)是一個(gè)列數(shù)組,即如果數(shù)據(jù)庫中已經(jīng)存在匹配的記錄,應(yīng)該被更新的列。如果模型上啟用了時(shí)間戳,upsert 方法將自動(dòng)設(shè)置 created_atupdated_at 時(shí)間戳:

App\Models\Flight::upsert([
    ['departure' => 'Oakland', 'destination' => 'San Diego', 'price' => 99],
    ['departure' => 'Chicago', 'destination' => 'New York', 'price' => 150]
], ['departure', 'destination'], ['price']);

注意:除 SQL Server 之外的所有數(shù)據(jù)庫都要求 upsert 方法的第二個(gè)參數(shù)中的列具有 “primary” 或 “unique” 索引。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)