• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Zend Framework 2.0 (zf2) 进阶数据库操_php

php 搞代码 7年前 (2018-06-21) 173次浏览 已收录 0个评论

  zf2完全重写了Zend1的数据库组件,但是目前手册给的例子都弱爆了,只能自己整理一些Zend/Db/TableGateway用例如下:

  首选的操作DB方式还是继承TableGateway,比如现在有一个posts表需要操作,新建一个类如下

  class Posts extends Zend/Db/TableGateway/TableGateway

  {

  }

  实例化这个类并传入Zend/Db/Adapter/Adapter即可连接数据库,此处并非重点,假设实例化后的TableGateway为$postTable,我们需要这样操作posts表:

  WHERE 链式操作

  zf2推荐的查询方式为链式操作

  $select = $postTable->getSql()->select();

  $select->where('id > 5')->order('id DESC')->limit(10);

  $resultSet = $postTable->selectWith($select);

  $result = $resultSet->toArray();

  WHERE 闭包操作

  zf2还支持闭包式的操作,上例可以以闭包方式改写成:

 

  $select = $postTable->getSql()->select();

  $select->where(function($where){

  $where->lessThan('id', 10);

  $where->greaterThan('id', 5);

  return $where;

  })->order('id DESC')->limit(10);

  WHERE AND复合条件

  而当where条件为复合条件时,可以这样写:

 

  $select->where(

  array('id > 30')

  )->where(

  array('id < 10')

  );

 

  将会生成以下SQL

  SELECT "posts".* FROM "posts" WHERE id > 30 AND id < 10;

  WHERE OR 复合条件

  如果要将Where查询的默认链接为AND,如果想要更改为OR,可以这样写:

 

  $select->where(

  array('id > 30')

  )->where(

  array('id < 10'), /Zend/Db/Sql/Where::OP_OR

  );

  SQL:

  SELECT "posts".* FROM "posts" WHERE id > 30 OR id < 10;

  还可以这样写,效果是一样。这是通过魔术方法__call()实现的。

  $where = $select->where;

  $where->lessThan('id', 10);

  $where->or;

  $where->greaterThan('id', 30);

 

  WHERE 复杂条件

  如果查询条件进一步复杂,比起链式操作来,闭包操作更具有灵活性,比如:

  $select->where(function($where){

  $subWhereForId = clone $where;

  $subWhereForTitle = clone $where;

  $subWhereForId->lessThan('id', 10);

  $subWhereForId->or;

  $subWhereForId->greaterThan('id', 20);

  $where->addPredicate($subWhereForId);

  $subWhereForTitle->equalTo('title', 'a');

  $subWhereForTitle->or;

  $subWhereForTitle->equalTo('title', 'b');

  $where->addPredicate($subWhereForTitle);

  return $where;

  });

  等同于SQL

  SELECT "posts".* FROM "posts" WHERE ("id" < '10' OR "id" > '20') AND ("title" = 'a' OR "title" = 'b');

 

  EvaEngine的改进

  在EvaEngine中,可以使用完整的链操作,最开始的例子在EvaEngine里可以这样写:

  $result = $postTable->where('id > 5')->order('id DESC')->limit(10)->find();

原文地址:http://avnpc.com/pages/advanced-database-select-usage-in-zf2

欢迎大家阅读《Zend Framework 2.0 (zf2) 进阶数据库操_php,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Zend Framework 2.0 (zf2) 进阶数据库操_php

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址