昨天沒弄好的插入資料,今天經過仔細查看文檔發現.
當執行個體化一個Model的時候,參數使用的應該是表名,不是model的名字的.因為,我的Model叫做UserModel,而資料庫表叫做users.設定了tableName屬性的.所以當執行個體化時,應該使用$Dao
= M('Users');
好吧.這裡我有明白了一點東西.這裡貌似沒有需要自己建立實體類,因為在model中沒有任何與資料庫表有關的屬性.裡面,需要定義的貌似木有什麼東西.
模板放在tpl下與模組相同的名字目錄下.一般html結尾.
這模板檔案訪問的url這麼奇怪麼.是說什麼http://xxxx.com/html/MyApp/index.php/模組名/模板名
我嘗試了下貌似不好使,不知道哪裡錯了的.
好的,我又弄幾下,出來了,沒有加上那個可惡的html
http://localhost/demo/index.php/index/form,好吧.為毛呢.
插入資料...執行個體化一個model,插入資料ok了.
自動擷取表單資訊
自動驗證
這個令牌貌似有問題. 關掉了事.詳見http://qq8810829.blog.163.com/blog/static/1152670302010818115522687/
ThinkPHP 查詢資料
ThinkPHP 查詢資料主要提供以下幾類查詢:
- select:普通查詢,同
findAll() 方法
- find:取得符合查詢條件的一條記錄
- getBy動態查詢:根據某個欄位取得符合查詢條件的一條記錄
- getField:擷取某個欄位的值或多個欄位的索引數組
- 區間查詢:取得符合查詢條件的區間記錄
- 統計查詢:取得符合查詢條件的統計資料
- 定位查詢:取得符合查詢條件的一條或多條記錄
- 原生SQL查詢:支援以原生
SQL 進行查詢或執行操作
不曉得為毛,前面的資料庫都是亂碼的...很奇怪的是,在WAMP中的mysql控制台中看到的字元集都是gbk的,在phpMyadmin中看到的是utf8
呢.但是重建立資料庫後就木有顯示亂碼了.
查詢,
select()查詢,
where('條件')
$map['欄位名'] = array('運算式', '操作條件');
其中 $map 是一個普通的陣列變數,可以根據自己需求而命名。上述格式中的運算式實際是運算子的意義:
詳見http://www.5idev.com/p-thinkphp_expressions.shtml
條件有三種使用方法的
$List = $Dao->where('uid<10 AND
email="Jack@163.com"')->find();
//字串形式
$condition['uid'] = array('elt',10);
$condition['email'] = "Jack@163.com";
$List =
$Dao->where($condition)->find();
//數組形式,推薦
$condition = new stdClass();
$condition->uid = array('elt',10);
$condition->email = "Jack@163.com";
$List =
$Dao->where($condition)->find();
//對象形式
order('欄位' 降序/升序)
limit('開始id,查詢個數')
find()只查詢一條資料
getByXxx()動態查詢(一個魔術方法....),getBy欄位名,getByUsername('條件')
getField('欄位','條件','分隔字元'),獨立的方法,不需要select或find
用於擷取某個欄位的值或者多個欄位的索引數組
區間查詢,使用where的條件時,使用的條件有規則
$condition['uid'] =
array(array('gt',1),array('lt',5));
大於1,小於5.預設and
$condition['uid'] = array(array('gt',3),array('lt',10),
'or'); 大於3或者小於10
$condition['username'] = array(array('like','%a%'),
array('like','%b%'), 'Admin','or');
一些統計函數
count():統計資料行數
- max():統計某個欄位最大資料
- min():統計某個欄位最小資料
- avg():統計某個欄位平均資料
- sum():統計某個欄位資料之和
$Dao->count();也可以添加查詢的
定位查詢,但是需要進階模型,model繼承自 AdvModel,或者使用方法switchModel("Adv")
$list =
$Dao->switchModel('Adv')->where('uid
> 0')->order('uid
ASC')->getN(2);或者
class UserModel extends AdvModel{}
- getN():取得查詢結果中的某個位置的記錄
- first():取得合格第一條記錄
- last():取得合格最後一條記錄
原生sql支援
- query():用於
SQL 查詢操作,並返回符合查詢條件的資料集,可顯示的list
- execute():更新和寫入資料的
SQL 操作,返回影響的記錄數
生 SQL 查詢需要在查詢語句中寫上對應的表名,如果表名有改動的時候,就需要逐行去更改 SQL
語句中的表名字,這樣不免麻煩。ThinkPHP 提供了一個小技巧來協助解決這個問題。
在 SQL 陳述式中,以 __TABLE__ 來替代真實的表名,而在執行個體化模型時,仍以表名為參數,如:
$list = $Dao->query("select __TABLE__ from user
where uid<5");
儲存資料save()
//
需要更新的資料
$data['email'] = 'Jack@163.com';
//
更新的條件
$condition['username'] = 'Jack';
$result =
$Dao->where($condition)->save($data);
//或者:$result=
$Dao->where($condition)->data($data)->save();
為了保證資料庫的安全,避免出錯更新整個資料表,如果沒有任何更新條件,資料對象本身也不包含主鍵欄位的話,save方法不會更新任何資料庫的記錄。
因此要使用 save() 方法更新資料,必須指定更新條件或者更新的資料中包含主鍵欄位。
如果需要更新的資料裡麵包含主鍵,那麼 ThinkPHP 會自動把主鍵的值作為條件來更新,uid為主鍵
$data['email'] = 'Jack@163.com';
$data['uid']
= 2;
$result =
$Dao->save($data);
和下面的一樣的效果的
//
需要更新的資料
$data['email'] = 'Jack@163.com';
//
更新的條件
$condition['uid'] = 2;
$result =
$Dao->where($condition)->save($data);
更新欄位setField(fields, value, condition='')
$result = $Dao->where('uid =
2')->setField('email','Jack@163.com');
$result = $Dao->where('uid =
28')->setField(array('username','email'),array('Jack','Jack@163.com'));//多欄位
ThinkPHP 內建了對統計資料(數字欄位)的更新方法:對數字欄位修改
- setInc():將數字欄位值增加
$result = $Dao->setInc('score','uid=2',3);
- setDec():將數字欄位值減少
$result = $Dao->setDec('score','uid=2',3);
setDec() 方法中最後一個參數為數字欄位減少的值,如果省略則預設減少 1 。
setInc() 與 setDec() 方法均支援連貫操作,從而可以構造更加複雜的更新條件。
刪除資料delete()
$result = $Dao->where('uid =
5')->delete();
連貫操作....很多的方法,dododdo,詳見http://www.5idev.com/p-thinkphp_continuous_methods.shtml