文档章节

zf2 SQL where子句拼装

aidear
 aidear
发布于 2014/01/02 15:46
字数 482
阅读 105
收藏 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
mybatis where语句动态拼装(if, foreach)

在 mapper 中写 sql 的时候,如果传入的参数两个以上,并且可能为空,就需要用到 where语句动态拼装了。 使用 where语句,if 标签进行拼装,如果某项参数为空, 此项就会略去;如果不为空,此...

imbiao
09/11
0
0
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

没有更多内容

加载失败,请刷新页面

加载更多

SingleNumber136 leetCode

Given a non-empty array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you im......

woshixin
昨天
1
0
String ,  StringBuffer ,  StringBuilder的区别

String , StringBuffer , StringBuilder的区别 String 首先,String 是用来表示一个字符串常量的,它是一个不可变对象,意味着,一旦我们创建了某个字符串之后,就不能再改变它的值了,我们可...

tsmyk0715
昨天
2
0
区块链100讲:UTXO 和 Account 模型对比

在当前区块链世界中,主要有两种记录保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式。Bitcoin 采用的是 UTXO 模型,Ethereum 采用的 Account 模型,同样 CITA 也采用了 ...

HiBlock
昨天
1
0
Vue中路由管理器Vue Router使用介绍(三)

一、路由定义添加动态参数定义 1.路由定义项,使用:xx 方式 定义动态参数 { path:'/user/:id/:name', name:'user', component:()=>import('./views/User.vue') ...

tianma3798
昨天
1
0
从ibdata文件恢复mysql数据

DROP TABLE 恢复【一】 Recover InnoDB dictionary Percona Data Recovery Tool 单表恢复

IT--小哥
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部