zf2 SQL where子句拼装
博客专区 > aidear 的博客 > 博客详情
zf2 SQL where子句拼装
aidear 发表于4年前
zf2 SQL where子句拼装
  • 发表于 4年前
  • 阅读 97
  • 收藏 2
  • 点赞 0
  • 评论 0

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

摘要: 本文介绍在zend framework2中where条件常用的使用方法介绍,原文请参考http://1208.me/zf2-study-note-sql-where-use/

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();
共有 人打赏支持
粉丝 0
博文 1
码字总数 0
×
aidear
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: