Php 在ZF2上,如何使用表达式而不是带引号的表名?

Php 在ZF2上,如何使用表达式而不是带引号的表名?,php,postgresql,zend-framework2,Php,Postgresql,Zend Framework2,如何在PHP的ZF2上生成这样的查询 SELECT timestamp FROM generate_series(0,20,5) AS timestamp 我试过: $select = $this->select() ->columns(array("timestamp")) ->from("timestamp" => array("generate_series(0,20,5)")) 由此产生: SELECT "timestamp" FROM "ge

如何在PHP的ZF2上生成这样的查询

SELECT timestamp FROM generate_series(0,20,5) AS timestamp
我试过:

$select = $this->select()
    ->columns(array("timestamp"))
    ->from("timestamp" => array("generate_series(0,20,5)"))
由此产生:

SELECT "timestamp" FROM "generate_series(0,20,5)" AS "timestamp"
但是它正在寻找一个名为
generate_series(0,20,5)
的表,该表不存在

而且:

$select = $this->select()
    ->columns(array("timestamp"))
    ->from(array("timestamp" => new \Zend\Db\Sql\Expression('generate_series(0,20,5)')))
但它也会产生一个错误:

SELECT "timestamp"."timestamp" AS "timestamp" FROM "Object" AS "timestamp"

关于如何将表名转换为表达式而不是引用的表名,您有什么想法吗?

仅供参考,请注意ZF2中还有另一个Zend\Sql\Predicate\expression类。如果查看Select::from(),我认为不能将任何表达式对象作为表名传递

因此,一个快速的解决方案是使用子选择。但这有点难看;)

这应提供以下查询:

var_dump($select->getSqlString());

SELECT
  tblAlias.timestamp AS timestamp 
FROM (
  SELECT * FROM generate_series(0,20,5)
) AS tblAlias

您想执行哪个查询?@Nawin第一个
从generate_series(0,20,5)中选择timestamp作为时间戳
So
generate_series(0,20,5)
是您的表名吗?@Nawin是的(与其说是表名,还不如说是一个不应该被引用的表达式),请尝试
prepareStatementForSqlObject()
@matt
var_dump($select->getSqlString());

SELECT
  tblAlias.timestamp AS timestamp 
FROM (
  SELECT * FROM generate_series(0,20,5)
) AS tblAlias