# 基本用法
### 介紹
連接到數據庫并運行查詢是一個簡單的過程,可以通過使用原始SQL,[查詢構建器](https://octobercms.com/docs/database/query)或[活動記錄模型來支持](https://octobercms.com/docs/database/model)。管理數據庫表和填充種子數據由[遷移和種子程序處理](https://octobercms.com/docs/database/structure)。
原始SQL和使用查詢生成器的執行速度更快,應用于簡單任務。Active Record是流行的框架Ruby On Rails使用的一種方法。它提供了一個簡單的界面來執行重復的任務,例如創建,讀取,更新和刪除數據庫記錄。您可以[在Wikipedia上](http://en.wikipedia.org/wiki/Active_record_pattern)了解有關[活動記錄模式的](http://en.wikipedia.org/wiki/Active_record_pattern)更多信息。
### [](https://octobercms.com/docs/database/basics#configuration)組態
您的應用程序的數據庫配置位于該`config/database.php`文件中。在此文件中,您可以定義所有數據庫連接,并指定默認情況下應使用哪個連接。此文件中提供了所有受支持的數據庫系統的示例。
### [](https://octobercms.com/docs/database/basics#read-write-connections)讀/寫連接
有時,您可能希望對SELECT語句使用一個數據庫連接,而對INSERT,UPDATE和DELETE語句使用另一個數據庫連接。無論使用原始查詢,查詢生成器還是模型,都可以輕松指定使用哪個連接。
要查看應如何配置讀/寫連接,讓我們看下面的示例:
~~~
'mysql' => [
'read' => [
'host' => '192.168.1.1',
],
'write' => [
'host' => '196.168.1.2'
],
'driver' => 'mysql',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
],
~~~
請注意,兩個鍵已添加到配置數組:`read`和`write`。這兩個鍵的數組值都包含一個鍵:`host`。`read`和`write`連接的其余數據庫選項將從主`mysql`陣列合并。
如果我們希望覆蓋主數組中的值,則只需要在`read`和`write`數組中放置項目即可。因此,在這種情況下,`192.168.1.1`將用作“讀取”連接,而`192.168.1.2`將用作“寫入”連接。主`mysql`陣列中的數據庫憑據,前綴,字符集和所有其他選項將在兩個連接之間共享。
### [](https://octobercms.com/docs/database/basics#running-queries)運行原始SQL查詢
一旦配置了數據庫連接,就可以使用`Db`Facade運行查詢。的`Db`立面提供了每種類型的查詢方法:`select`,`update`,`insert`,`delete`,和`statement`。
#### 運行選擇查詢
要運行基本查詢,我們可以`select`在`Db`外觀上使用方法:
~~~
$users = Db::select('select * from users where active = ?', [1]);
~~~
傳遞給該`select`方法的第一個參數是原始SQL查詢,而第二個參數是需要綁定到查詢的任何參數綁定。通常,這些是`where`子句約束的值。參數綁定可防止SQL注入。
該`select`方法將始終返回`array`結果。數組中的每個結果將是一個PHP`stdClass`對象,使您可以訪問結果的值:
~~~
foreach ($users as $user) {
echo $user->name;
}
~~~
#### 使用命名綁定
`?`您可以使用命名綁定執行查詢,而不是用來表示參數綁定:
~~~
$results = Db::select('select * from users where id = :id', ['id' => 1]);
~~~
#### 運行插入語句
要執行`insert`語句,可以`insert`在`Db`外觀上使用方法。像一樣`select`,此方法將原始SQL查詢作為其第一個參數,并將綁定作為第二個參數:
~~~
Db::insert('insert into users (id, name) values (?, ?)', [1, 'Joe']);
~~~
#### 運行更新語句
該`update`方法應用于更新數據庫中的現有記錄。受該語句影響的行數將由方法返回:
~~~
$affected = Db::update('update users set votes = 100 where name = ?', ['John']);
~~~
#### 運行刪除語句
該`delete`方法應用于從數據庫中刪除記錄。與一樣`update`,將返回刪除的行數:
~~~
$deleted = Db::delete('delete from users');
~~~
#### 運行一般性聲明
某些數據庫語句不應返回任何值。對于這些類型的操作,您可以`statement`在`Db`外觀上使用方法:
~~~
Db::statement('drop table users');
~~~
### [](https://octobercms.com/docs/database/basics#accessing-connections)多個數據庫連接
使用多個連接時,可以通過立面上的`connection`方法訪問每個連接`Db`。在`name`傳遞給`connection`方法應該對應于您列出的其中一個連接`config/database.php`配置文件:
~~~
$users = Db::connection('foo')->select(...);
~~~
您還可以使用`getPdo`連接實例上的方法訪問原始的基礎PDO實例:
~~~
$pdo = Db::connection()->getPdo();
~~~
### [](https://octobercms.com/docs/database/basics#database-transactions)數據庫交易
要在數據庫事務中運行一組操作,可以`transaction`在`Db`外觀上使用該方法。如果在事務內引發異常`Closure`,則事務將自動回滾。如果`Closure`執行成功,事務將自動提交。您無需擔心使用該`transaction`方法時手動回滾或提交:
~~~
Db::transaction(function () {
Db::table('users')->update(['votes' => 1]);
Db::table('posts')->delete();
});
~~~
#### 手動使用交易
如果您想手動開始事務并完全控制回滾和提交,則可以`beginTransaction`在`Db`外觀上使用該方法:
~~~
Db::beginTransaction();
~~~
您可以通過以下`rollBack`方法回滾事務:
~~~
Db::rollBack();
~~~
最后,您可以通過以下`commit`方法提交交易:
~~~
Db::commit();
~~~
> **注意:**使用`Db`Facade的事務方法還可以控制[查詢構建器](https://octobercms.com/docs/database/query)和[模型查詢的](https://octobercms.com/docs/database/model)事務。
### [](https://octobercms.com/docs/database/basics#database-events)數據庫事件
如果您希望接收應用程序執行的每個SQL查詢,則可以使用該`listen`方法。此方法對于記錄查詢或調試很有用。
~~~
Db::listen(function($sql, $bindings, $time) {
//
});
~~~
就像[事件注冊一樣](https://octobercms.com/docs/services/events#event-registration),您可以`boot`使用[插件注冊文件](https://octobercms.com/docs/plugin/registration#registration-methods)的方法注冊查詢偵聽器。另外,插件可以在插件目錄中提供一個名為**init.php**的文件,您可以使用該文件放置此邏輯。
### [](https://octobercms.com/docs/database/basics#query-logging)查詢記錄
啟用查詢日志記錄后,日志將保留在針對當前請求運行的所有查詢的內存中。調用該`enableQueryLog`方法以啟用此功能。
~~~
Db::connection()->enableQueryLog();
~~~
要獲取已執行查詢的數組,可以使用以下`getQueryLog`方法:
~~~
$queries = Db::getQueryLog();
~~~
但是,在某些情況下,例如在插入大量行時,這可能導致應用程序使用過多的內存。要禁用日志,可以使用以下`disableQueryLog`方法:
~~~
Db::connection()->disableQueryLog();
~~~
> **注意**:為了更快地進行調試,相反,調用`trace_sql`[helper函數](https://octobercms.com/docs/services/error-log#helpers)可能更有用。
- 基本說明
- 基本操作
- 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 安裝
- 偽靜態配置
- 依賴注入 & 控制器
- 中間件
- 路由文件
- 視圖