查询的关键也就是一个单词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还有个地方经常犯错的就是 在模版里写<>(标签)
例如:
'比较标签'
selected >
{{$group.name}}
//需要注意的是在这些内置的判断标签里
name="group.id" || name="group['id']"
只有这两种写法 不需要 '$' ,相反而在value里
value = $customer.group_id || value = $customer['group_id']
//一定不要忘记'$'
//'if标签' 有点奇怪
selected
//一级分类:
{{$category.name}}
selected
//二级分类:
{{$child.name}}
//这个奇怪在 因为不是name里面所以需要'$' 应该 $X['xxx']和 $X.xxx可以替换 才对问题就处在最后一个又不能替换 。经上面得出的结果 在比较标签里 尽量全部用$X['xxx'] ,不要用$X.xxx了.还有注意 name=" ", 这个里面一定不要加 '$'
先写这么多 以后再更新~