一、手動建立 php
<?php namespace app\admin\model; use think\Model; class User extends Model { //若是表名和文件名不是對應的,用下面代碼修改 protected $table = 'think_user'; }
二、用命令html
>php think make:model admin/Blogmysql
一、用靜態方法sql
use app\admin\model\User; $li= User::get(1);
二、用加載類(單例)
thinkphp
use think\Loader; $user= Loader::model('User'); //某些路由可能致使獲取不到模塊哦(如這條路由別名Route::alias('showindex','\app\test\controller\Index');),因此儘可能將參數多加個模塊或者直接類全名 $user= Loader::model('admin/user'); $user= Loader::model('app\admin\model\User'); $li= $user::get(1);
三、用系統方法至關於D()封裝的(Loader::model())數據庫
$user= model('User'); $li= $user::get(1);
四、實例化模型
json
use app\admin\model\User; $user = new User; $user->name= 'thinkphp'; $user->save();
查數組
獲取單條數據緩存
//直接實例化model類 $user = new User(); $user->where('name', 'thinkphp')->find(); 或者 //取出主鍵爲1的數據 $user = User::get(1); echo $user->name; // 使用數組查詢 $user = User::get(['name' => 'thinkphp']); // 使用閉包查詢 $user = User::get(function($query){ $query->where('name', 'thinkphp'); }); echo $user->name;//若是你是在模型內部,請不要使用的方式來獲取數據,請使用 替代$this->name$this->getAttr('name')
resultSetType
返回數據集對象的名稱)$user = new User(); // 查詢數據集 $user->where('name', 'thinkphp') ->limit(10) ->order('id', 'desc') ->select(); 或者 // 根據主鍵獲取多個數據 $list = User::all('1,2,3'); // 或者使用數組 $list = User::all([1,2,3]); foreach($list as $key=>$user){ echo $user->name; } // 使用數組查詢 $list = User::all(['status'=>1]); // 使用閉包查詢 $list = User::all(function($query){ $query->where('status', 1)->limit(3)->order('id', 'asc'); }); foreach($list as $key=>$user){ echo $user->name; }
// 獲取某個用戶的積分(某個字段的值單個值) User::where('id',10)->value('score'); // 獲取某個列的全部值(多個值) User::where('status',1)->column('name'); // 以id爲索引 User::where('status',1)->column('name','id'); User::where('status',1)->column('id,name'); // 同tp3的getField
增安全
$user = new User; $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); 或者 $user = new User; $user->data([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com' ]); $user->save(); 又或者 $user = new User([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com' ]); $user->save(); 若是須要過濾非數據表字段的數據,可使用: $user = new User($_POST); // 過濾post數組中的非數據表字段數據 $user->allowField(true)->save(); 若是你經過外部提交賦值給模型,而且但願指定某些字段寫入,可使用: $user = new User($_POST); // post數組中只有name和email字段會寫入 $user->allowField(['name','email'])->save();
獲取自增id
$user = new User; $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); // 獲取自增ID 與表中的id名對應 echo $user->user_id;
注意不要在同一個實例裏面屢次新增數據,若是確實須要屢次新增,那麼能夠用下面的方式
$user = new User; $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); $user->name = 'onethink'; $user->email = 'onethink@qq.com'; // 第二次開始必須使用下面的方式新增 $user->isUpdate(false)->save();
$user = new User; $list = [ ['name'=>'thinkphp','email'=>'thinkphp@qq.com'], ['name'=>'onethink','email'=>'onethink@qq.com'] ]; $user->saveAll($list); //saveAll方法新增數據返回的是包含新增模型(帶自增ID)的數據集(數組)。V5.0.13+版本開始,saveAll方法的返回類型受模型的resultSetType屬性影響(可能返回數據集對象) aveAll方法新增數據默認會自動識別數據是須要新增仍是更新操做,當數據中存在主鍵的時候會認爲是更新操做,若是你須要帶主鍵數據批量新增,可使用下面的方式: $user = new User; $list = [ ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'], ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com'], ]; $user->saveAll($list, false);
// 使用model助手函數實例化User模型 $user = model('User'); // 模型對象賦值 $user->data([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com' ]); $user->save(); 或者進行批量新增(saveAll): $user = model('User'); // 批量新增 $list = [ ['name'=>'thinkphp','email'=>'thinkphp@qq.com'], ['name'=>'onethink','email'=>'onethink@qq.com'] ]; $user->saveAll($list);
還能夠直接靜態調用create
方法建立並寫入:
$user = User::create([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com' ]); echo $user->name; echo $user->email; echo $user->id; // 獲取自增ID
改 注意新增和更新都是save 有id就更新
先查找在修改 (get和find返回的都是是當前模型的對象實例)
//更新id爲1的數據(先查出id位1的數據,在save更新) $user = User::get(1); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); 或者: $user=new User;// or $user= Loader::model('User'); or $user= model('User'); $data=$user->where('id', '1')->find(); $data->name = 'thinkphp111'; $data->save();
$user = new User; // save方法第二個參數爲更新條件 $user->save([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com' ],['id' => 1]);
過濾非數據表字段的數據allowField(true or 'field')
直接更新post或者get數據須要去掉post/get中不是數據表字段的參數
$user = new User(); // 過濾post數組中的非數據表字段數據 $user->allowField(true)->save($_POST,['id' => 1]);
// post數組中只有name和email字段會寫入 $user->allowField(['name','email'])->save($_POST, ['id' => 1]);
//能夠經過閉包函數使用更復雜的更新條件,例如: $user = new User; $user->save(['name' => 'thinkphp'],function($query){ // 更新status值爲1 而且id大於10的數據 $query->where('status', 1)->where('id', '>', 10); });
$user = new User; $user->where('id', 1)->update(['name' => 'thinkphp']); //若是傳入update的數據包含主鍵的話,能夠無需使用where方法。 $user->update(['id' => 1, 'name' => 'thinkphp']); 或者(靜態方法) User::where('id', 1) ->update(['name' => 'thinkphp']); //若是傳入update的數據包含主鍵的話,能夠無需使用where方法。 User::update(['id' => 1, 'name' => 'thinkphp']);
$user = new User; $list = [ ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'], ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com'] ]; $user->saveAll($list); //5.013+版本可使用isUpdate()方法對saveAll強制更新(尤爲適合於複合主鍵的狀況) save則是5.0+ $user->isUpdate()->saveAll($list);
刪
$user = User::get(1); $user->delete(); 根據主鍵刪除 User::destroy(1); // 支持批量刪除多個數據 User::destroy('1,2,3'); // 或者 User::destroy([1,2,3]); 條件刪除 // 刪除狀態爲0的數據 User::destroy(['status' => 0]); 還支持使用閉包刪除,例如: User::destroy(function($query){ $query->where('id','>',10); }); 或者經過數據庫類的查詢條件刪除 User::where('id','>',10)->delete();
Model屬性: // 數據庫查詢對象池 protected static $links = [];
// 數據庫配置 protected $connection = []; // 父關聯模型對象 protected $parent; // 數據庫查詢對象 protected $query; // 當前模型名稱(根據模型文件的位置和類名自動生成,查詢會查詢table屬性,table爲空時自動拼接表名,name和table屬性都出現的話已table爲準) protected $name='user'; // 數據表名稱 protected $table='think_user';
注意:name和table都是數據表名只是設置的時候name不用加前綴,而table須要加上前綴 當mode文件的位置不符合規範就用他們
// 當前類名稱 protected $class; // 回調事件 private static $event = []; // 錯誤信息 protected $error; // 字段驗證規則 protected $validate; // 數據表主鍵 複合主鍵使用數組定義 不設置則自動獲取 protected $pk; // 數據表字段信息 留空則自動獲取 protected $field = []; // 數據排除字段 protected $except = []; // 數據廢棄字段 protected $disuse = []; // 只讀字段 protected $readonly = []; // 顯示屬性 protected $visible = []; // 隱藏屬性 protected $hidden = []; // 追加屬性 protected $append = []; // 數據信息 protected $data = []; // 原始數據 protected $origin = []; // 關聯模型 protected $relation = []; // 保存自動完成列表 protected $auto = []; // 新增自動完成列表 protected $insert = []; // 更新自動完成列表 protected $update = []; // 是否須要自動寫入時間戳 若是設置爲字符串 則表示時間字段的類型 protected $autoWriteTimestamp; // 建立時間字段 protected $createTime = 'create_time'; // 更新時間字段 protected $updateTime = 'update_time'; // 時間字段取出後的默認時間格式 protected $dateFormat; // 字段類型或者格式轉換 protected $type = []; // 是否爲更新數據 protected $isUpdate = false; // 是否使用Replace protected $replace = false; // 是否強制更新全部數據 protected $force = false; // 更新條件 protected $updateWhere; // 驗證失敗是否拋出異常 protected $failException = false; // 全局查詢範圍 protected $useGlobalScope = true; // 是否採用批量驗證 protected $batchValidate = false; // 查詢數據集對象 protected $resultSetType; // 關聯自動寫入 protected $relationWrite; /** * 初始化過的模型. * * @var array */ protected static $initialized = []; /** * 是否從主庫讀取(主從分佈式有效) * @var array */ protected static $readMaster;
Model公共方法:
_construct
getQuery(false) 獲取當前模型的查詢對象
db(true,true) 獲取當前模型的數據庫查詢對象
setParent($model) 設置父關聯對象
getParent() 獲取父關聯對象
data($data,$value=null); 設置數據對象值(即設置model的data屬性的值)參數爲字符串則追加data,不然就銷燬data在賦值
getData($field_name) 獲取對象的原始數據(不填參數默認獲取所有) 如:$model->find(1)->getData() or $model->select()[0]->getData()返回單條表數據數組
isAutoWriteTimestamp($auto) 動態設置是否須要自動寫入時間字段(值爲boolean)
force(true) 更新是否強制寫入數據 而不作比較
setAttr($name,$value,$data=[]) 修改器 設置數據對象值
getRelation(關聯方法名) 獲取當前模型的關聯模型數據
setRelation($name,$value) 設置關聯數據對象值
getAttr($name) 獲取器 獲取數據對象的值
append(['field_name'=>'value'],false) 設置須要追加的輸出屬性
appendRelationAttr($relation, $append) 設置附加關聯對象的屬性
hidden(['field_name1','field_name2',...],false) 設置須要隱藏的輸出屬性
visible(['field_name1',...],false) 設置須要輸出的屬性
toArray() 轉換當前模型對象爲數組
toJson() 轉換當前模型對象爲JSON字符串
removeRelation($collection) (參數爲array|\think\Collection $collection)移除當前模型的關聯屬性
toCollection() 轉換當前模型數據集爲數據集對象
together($relation) 關聯數據一塊兒更新
getPk($name='') 根據模型名獲取模型對象的主鍵
save($data = [], $where = [], $sequence = null) 新增或修改
getChangedData() 獲取變化(即將要修改)的數據 並排除只讀數據
setInc($field, $step = 1, $lazyTime = 0) 自增
setDec($field, $step = 1, $lazyTime = 0) 自減
saveAllsaveAll($dataSet, $replace = true) 保存多個數據到當前數據對象
allowField($field) 設置容許寫入的字段
except($field) 設置排除寫入的字段
readonly($field) 設置只讀字段
isUpdate($update = true, $where = null) 是否爲更新數據
delete 刪除當前的數據
auto($fields) 設置自動完成的字段( 規則經過修改器定義)
validate($rule = true or ruleArr, $msg = [], $batch = false) 設置字段驗證
validateFailException(true) 設置驗證失敗後是否拋出異常
getError() 返回模型的錯誤信息
::event($event, $callback, $override = false) 註冊回調方法
::create 新增
::update 修改
::get 獲取單條
::all 獲取多條
::destroy 刪除
::scope(string|array|\Closure $name) 命名範圍
::useGlobalScope($use) 設置是否使用全局查詢範圍 當爲true時即設置useGlobalScapeshu屬性爲true 當調用model不存在的方法時會直接查找數據庫查詢類是否存在,存在就調用
::has($relation, $operator = '>=', $count = 1, $id = '*') 根據關聯條件查詢當前模型
::hasWhere($relation, $where = [], $fields = null) 根據關聯條件查詢當前模型
relationQuery($relations) 查詢當前模型的關聯數據
eagerlyResultSet(&$resultSet, $relation) 預載入關聯查詢 返回數據集
eagerlyResult(&$result, $relation) 關聯統計
relationCount
hasOne($model, $foreignKey = '', $localKey = '', $alias = [], $joinType = 'INNER') HAS ONE 關聯定義
belongsTo($model, $foreignKey = '', $localKey = '', $alias = [], $joinType = 'INNER') BELONGS TO 關聯定義
hasMany($model, $foreignKey = '', $localKey = '') HAS MANY 關聯定義
hasManyThrough($model, $through, $foreignKey = '', $throughKey = '', $localKey = '') HAS MANY 遠程關聯定義
belongsToMany($model, $table = '', $foreignKey = '', $localKey = '') BELONGS TO MANY 關聯定義
morphMany($model, $morph = null, $type = '') MORPH MANY 關聯定義
morphOne($model, $morph = null, $type = '') MORPH One 關聯定義 morphTo($morph = null, $alias = []) MORPH TO 關聯定義
__call 此函數的做用是調用數據庫的方法(當全局查詢範圍開啓時)
__callStatic 做用同上
__set
__get
__isset
__unset
__toString
jsonSerialize()
offsetSet($name,$value)
offsetExists($name)
offsetUnset($name)
offsetGet($name)
__wakeup() 解序列化後處理就一行代碼
readMaster(false) 是否從主庫讀取數據(主從分佈有效)
newInstance($data,$isUpdate,$where) 建立新的模型實例
replace($replace = true) 新增數據是否使用Replace
protected (都是model內部方法)
buildQuery() 建立模型的查詢對象
initialize() 初始化模型
init() 初始化處理 適合在子類重寫
autoWriteTimestamp($name時間戳字段名) 自動寫入時間戳
writeTransform($value, $type) 寫入數據 類型轉換
readTransform($value, $type) 數據讀取 類型轉換
getRelationData(Relation $modelRelation) 獲取關聯模型數據
parseAttr($attrs, &$result, $visible = true) 解析隱藏及顯示屬性
subToArray($model, $visible, $hidden, $key) 轉換子模型對象
isPk($key) 判斷一個字段名是否爲主鍵字段
checkAllowField($auto = [])
autoRelationUpdate($relation)
getWhere()獲取更新條件
autoCompleteData($auto = []) 數據自動完成
validateData($data, $rule = null, $batch = null) 自動驗證數據
trigger($event, &$params) 觸發事件
::parseQuery(&$data, $with, $cache) 分析查詢表達式
parseModel($model) 解析模型的完整命名空間
getForeignKey($name) 獲取模型的默認外鍵名
//模型事件快捷方法
beforeInsert($callback, $override = false)
afterInsert($callback, $override = false)
beforeUpdate($callback, $override = false)
afterUpdate($callback, $override = false)
beforeWrite($callback, $override = false)
afterWrite($callback, $override = false)
beforeDelete($callback, $override = false)
afterDelete($callback, $override = false)
Model select查出來的數據是數組套對象,咱們不能直接使用toArray()方法,而是要遍歷出數據在轉數組 模型默認的返回類型時array
數據集:collection
當查詢的數據轉爲數據集後 不論是find仍是select查詢出來的調用toArray後直接所有轉爲數組,超級棒 不像array類型還夾雜着對象
若是是數據集查詢的話有兩種狀況,因爲默認的數據集返回結果的類型是一個數組,所以沒法調用toArray
方法,必須先轉成數據集對象而後再使用toArray
方法,系統提供了一個collection
助手函數實現數據集對象的轉換
助手函數collection($data)
$products=ProductModel::getMostRecent($count); dump(collection($products)); //注意返回類型爲array時纔會轉換成數據集不然會報錯
2當前模型能夠定義屬性
protected $resultSetType = 'collection';//查詢結果必定是數據集
三、數據庫配置直接array該數據集 'resultset_type' => 'collection',
數據集臨時隱藏字段超級好用!!!
轉換成數據集後 檢查數據庫查詢數據是否爲空則不能使用if(!result){} 而是
if($result->isEmpty()){}
修改器:當調用修改器做用的那個字段時觸發:格式 在model 中定義get+首字母大寫的字段+Attr($value[,$data]);
class Test extends Model{ public function getStatusAttr($value,$data) { $status = [0=>'禁用',1=>'正常']; return $status[$value]; } } //控制器調用(任何地方調用都行) $testData=\app\index\model\Test::get(1); $status=$tstData->status;//輸出正常 //or $test=new app\index\model\Test; $testData=$test->select(); $status=$testData[0]->status;//輸出正常
修改器:和獲取器同樣 只是在修改做用的字段時觸發
class Test extends Model{ public function setNameAttr($value,$data) { return strtolower($value); } public function setEmailAttr($value,$data) { return strtolower($value); } } $testmodel=new \app\index\model\Test; $testmodel->save(['name'=>'LICHIHUA','email'=>'WOLICHIHUA2011@163.COM'],['id'=>2]);
自動添加和更新時間
model模型文件中添加:
protected $autoWriteTimestamp = true;// 開啓自動寫入時間戳字段(識別爲int 對照本身的字段格式) (支持int、datetime、timestamp、true、false) // 定義時間戳字段名 protected $createTime = 'create_at';//默認create_time protected $updateTime = 'update_at';//默認update_time false則是關閉自動寫入update時間字段
全局設置:
數據庫配置文件中添加:
// 開啓、關閉自動寫入時間戳字段(int、datetime、timestamp、true、false) 'auto_timestamp' => 'datetime',
其餘屬性:
class User extends Model { //只讀字段,更新時排除列出的字段 protected $readonly = ['name','email']; //類型轉換(將數據庫查出的字段自動進行轉換) protected $type = [ 'status' => 'integer', 'score' => 'float', 'birthday' => 'datetime',//timestamp 'info' => 'array', //integer、float、boolean、array、object、serialize、json、timestamp、datetime ]; }
自動完成
class Test extends Model{ //寫入(新增和修改) protected $auto = []; //新增 protected $insert = ['ip','status' => 1]; //修改 protected $update = ['login_ip']; protected function setIpAttr() { return request()->ip(); } protected function setLoginIpAttr() { return request()->ip(); }
查詢範圍 scop
model('user')->scop('thinkphp')->select(); 會調用mode裏自定義的scopeThinkphp($query)方法
class User extends Model{ protected function scopeThinkphp($query) { $query->where('name','thinkphp')->field('id,name'); } protected function scopeAge($query) { $query->where('age','>',20)->limit(10); } }
//調用
model('user')->scop('thinkphp')->select();
model('user')->scop('thinkphp,age')->select();
模型分層和控制器分層用法同樣的
ORM(對象關係映射)model就是對orm的實現 通常中小型項目用這個就行了 大型的估計就須要原生的sql好優化
數據庫:
\think\Db的__callStatic方法調用自身的connect方法得到config配置對應的驅動數據庫實例如:\think\db\connector\Mysql
//\think\Db::table('think_user'); 則 下面調用的是
//self::connect()->table('think_user') 等價於
//new \think\db\builder\Mysql()->table(); 繼承至Connection.php
//而table方法是Query.php裏的
//這個Query類是何時怎麼加載上的?
//Connection.php有個__construct 和 __call
//當調用Mysql(Connection)類裏的不存在的方法時__call調動getQuery實例化獲取新的查詢對象 而實例化的類是__construct時獲取的
//即Db::table實際調用的是Query類的table方法
原生查詢:
//查詢操做 Db::query('select * from think_user where id=?',[8]); //or Db::query('select * from think_user where id=:id',['id'=>8]); //寫入操做 Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']); //or Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']); 可使用多個數據庫鏈接,使用 Db::connect($config1)->query('select * from think_user where id=:id',['id'=>8]); //是在config.php配置的?額外數據庫配置參數 /數據庫配置1 'db_config1' => [ // 數據庫類型 'type' => 'mysql', // 服務器地址 'hostname' => '127.0.0.1', // 數據庫名 'database' => 'thinkphp', // 數據庫用戶名 'username' => 'root', // 數據庫密碼 'password' => '', // 數據庫編碼默認採用utf8 'charset' => 'utf8', // 數據庫表前綴 'prefix' => 'think_', ], //數據庫配置2 'db_config2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8';
實例化數據庫:
//table方法必須指定完整的數據表名 $DB=Db::table('think_user')
//或者
$DB=db('user');助手函數
//數據庫配置文件定義了後綴或者數據表無後綴則可用
$DB=Db::name('user')
閉包查詢;
Db::select(function($query){ $query->table('think_user')->where('status',1); });
查:
find 返回數據或者null
select 返回數據或空數組
增長;
insert($data);返回插入成功的條數
insertGetId($data);返回插入成功後的id
insertAll( $data)插入多條記錄,返回插入成功的條數
刪除:
delete()
修改:
update update 方法返回影響數據的條數,沒修改任何數據返回 0
Db::table('think_user')->where('id',1)->setField('name', 'thinkphp');
setInc/setDec
如不加第二個參數,默認值爲1 setInc/setDec 方法返回影響數據的條數db('user')->where('id',1)->update(['name' => 'thinkphp']); // 更新某個字段的值 db('user')->where('id',1)->setField('name','thinkphp'); // 自增 score 字段 db('user')->where('id', 1)->setInc('score'); // 自減 score 字段 db('user')->where('id', 1)->setDec('score');
// 獲取`think_user`表全部信息 Db::getTableInfo('think_user');
全部的連貫操做都返回當前的模型實例對象(this),其中帶*標識的表示支持屢次調用。
where* and查詢(數組、字符串、對象)
whereOr* or查詢(數組、字符串、對象) table table('前綴_表名,[前綴_表名,...]') or table(array['think_user'=>'user','think_role'=>'role']); or table('__表名(大寫)__')這種方式會自動獲取表名的前綴 alias 設置別名 table('dl_user)->alias('u') 多個用數組方式alias(array('dl_user'=>'u','di_role'=>'r')); field* 指定數據表操做字段 field('id,username as name,age') or field(array('id','username'=>'name',age)) order* order('id desc,age') or order(array('id'=>'desc','age')) limit limit(10) limit(11,25) page page(第幾頁,顯示多少條) group having join* union* 用於對查詢的union支持(字符串、數組、對象) distinct 返回惟一不一樣的值 distinct(true) lock 用於數據庫的鎖機制 cache 用於查詢緩存 comment fetchSql(true) 直接反返回sql 而不是結果 force*(索引名) 強制使用索引 bind* partition 用於設置分表信息(數組or字符串) strict 用於設置是否嚴格檢測字段名是否存在(布爾) failException 用於設置沒有查詢到數據是否拋出異常(布爾)
wheretime* 用於時間日期的快捷查詢(字符串)
view* 視圖查詢
relation* 用於關聯查詢
with* 用於關聯預載入
master 用於設置主服務器讀取數據(布爾)
sequence 用於設置Pgsql的自增序列名(其餘sql無用?)
where('字段名','表達式','查詢條件');
whereOr('字段名','表達式','查詢條件');
數操做函數:
外部可訪問 Db: static connect($config = [], $name = false) [Connection] 調用的是Connection下的connect方法 static clear() [void] 清除鏈接實例 connector/Mysql extends Connection: getFields($tableName) [array] 取得數據表的字段信息 getTables($dbName = '')[array] 取得數據庫的表信息 Connection: getBuilder()[array] 獲取當前鏈接器類對應的Builder類 fieldCase($info_arr)[array] 對返數據表字段信息進行大小寫轉換出來 getConfig($config = '')[mixed] 獲取數據庫的配置參數 setConfig($config, $value = '')[void] 設置數據庫的配置參數 connect(array $config = [], $linkNum = 0, $autoConnection = false)[PDO] 鏈接數據庫方法 free()[???] 釋放查詢結果 getPdo()[PDO|false] 獲取PDO對象 query($sql, $bind = [], $master = false, $pdo = false)[mixed] 執行查詢 返回數據集 execute($sql, $bind = [], Query $query = null)[int] 執行語句 getRealSql($sql, array $bind = [])[string] 根據參數綁定組裝最終的SQL語句 便於調試 transaction($callback)[mixed] 執行數據庫事務 startTrans()[bool|mixed] 啓動事務 commit()[void] 用於非自動提交狀態下面的查詢提交 rollback()[void] 事務回滾 batchQuery($sqlArray = [], $bind = [], Query $query = null)[boolean] 批處理執行SQL語句 批處理的指令都認爲是execute操做 getQueryTimes($execute = false)[integer] 得到查詢次數 getExecuteTimes()[integer] 得到執行次數 close()[Connection自身] 關閉數據庫(或者從新鏈接) getLastSql()[string] 獲取最近一次查詢的sql語句 getLastInsID($sequence = null)[string] 獲取最近插入的ID getNumRows()[integer] 獲取返回或者影響的記錄數 getError()[string] 獲取最近的錯誤信息 quote($str, $master = true)[string] SQL指令安全過濾 listen($callback)[void] 監聽SQL執行 Query類 getConnection()[Connection類] 獲取當前的數據庫Connection對象 connect($config)[Query] 切換當前的數據庫鏈接 getModel()[Model|null] 獲取當前的模型對象實例 readMaster($allTable = false)[void] 設置後續從主庫讀取數據 getBuilder()[Builder類] 獲取當前的builder實例對象 name($name)[Query] 指定默認的數據表名(不含前綴) setTable($table)[Query] 指定默認數據表名(含前綴) getTable($name = '')[string] 獲得當前或者指定名稱的數據表 parseSqlTable($sql)[string] 將SQL語句中的__TABLE_NAME__字符串替換成帶前綴的表名(小寫) query($sql, $bind = [], $master = false, $class = false)[mixed] 執行查詢 返回數據集 xecute($sql, $bind = [])[int] 執行語句 getLastInsID($sequence = null)[string] 獲取最近插入的ID getLastSql()[string][string] 獲取最近一次查詢的sql語句 transaction($callback)[mixed] 執行數據庫事務 startTrans()[void] 啓動事務 commit()[void] 用於非自動提交狀態下面的查詢提交 rollback()[void] 事務回滾 batchQuery($sql = [], $bind = [])[boolean] 批處理執行SQL語句 批處理的指令都認爲是execute操做 getConfig($name = '')[boolean] 獲取數據庫的配置參數 getPartitionTableName($data, $field, $rule = [])[string] 獲得分表的的數據表名 value($field, $default = null, $force = false)[mixed] 獲得某個字段的值 column($field, $key = '索引')[array] 獲得某個列的數組 count($field = '*')[integer|string] COUNT查詢 aggregate($aggregate, $field, $force = false)[mixed] 聚合查詢 sum($field)[float|int] SUM查詢 min($field, $force = true)[mixed] MIN查詢 max($field, $force = true)[mixed] MAX查詢 avg($field)[float|int] AVG查詢 setField($field, $value = '')[integer] 設置記錄的某個字段值 支持使用數據庫字段和方法 setInc($field, $step = 1, $lazyTime = 0)[integer|true] 字段值(延遲)增加 setDec($field, $step = 1, $lazyTime = 0)[integer|true] 字段值(延遲)減小 join($join, $condition = null, $type = 'INNER')[Query] 查詢SQL組裝 join union($union, $all = false)[Query] 查詢SQL組裝 union field($field, $except = false, $tableName = '', $prefix = '', $alias = '')[Query] 指定查詢字段 支持字段排除和指定數據表 fieldRaw($field, array $bind = [])[Query] 表達式方式指定查詢字段 data($field, $value = null)[Query] 設置數據 inc($field, $step = 1)[Querey] 字段值增加 dec($field, $step = 1)[Querey] 字段值減小 exp($field, $value)[Query] 使用表達式設置數據 raw($value)[Expression] 使用表達式設置數據 view($join, $field = true, $on = null, $type = 'INNER')[Query] 指定JOIN查詢字段
\think\Db::table('sky_user a')->view('sky_user b','username,password',"a.uid=b.uid",'INNER')->select();
等同於
\think\Db::table(['sky_user'=>"a"])->view(['sky_user'=>"b"],['username'=>"u","password"],"a.uid=b.uid",'INNER')->select();
partition($data, $field, $rule = [])[Query] 設置分表規則 where($field, $op = null, $condition = null)[Query] 指定AND查詢條件 whereOr($field, $op = null, $condition = null)[Query] 指定OR查詢條件 whereXor($field, $op = null, $condition = null)[Query] 指定XOR查詢條件 whereRaw($where, $bind = [], $logic = 'AND')[Query] 指定表達式查詢條件 whereOrRaw($where, $bind = [])[Query] 指定表達式查詢條件 OR whereNull($field, $logic = 'AND')[Query] 指定Null查詢條件 whereNotNull($field, $logic = 'AND')[Query] 指定NotNull查詢條件 whereIn($field, $condition, $logic = 'AND')[Query] 指定In查詢條件 whereNotIn($field, $condition, $logic = 'AND')[Query] 指定NotIn查詢條件 whereLike($field, $condition, $logic = 'AND')[Query] 指定Like查詢條件 whereNotLike($field, $condition, $logic = 'AND')[Query] 指定NotLike查詢條件 whereBetween($field, $condition, $logic = 'AND')[Query] 指定Between查詢條件 whereNotBetween($field, $condition, $logic = 'AND')[Query] 指定NotBetween查詢條件 whereExp($field, $condition, $logic = 'AND')[Query] 指定Exp查詢條件 useSoftDelete($field, $condition = null)[Query] 設置軟刪除字段及條件 removeWhereField($field, $logic = 'AND')[Query] 去除某個查詢條件 removeOption($option = true)[Query] 去除查詢參數 limit($offset, $length = null)[Query] 指定查詢數量 page($page, $listRows = null)[Query] 指定分頁 $config =[ 'page'=>1,//當前頁 'path'=>1,//url路徑 'query'=>1,//url額外參數 'fragment'=>1,//url錨點 'var_page'=>1,//分頁變量 'list_rows'=>1,//每頁數量 'type'=>1,//分頁類名 ]; paginate($listRows = null, $simple = false, $config = [])[\think\Paginator] 分頁查詢 table($table)[Query] 指定當前操做的數據表 using($using)[Query] SING支持 用於多表刪除 order($field, $order = null)[Query] 指定排序 order('id','desc') 或者 order(['id'=>'desc','create_time'=>'desc']) orderRaw($field, array $bind = [])[Query] 表達式方式指定Field排序 cache($key = true, $expire = null, $tag = null)[Query] 查詢緩存 group($group)[Query] 指定group查詢 having($having)[Query] 指定having查詢 lock($lock = false)[Query] 指定查詢lock(是否lock) distinct($distinct)[Query] 指定distinct查詢(是否惟一) alias($alias)[Query] 指定數據表別名 orce($force)[Query] 指定強制索引 fetchSql($fetch = true)[Query] 獲取執行的SQL語句 fetchPdo($pdo = true)[Query] 不主動獲取數據集 master()[Query] 設置從主服務器讀取數據 strict($strict = true)[Query] 設置是否嚴格檢查字段名 failException($fail = true)[Query] 設置查詢數據不存在是否拋出異常 sequence($sequence = null)[Query] 設置自增序列名 pk($pk)[Query] 指定數據表主鍵 whereTime($field, $op, $range = null)[Query] 查詢日期或者時間 getTableInfo($tableName = '', $fetch = '')[mixed] 獲取數據表信息 getPk($options = '')[string|array] 獲取當前數據表的主鍵 getTableFields($table = '')[??] 獲取當前數據表字段信息 getFieldsType($table = '')[??] 獲取當前數據表字段類型 getFieldsBind($table = '')[??] 獲取當前數據表綁定信息 bind($key, $value = false, $type = PDO::PARAM_STR)[Query] 參數綁定 isBind($key)[boolean] 檢測參數是否已經綁定 options(array $options)[Query] 查詢參數賦值 getOptions($name = '')[mixed] 獲取當前的查詢參數 with($with)[Query] 設置關聯查詢JOIN預查詢 withCount($relation, $subQuery = true)[Query] 關聯統計 withField($field)[Query] 關聯預加載中 獲取關聯指定字段值 via($via = '')[Query] 設置當前字段添加的表別名 relation($relation)[Query] 設置關聯查詢 insert(array $data = [], $replace = false, $getLastInsID = false, $sequence = null)[integer|string] 插入記錄 insertGetId(array $data, $replace = false, $sequence = null)[integer|string] 插入記錄並獲取自增ID insertAll(array $dataSet, $replace = false, $limit = null)[integer|string] 批量插入記錄 selectInsert($fields, $table)[integer|string] 經過Select方式插入記錄 update(array $data = [])[integer|string] 更新記錄 getPdo()[\PDOStatement|string] 執行查詢但只返回PDOStatement對象 select($data = null)[Collection|false|\PDOStatement|string] 查找記錄 find($data = null)[array|false|\PDOStatement|string|Model] 查找單條記錄 selectOrFail($data = null)[array|\PDOStatement|string|Model] 查找多條記錄 若是不存在則拋出異常 findOrFail($data = null)[array|\PDOStatement|string|Model] 查找單條記錄 若是不存在則拋出異常 chunk($count, $callback, $column = null, $order = 'asc')[boolean] 分批數據返回處理 getBind()[array] 獲取綁定的參數 並清空 buildSql($sub = true)[string] 建立子查詢SQL delete($data = null)[int] 刪除記錄 static event($event, $callback)[void] 註冊回調方法