數據庫連接
.env
文件以鍵值對方式保存本地數據連接配置,config\database.php
會優先讀取.env
中的值,否則啓用env
方法中的默認值,因此在部署(前)時應保證database.php
中有關數據庫配置部分的默認值有效,以便保證在生產環境中無論是否存在.env
文件都能正常工作。database.php
中的connections
可以配置多個連接源,並通過default
鍵指定默認使用的連接,或者在代碼中通過connect
方法指定所用的連接名
Db::connect('mysql_backup_2')->table('tbName')->select();
通過Model獲取數據
通過建立Model
獲取數據的方法是在app
下建立model
文件夾,創建文件名與數據庫真實表名具有一致或映射(比如前綴)關係的模型文件,如數據庫中表名是User可創建User.php並使其繼承think\Model
,見代碼
namespace app\model;
use think\Model;
class User extends Model
{
// 不是忘寫了,是不用寫
}
在控制器代碼中即可使用下方法訪問獲取數據
public function getUser()
{
return json(User::select());
}
在Model裏切換數據庫
在Model中添加一個受保護的屬性$connection
,使其明確等於配置文件中預定義的連接名稱之一即可,見代碼
class User extends Model
{
protected $connection = 'mysql_backup_2';
}
有條件操作數據庫
Db::table()
將查詢到所有數據,但需要給定完整的數據表名,包括前綴find()
可以查詢一條數據,但需要給定where(colName, value)
條件findOrFail()
沒有數據時拋出一個異常,findOrEmpty()
沒有數據時返回空數組select()
返回數據集,select()->toArray()
轉換爲數組Db::name(tableName)
方法可幫助忽略配置文件中設置的表名前綴chunk()
批量返回,cursor()
獲取遊標,一行行處理,減小一次性內存壓力
新增數據
insert()
接受一個數組參數用於新增insertAll()
接受一個數組類型的數組參數用於新增save()
方法可以通過內置邏輯智能判斷要新增還是更新數據,判斷依據是是否含有主鍵列,不包含主鍵是新增,反之更新field()
幫助在新增時驗證字段合法性Db::name()->field('colName1, colName2')->insert($data);
更新數據
update()
用於更新save()
方法參數中包含主鍵即可更新exp()
用於執行SQL函數,如where()->exp('name', 'UPPER(name)')->update()
inc/dec()
自增自減指定列Db::raw()
方法更加靈活實現exp()和inc/dec(),如where()->update([ 'name'=>Db::raw('UPPER(name), 'price'=>Db::raw('price+1'), 'status'=>Db::raw('status-2'))) ])
刪除數據
delete()
方法接受整數或整數組成的數組作爲參數,可根據主鍵直接刪除數據並返回受影響行數,否則返回0where()->delete()
使用where約束條件來刪除delete(true)
刪除所有數據,勿動!!!
分頁
limit($num)
和limit($indexPos,$num)
方法用於有限地檢索數據page($pageNum, $num)
方法優化了limit()
,無需計算分頁條數
高級查詢
- 給
where()
傳遞一個數組類型的數組可以完成多條件的WHERE的組合,把這個數組放在where()
中並加入一箇中括號可使其獨立的包含在帶 () 的SQL語句中
$exp = [
['id', '>', '0'],
['price', 'exp', Db::raw('>=80')],
['email', 'like', '%163%']
];
$user = Db::name('user')->where([$exp])->where('status', 1)->select();
return Db::getLastSql();
WhereOr([$exp1, $exp2])
適用於含相同字段且邏輯是或的查詢Where()
支持閉包,閉包語法一定程度上更直觀
$user = Db::name('user')->where(function ($query){
$query->where('id', '>', 0);
})->whereOr(function ($query){
$query->where('username', 'like', '%小%');
})->select();
WhereRaw()
支持自定義的符合SQL語法的條件字符串,即SQL中關鍵字WHERE後邊的部分WhereRaw(帶有標識符的Where條件語句字符串, 與標識符對應的鍵值對組成的數組)
支持參數綁定,數據源支持的話支持預處理