ThinkPHP3.2 之心得(一)

先说一下自己学习的经历~

刚开始学的时候感觉是有点困难的,因为第一次接触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
    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();
      }
    2. 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="  ", 这个里面一定不要加 '$'

      先写这么多 以后再更新~