ThinkPHP6 - 數據筆記

數據庫連接

.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()方法接受整數或整數組成的數組作爲參數,可根據主鍵直接刪除數據並返回受影響行數,否則返回0
  • where()->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條件語句字符串, 與標識符對應的鍵值對組成的數組)支持參數綁定,數據源支持的話支持預處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章