问题背景:最近在用ThinkPHP 5开发项目的过程中,发现根据筛选条件做or查询的时候,连贯操作不可以使用where进行条件查询了。
首先列出一个user数据表的信息:
uid
uname
grade(年级)
class(班级)
sex(性别)
1
1号
1
2
1
2
2号
1
1
2
3
3号
3
3
2
4
4号
4
2
1
5
5号
2
5
1
6
6号
1
6
2
7
7号
1
1
1
8
8号
2
3
1
9
9号
2
2
1
10
10号
3
1
2
数据表展现了10位同学的年级、班级、性别信息
现在要查询数据为
grade=1 or class= or sex=2
在TP3中想要or查询
条件可以为:
$condition['grade'] = 1;
$condition['class'] = 3;
$condition['sex'] = 2;
$condtion['_logic'] = 'OR';
$list = M(‘user’)->where($condtion)->findall();
然后在TP5中尝试用where去这么查询发现一直在报错,查了手册之后发现TP5取消了_logic作为查询方式,而是新增了whereOr方法,下面是TP5中查询方式
User.php
namespace app\index\controller;useapp\index\model\UserModel;classUser
{public functionindex()
{$condition['grade'] = 1;$condition['class'] = 3;$condition['sex'] = 2;$UserModel = newUserModel;$list = $UserModel->getlistwhereOr($condition);print_r($list);
}
}
UserModel.php
namespace app\index\model;useapp\common\model\CommonModel;usethink\Db;usethink\Model;class UserModel extendsCommonModel
{public function__construct(){
parent::__construct();
}protected $name = 'User';public function getlistwhereOr($condition) {$list =Db::name($this->name)->whereOr($condition)->select();return $list;
}
}
执行User.php 发现打印出来的数据就是我们要的筛选数据,
总结:TP5相比TP3中更新了很多我们经常用到的查询方式,而且写法更人性化,需要经常的去整理查看这些新方法
by as