Zend Framework 2,数据库操作通过 ZendDb 中的接口实现。数据库操作中的where筛选,具体就是通过 ZendDbSqlWhere 这个类实现。

where 这个类默认接受以下三种参数:

  • 闭包函数;
  • 筛选条件字符串;
  • 数组

闭包函数会传入一个 Where 对象,然后可以通过Where其支持的各种方法构造where语句,暂且不表;筛选条件字符串就更不用说了,就是SQL语句中where里的东西;这里说说数组。

数组这种方式,根据每个数组元素下标不同,具体又分为两种:

  • 下标为数字 (如果不设置下标PHP会自动用数字编号),如果键值本身是表达式,就构造,如果键值本身是ZendDbSqlPredicate下的某个类实例,则调用对应的实例构造表达式

  • 下标不是数字: 这个时候会自动把下标当作是列名 如果键值符合一个表达式的定义,比如“a = 1”这种方式,就会自动构造为一个表达式。 如果键值只是一个简单的字符串值或者null,就会自动构造为“键名=值”这样的表达式

这里需要提醒注意的是,如果我们where之前通过join的方式链接了其他的表,那么在数组键名确定字段时,就要带上完整的表名或者表别名。

比如,表 test 下的 id 字段,就应该是 test.id ,而不要直接传递 id 进去,以免冲突