🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
自微擎**v1.5.7**版本以后,增加链式查询类,提供面向对象方式查询数据,链式查询只支持一些常用简单的查询过于复杂的业务需求还是建议直接使用SQL语句。 查询用户表中的前十条男性的用户数据,代码如下: ~~~ $query = load()->object('query'); $row = $query->from('users')->where('sex', '1')->orderby('id', 'desc')->limit(10)->getall(); ~~~ 上方代码中,from, where, orderby, limit 就是被称之为链示调用,除了一开始必须要先指定**from()**哪个表和最后需要获取数据时调用**get()**,**getall()**时,其它函数书写并不区分先后顺序。 但是这里并不推荐直接实例化**Query**对象进行数据查询,对于程序员来说以下的代码和上面在“语义”上并没有什么太大的区别,链示查询只是简化和方便了SQL语句的书写。我们看代码都能知道他是在查询什么数据,但是并不知道这样做的意义和作用是什么。 ~~~ pdo_fetchall("SELECT * FROM `users` WHERE sex = '1' ORDER BY id DESC LIMIT 10"); ~~~ 所以我们更推荐将**Query**类结合**Table**类来一起使用,比如以上的查询可以改造为。 ~~~ class UsersTable extends We7Table { public function searchNewUserList() { return $this->query->from('users')->getall(); } public function searchWithSexIsBoy() { $this->where('sex', '1'); return $this; } public function searchCount($limit) { $this->limit($limit); return $this; }}$usertable = new UsersTable();$usertable->searchWithSexIsBoy();$usertable->searchCount(10);$list = $usertable->searchNewUserlist(); ~~~ 以上的代码,很明显的能明白查询者的意图,而且很灵活的进行修改,比如业务改变了要查询最新的20名同学,只需要 ~~~ $usertable->searchCount(20); ~~~ 即可。 在微擎中,所有的**Query**对象皆是以**Table**对象的形式存在,存放于 Framework/table 目录中,通过以下方式调用: ~~~ $users_table = table('users'); $users_table->searchWithFounder(ACCOUNT_MANAGE_GROUP_VICE_FOUNDER); $users_table->searchWithPage($pindex, $psize);$users = $users_table->searchUsersList(); ~~~