先說一下自己學習的經歷~
剛開始學的時候感覺是有點困難的,因為第一次接觸MVC
框架。其實說簡單一點,就是每一個Controller
(控制器)對應View
(視圖層)下的一個相同名字的文件夾,然后自定義Controller
里面的方法, 就對應View
文件夾下的html
文件。而Model
的作用就是管理控制器里的邏輯部分,使操作更簡單化,還能放一些有用的函數方法。
再說說心得吧
1.查詢
- 查詢的關鍵也就是一個單詞
where
是查詢的條件。在 TP 中用得比較多的就是兩種方法,一種是字符串查詢,一種是數組查詢(對象用得少,沒必要)
1.首先說一下字符串查詢
//假設我們有一個user表
$user = M('User');
//已知id = 3查詢一條記錄
$result = $user->where('id = 3')->find(); //注意查詢單條記錄一律用find,這樣返回的是一維數組。
//查詢 id為$id 的那條記錄
$result = $user->where("id = '$id'")->find(); //變量在里面打上單引號(防止它是字符串呢)
//查詢 id為一個數組 如$id = [1, 2, 3];
$id = join(',',$id); //要將數組改成字符串模式
$result = $user->where("id in (".$id.")")->select(); //注意查詢多條記錄一律用select()
//查詢id 為一個數組 并且 status為 1呢 (多個字段查詢)
$result = $user->where("id in (".$id.") AND status = 1")->select(); //除了 "=" 以外的也與其類似
//統計查詢
$user->where("status = 1")->count(); //統計status = 1 的記錄個數
//找到對應$id字段,使其值加減(一般用于做瀏覽數等地方)
$user->where("id = $id")->setInc('view', 1); //使view這個字段的值 +1 加減"1" 可以默認不要第二個參數
$user->where("id = $id")->setDec('view', 1);//使view這個字段的值 -1
- 再來說一下,數組查詢
$user = M('User');
//數組查詢一般將對應的字段條件作為鍵 放到數組里 如:
$map['id'] = ['lt', 100];
$user->where($map)->select(); //查詢id 小于100的數據
//上面是單個數據 如果查詢多個字段呢?
$map['status'] = 1;
$map['name'] = ['like',['%javascript%']];
$user->where($map)->select(); //記住 這樣默認是 'and' 連接的 兩個條件都要滿足
//問題來了 , 如果是or連接呢
$map['status'] = 1;
$map['name'] = ['like',['%javascript%']];
$map['_logic'] = 'or';
$user->where($map)->select(); //這樣就變成or了 兩個條件滿足其一即可
//跟著上面的來 說過$id = [1, 2, 3];
$map['id'] = ['in', $id]; /*或者是*/ $map['id'] = ['in',''.join(",",$id).''];
3.只要把where這個條件掌握好 其他的刪除,修改,增加 也是一樣的。
下面來一個很精妙的小例子。
表單模糊查詢
這個是一個模糊查詢,上面好像也有,我們這里就用數組數組方法吧。首先,看這張圖,這是一個表單form,
method為get,如果兩個都填,那么就是兩個條件AND 如果只填一個,那么就單獨查詢, 如果不填就查詢所有的。
public function index() {
$name = I('get.name');
$phone = I('get.phone'); //先用I方法獲取到傳過來的數據
//然后再進行判斷
if($name && trim($name) != '') {
$map['name'] = ['like', '%'.$name.'%']; //數組方式的模糊查詢
}
if($phone && trim($phone) != '') {
$map['phone'] = ['like', '%'.$phone.'%'];
}
//這里假設還有一個條件 status = 1;
$map['status'] = 1;
$result = $user->where($map)->select();
}
- Thinkphp還有個地方經常犯錯的就是 在模版里寫<>(標簽)
例如:
'比較標簽'
<select name="group_id" id="group">
<volist name="groups" id="group">
<option value="{{$group.id}}" <eq name="group.id"value="$customer.group_id">selected</eq> >
{{$group.name}}
</option>
</volist>
</select>
需要注意的是在這些內置的判斷標簽里 name="group.id" || name="group['id']"
只有這兩種寫法 不需要 '$' ,相反而在value里
value = $customer.group_id || value = $customer['group_id'] 一定不要忘記'$'
'if標簽' 有點奇怪
<select name="category_id" id="parentCategory" class="form-control">
<volist name="categories" id="category">
<option value="{{$category.id}}"
<if condition="$category['id'] eq $article['category_id']">selected</if>
>一級分類:{{$category.name}}</option>
<volist name="category.children" id="child">
<option value="{{$child.id}}"
<if condition="$child['id'] eq $article['category_id']">selected</if>
> 二級分類:{{$child.name}}</option>
</volist>
</volist>
</select>
這個奇怪在 因為不是name里面所以需要'$' 應該 $X['xxx']和 $X.xxx可以替換 才對
問題就處在最后一個又不能替換 。
經上面得出的結果 在比較標簽里 盡量全部用$X['xxx'] ,不要用$X.xxx了
還有注意 name=" ", 這個里面一定不要加 '$'