-
Model的使用方法
use app\模塊\model\模型類名
1、$res = 模型類名::get(1);
2、$user = new 模型類名;
? ?$res = $user::get(1);
3、使用Loader
? ?use think\Loader;
? ?$user = Loader::model('模型類名');
? ?$res = $user::get(1);
4、助手函數
? ?$user = model('模型類名');
? ?$res = $user::get(1);
查看全部 -
thinkphp定義model非常方便,只需要在app/index下新建model文件夾,同時以數據表的名稱命名.php文件,引入model類,即可定義。
model的命名規范:一般model的名字和表名是對應的,例如 表名為imooc_user->模型名User.php 表名imooc_user_info->模型名UserInfo.php
一般一個表對應一個model類,model類里面是對這個表的增刪改查的各種操作查看全部 -
常用鏈式操作 ??
原理:Db類的鏈式方法返回Db對象,可以繼續使用Db對象的這些方法對查詢數據進行一些條件構造以及范圍的選擇和排序等等;
$res=$db
->where('id','>',5) 條件ID>5
->field('username','id') 只搜索username和id兩個字段
->order('id DESC') order排序 id DESC ? id倒序
->limit(3,7) limit截取 ?3,7 ? 從3開始截取7個
->page(3,5) page(m,n)多用于分頁//limit分頁limit((m-1)*n,n)== m:當前頁數,n:每頁多少條數據
->group('`group`') //group是關鍵字,這里用``進行轉義
->select(); select( ); ?搜索
var_dump($res);
注意:order對group是不起作用的;就是在執行的group進行分組的時候,并不是在你order排序的基礎上進行的;
group('字段'),他會根據字段的值為分類標準進行分類,比如字段值為1的單獨查出來,字段值為1的單獨查出來;
查看全部 -
數組的方式可以給 ? 值的數組的第一個參數設置條件結構 where(['id' => ['LT',5]])等同于where('id<5')
也可以同時有兩個查詢條件,看截圖查看全部 -
$db = Db::name('user'); #備注信息 #EQ = #NEQ <> #LT < #ELT <= #$GT > #EGT >= #BETWEEN BETWEEN * AND * #NOTBETWEEN NOTBETWEEN * AND * #IN IN (*,*) #NOTIN NOT IN (*,*) $sql = $db->where("id", "in","1,2,3") ->whereOr("username", "eq", "17771258") ->whereOr("num", 'lt', "10") ->where("email","[email protected]") ->buildSql(); dump($sql);
查看全部 -
刪除:
delete(' ');函數 刪除 ?沒有條件是不會執行操作的
#delete('') 返回影像記錄的行數 加where()條件,或者delete(''主鍵的值);
$res=$db->where(['id'=>2])->delete();
$res=$db->delete(1);括號里是主鍵id的值;
如果where("1=1")的話會刪除所有記錄(慎用)只要where每次接收到的是true就可以;就會全部刪除
$res=$db->where("1=1")->delete( );
查看全部 -
update(' ');函數 ?語法 更新數據
$res=$db->where(['id'=>幾幾幾])->update(['字段名'=>'更新內容']); var_dump('res');
update(' '); 返回影像行數
setField(' ')函數 語法 更新某一條數據
$res=$db->where(['id'=>幾幾幾])->setField(['字段名'=>'更新內容']); var_dump('res');
setField(' '); 返回影像行數,每次只更新一個字段
setInc(' ')函數 語法 數量+1
$res=$db->where(['id'=>幾幾幾])-setInc('num'); var_dump('res');
#setInc('某個字段') ? 返回影像行數,每執行一次,都加1 ?通常用于新聞瀏覽數
setDec(' ')函數 語法 數量-1
$res=$db->where(['id'=>幾幾幾])-setDec('num'); var_dump('res');
#setInc('某個字段') ? 返回影像行數,每執行一次,都減1 ?通常用于新聞瀏覽數
查看全部 -
$db = Db::name('user'); #insert 返回值是影響記錄的行數,插入數 #insetGetId 返回值插入數據的自增id #insertAll 返回插入數據成功的行數 // $res = $db->insert([ // 'email' ? => 'imooc_02', // 'password' ?=> md5('imooc_02'), // 'username' ?=> 'imooc_02' // ]); // $res = $db->insertGetId([ // 'email' ? => '[email protected]', // 'password' ?=> md5('imooc_03'), // 'username' ?=> 'imooc_03' // ]); $data = []; for($i=10; $i<20; $i++) { $data[] = [ 'email' ? => "imooc_03_{$i}@qq.com", 'password' ? => md5("imooc_03_{$i}"), 'username' ? => "imooc_03_{$i}" ]; } $res = $db->insertAll($data); dump($res);
查看全部 -
#使用sql語句方式查詢數據庫
//$res = Db::query("select *from imooc_user where id=?",[1]);
$res =Db::execute("insert into imooc_user set username=?,password?,email=?",['imooc',md5('imooc'),'[email protected]']);
#selsect 返回所有記錄 返回的結果是一個二維數組
#如果結果不存在 返回一個空數組
$res = Db::table('imooc_user')->select();
#find 返回一條記錄 返回的結果是一個二維數組
#如果結果不存在返回NULL
$res = Db::table('imooc_user')->where(['id'=>10])->find();
#value ?返回一條記錄 并且是每條記錄的某個字段值
#如果結果不存在 返回NULL
$res = Db::table('imooc_user')->value('username');
#column 返回一個一維數組 數組中的value值就是我們要獲取的列的值
#如果存在第二個參數 就返回這個數組并且用第二個參數的值作為key值
#如果不存在返回NULL
$res = Db::table('imooc_user')->column('username');
#find ?返回一條記錄 返回的結果是一個二維數組
#如果結果不存在 返回NULL
$res = Db::table('imooc_user')->find();
#value 返回一條記錄 并且是字條記錄的某個字段值
#如果結果不存在 返回NULL
$res = Db::table('imooc_user')->value('username');
$res = Db::name('user')->select();
實例化
$res = db('user',[],false)->find();
查看全部 -
修改數據庫配置的四種方式
1.可在config下的database.php返回配置信息,直接 Db::connect()(如果參數為空,那么會默認使用database.php中的配置連接)
2.在方法里面引入 use think\Db;Db::connect(array);數組即數據庫連接配置
3.同樣是Db::connect("mysql://root:[email protected]:3306:/databasename#utf8"); ? ? ? ? ? ? ? ? ?//use think\Db?
4.在配置文件中,添加一個數組,Db::connect("數組鍵名");
//use think\Db查看全部 -
Db::方法 因為是單例模式 不會重復實例化 而用db駐守函數會每次實例化,消耗內存,所以在后面加上false,這樣db('表名',[],false)就不會每次實例化了
查看全部 -
dsn方式連接數據庫 此方式優先級高于單獨寫的方式
Db::connect('dsn');
此時只是配置數據庫 并沒有鏈接
只有用刀query時才是鏈接數據庫
查看全部 -
全局添加更新時間需要在表中新建create_time和update_time字段,配置文件中設置“auto_timestamp"=>true,一般不開啟這個功能,否則表中不存在該字段時會報錯,真正刪除需要把destroy方法或delete方法的第二個參數設置為true
use?think\Model; use?traits\model\SoftDelete; class?User?extends?Model{ ????use?SoftDelete;使用軟刪除 ????protected?$autoWriteTimestamp?=?true;//開啟自動更新時間 ????protected?$createTime?=?false;//設置為false代表不使用創建時間 ????protected?$updateTime?=?"update_at";//設置自定義更新時間的字段 ????protected?$deleteTime?=?"delete_at";//設置自定義的軟刪除字段 }
查看全部 -
<?php ????namespace?app\index\model; ????use?think\Model; ????class?User?extends?Model{ ????????protected?$auto?=?[ ????????????'time' ????????]; ????????protected?$insert?=?[ ????????????'time_insert' ????????]; ????????protected?$update?=?[ ????????????'time_update' ????????]; ????????public?function?setPasswordAttr($val,$data){ ????????????//第二個參數是數組數據 ????????????return?$val.$data['email']; ????????????return?md5($val); ????????} ????????public?function?setTimeAttr(){ ????????????return?time(); ????????} ????????public?function?setTimeInsertAttr(){ ????????????return?time(); ????????} ????????public?function?setTimeUpdateAttr(){ ????????????return?time(); ????????} ????}
查看全部 -
可以在控制器里輸出模型定義好的內容
查看全部
舉報