# 插入更新
### [](https://octobercms.com/docs/database/query#inserts)插入物
查詢構建器還提供了`insert`一種將記錄插入數據庫表中的方法。該`insert`方法接受要插入的列名稱和值的數組:
~~~
Db::table('users')->insert(
['email' => 'john@example.com', 'votes' => 0]
);
~~~
您甚至可以`insert`通過傳遞數組數組來一次調用將多個記錄插入表中。每個數組代表要插入表中的一行:
~~~
Db::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);
~~~
#### 自動遞增ID
如果表具有自動遞增的ID,請使用該`insertGetId`方法插入記錄,然后檢索ID:
~~~
$id = Db::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);
~~~
> **注意:**使用PostgreSQL數據庫驅動程序時,insertGetId方法要求將自動遞增列命名為`id`。如果您想從其他“序列”中檢索ID,則可以將序列名稱作為第二個參數傳遞給`insertGetId`方法。
### [](https://octobercms.com/docs/database/query#updates)更新
除了將記錄插入數據庫之外,查詢構建器還可以使用該`update`方法更新現有記錄。與`update`方法一樣,該`insert`方法接受包含要更新的列的列和值對的數組。您可以`update`使用以下`where`子句約束查詢:
~~~
Db::table('users')
->where('id', 1)
->update(['votes' => 1]);
~~~
#### 更新或插入(每行一個查詢)
有時,您可能希望更新數據庫中的現有記錄,或者如果不存在匹配的記錄,則創建它。在這種情況下,`updateOrInsert`可以使用該方法。該`updateOrInsert`方法接受兩個參數:用于查找記錄的條件數組,以及包含要更新的列的列和值對的數組。
該`updateOrInsert`方法將首先嘗試使用第一個參數的列和值對查找匹配的數據庫記錄。如果記錄存在,它將使用第二個參數中的值進行更新。如果找不到該記錄,則將插入具有兩個參數的合并屬性的新記錄:
~~~
Db::table('users')
->updateOrInsert(
['email' => 'john@example.com', 'name' => 'John'],
['votes' => '2']
);
~~~
#### 更新或插入/`upsert()`(批處理查詢以在一個數據庫調用中處理多行)
該`upsert`方法將插入不存在的行,并使用新值更新已存在的行。該方法的第一個參數由要插入或更新的值組成,而第二個參數列出了唯一標識關聯表中的記錄的列。該方法的第三個也是最后一個參數是一個列數組,如果數據庫中已經存在匹配的記錄,則應更新該列:
~~~
DB::table('flights')->upsert([
['departure' => 'Oakland', 'destination' => 'San Diego', 'price' => 99],
['departure' => 'Chicago', 'destination' => 'New York', 'price' => 150]
], ['departure', 'destination'], ['price']);
~~~
> **注意:**除SQL Server以外,所有數據庫均要求該`upsert`方法第二個參數中的列具有“主”或“唯一”索引。
#### 更新JSON列
更新JSON列時,應使用`->`語法訪問JSON對象中的相應鍵。MySQL 5.7+和PostgreSQL 9.5+支持此操作:
~~~
$affected = Db::table('users')
->where('id', 1)
->update(['options->enabled' => true]);
~~~
#### 增/減
查詢構建器還提供了方便的方法來增加或減少給定列的值。這只是一條捷徑,與手動編寫該`update`語句相比,它提供了更具表達力和簡潔的界面。
這兩種方法都至少接受一個參數:要修改的列。可以選擇傳遞第二個參數來控制對列進行增減的數量。
~~~
Db::table('users')->increment('votes');
Db::table('users')->increment('votes', 5);
Db::table('users')->decrement('votes');
Db::table('users')->decrement('votes', 5);
~~~
您還可以指定其他列以在操作期間進行更新:
~~~
Db::table('users')->increment('votes', 1, ['name' => 'John']);
~~~
- 基本說明
- 基本操作
- October cms 安裝
- 后臺控制器路徑
- 圖標
- 獲取安裝網上的插件/主題
- 插件構造器使用
- 定時任務
- October后臺控制器
- vscode編輯器
- ajax操作
- 使用
- ajax更新組件
- ajax屬性API
- JavaScript API
- ajax綜合使用
- 主題
- 多語言主題
- 安裝市場主題
- 主題程序處理
- 主題
- 頁面
- 部件
- 布局
- 內容
- 組件
- 媒體
- 主題表單操作
- 表單使用
- 表單后端程序處理
- 插件
- 自定義插件
- 插件說明
- 插件導航條
- 插件數據庫設置
- 插件的設置管理
- 插件的配置文件config
- 組件
- app服務
- app容器
- 擴展行為
- 緩存
- Collection類
- Lazy Collections
- Collection方法
- 助手函數
- 數組助手函數
- 路徑助手函數
- 玄樂助手函數
- 其他助手函數
- 錯誤與記錄
- 事件處理
- HTML頁面
- 文件與目錄操作
- 散列和加密
- 郵件
- 郵件內容
- 郵件發送
- 分頁
- 模板解析器
- 動態解析器語法
- 隊列消息
- 請求與輸入
- 響應
- 視圖
- 路由器
- 配置
- 驗證操作
- 處理錯誤消息
- 錯誤消息與視圖
- 可用的驗證規則
- 有條件的驗證規則
- 驗證數組
- 錯誤消息
- 自定義驗證規則
- 模型操作
- 定義模型與其屬性
- 檢索模型
- 插入與更新
- 刪除模型
- 查詢范圍
- 事件操作
- 關聯操作
- 定義關系
- 關系類型
- 多肽關系
- 關系查詢
- 渴望加載
- 插入模型
- 數據庫操作
- 基本用法
- 數據表結構
- 查詢連貫操作
- 結果檢索
- select子句
- 插入更新
- where子句
- 排序,分組,限制和偏移
- 文件附件
- Collection操作
- 屬性操作
- 系列化json
- 數據庫屬性
- 數據庫行為
- 控制器
- 后臺控制器定義
- 后臺頁面
- 后臺組件
- 后臺表單
- 表單組件
- 表單視圖
- 表單行為
- 后臺列表
- 列表行為
- 列表過濾器
- 可用列類型
- 關系行為
- 關系行為類型
- 擴展關系行為
- 列表排序操作
- 導入導出操作
- 用于與權限
- corlate模板修改
- 修改頂部導航
- laravel問題
- 控制器不存在
- 控制器
- 路由組
- laravel筆記
- laravel 安裝
- 偽靜態配置
- 依賴注入 & 控制器
- 中間件
- 路由文件
- 視圖