文档章节

zf2 SQL where子句拼装

aidear
 aidear
发布于 2014/01/02 15:46
字数 482
阅读 104
收藏 2

zf2中where,可以灵活的组织sql条件语句,达到想要的结果。以下举例说明:

1 //在TableGateway子类中:
2 $select = $this->getSql()->select();
3 $where = $select->where;
4 $data['k'] = '关键词';
5 $where->like('UserName', '%' . $data['k'] . '%')->orPredicate(new Like('Email', '%' .$data['k'] . '%'))
6             ->orPredicate(new Like('Nick', '%' . $data['k'] . '%'))
7             ->orPredicate(new Like('Mobile', '%' . $data['k'] . '%'))
8             ->orPredicate(new Like('Address', '%' . $data['k'] . '%'));
9 $select->where($where);
10 $select->order(array('LastUpdate' => 'DESC'));


打印出来的sql:

1 SELECT member.* FROM member WHERE UserName LIKE '%关键词%' OR Email LIKE '%关键词%'OR Nick LIKE '%关键词%' OR Mobile LIKE '%关键词%' OR Address LIKE '%关键词%' ORDER BYLastUpdate DESC;

范围条件:

1 $where->greaterThan('Points', 10);
2 $where->or;//默认并的关系,此处声明为或的关系
3 $where->lessThanOrEqualTo('Points', 5);

SQL:

1 SELECT `member`.* FROM `member` WHERE `Points` > '10' OR `Points` <= '5';

另一种写法:

1 $where->greaterThan('Points', 10);
2 $where->orPredicate(new Zend\Db\Sql\Predicate\OperatorOperator('Points', '<=', 5));

SQL:

1 SELECT `member`.* FROM `member` WHERE `Points` > '10' OR `Points` <= '5';

where闭包:

1 $select->where(function($where){
2     $where->lessThan('id', 10);
3     $where->greaterThan('id', 5);
4     return $where;
5 })->order('id DESC')->limit(10);

SQL:

1 SELECT `member`.* FROM `member` WHERE `id` < '10' AND `id` > '5' ORDER BY `id` DESCLIMIT 10;

更复杂一点的,可以增加条件语句括号:

1 $select->where(function($where){
2  
3     $subWherePoints = clone $where;
4     $subWhereGender = clone $where;
5  
6     $subWherePoints ->lessThan('Points', 10);
7     $subWherePoints ->or;
8     $subWherePoints ->greaterThan('Points', 50);
9  
10     $where->addPredicate($subWherePoints );
11  
12     $subWhereGender ->equalTo('Gender', 1);
13     $subWhereGender ->or;
14     $subWhereGender ->equalTo('Gender', 2);
15     $where->addPredicate($subWhereGender);
16  
17     return $where;
18 });

SQL:

1 SELECT `member`.* FROM `member` WHERE (`Points` < '10' OR `Points` > '50') AND(`Gender` = '1' OR `Gender` = '2');

可以看到针对Points和Gender字段的筛选分别加上了括号,可以理解为针对两个字段的WHERE对象($subWherePoints, $subWhereGender)的拼接,此处如果使用一个where对象拼接,就没有这个效果了,除非使用string.

包含SQL函数的表达式:

1 $select->where(array(
2     'create_time' => new Zend\Db\Sql\Expression('NOW()')
3 ));

SQL:

1 SELECT `member`.* FROM `member` WHERE `create_time` = NOW();

本文转载自:http://1208.me/zf2-study-note-sql-where-use/

共有 人打赏支持
aidear
粉丝 0
博文 1
码字总数 0
作品 0
浦东
程序员
Android 内容提供器---内容提供器基础(从提供器中获取数据)

这一节使用用户字典提供器作为一个例子来描述了怎样从提供器中获取数据。 为了清晰起见,本节中的代码片段在UI线程上调用ContentResolver()方法,但是,在实际代码中,应该在一个独立的线程中...

长平狐
2012/10/16
151
0
Zend Framework 2.0 (zf2) 进阶数据库操作

首选的操作DB方式还是继承TableGateway,比如现在要操作的数据库为test,数据表为mydbtable,新建一个类如下 class MyDbTable extends ZendDbTableGatewayTableGateway { } 连接数据库驱动推...

块块
2013/04/02
0
1
YMP v2.0.3 发布,轻量级 Java 应用开发框架

YMP v2.0.3 发布了。本次版本主要是优化更新,新版本已提交至Maven中央库,可以通过以下配置获取各模块依赖: net.ymate.platform ymate-platform- 2.0.3 请将替换为具体模块名,模块详见: T...

有理想的鱼
2017/11/03
1K
1
Zend Framework 2.0 正式版发布及新功能介绍

著名php开源框架Zend Framework经历了长达数年的开发,终于在2012年9月5日正式发布了2.0版本,下简称ZF2。时隔Zend 1.0版本的发布已经有5年之久。php的框架一直都是百家争鸣的,但是作为php...

今天星期一
2012/09/07
7.7K
24
菜菜鸟Zend Framework 2 不完全学习涂鸦(一)-- 安装配置

声明:本人 PHPer 菜鸟一枚,Zend Framework 2 框架的菜菜鸟,刚学习 ZF2 不过 2 天。由于英语实在太破,所以一开始只能找网上 ZF2 中文教程,但很多教程都只说到 ZF2 安装与配置就结束了,没...

Jacky.Wang
2013/07/18
0
27

没有更多内容

加载失败,请刷新页面

加载更多

下一页

git +STS使用问题解决一

1. 2.点以一个pull就是更新代码 3.synchronize workSpace 同步代码,同SVN一致

森火
7分钟前
0
0
powerBi odbc 连接impala 实现自助分析

配置Impala以使用ODBC 可以将第三方产品设计为使用ODBC与Impala集成。为获得最佳体验,请确保支持您打算使用的任何第三方产品。验证支持包括检查Impala,ODBC,操作系统和第三方产品的版本是...

hblt-j
11分钟前
0
0
Purism FAQ

<font size="37" color="#006248" face="幼圆"> <p align="center"> Purism FAQ </p> </font> 原文:https://puri.sm/faq/ 原作者:Purism Team 翻译者:冰焰火灵X 1079092922@qq.com 文章许......

ICE冰焰火灵X
27分钟前
0
0
nginx+webdav

1、配置Nginx以支持WebDav: Webdav是nginx一个组件,默认编译nginx时是没有安装这个组件的。 如果跟应用公用一个nginx,需要重新编译安装nginx,重新安装前需要备份好原来的nginx.conf。 1....

yaukie
32分钟前
0
0
spring 事件

ContextRefreshedEvent Event raised when an {@code ApplicationContext} gets initialized or refreshed. ContextClosedEvent Event raised when an {@code ApplicationContext} gets clos......

Canaan_
44分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部