2017-07-19 4 views
1

Comment puis-je générer une requête comme celle-ci sur le ZF2 de PHP?Sur ZF2, comment utiliser une expression à la place d'un nom de tableau entre guillemets?

SELECT timestamp FROM generate_series(0,20,5) AS timestamp 

J'ai essayé:

$select = $this->select() 
    ->columns(array("timestamp")) 
    ->from("timestamp" => array("generate_series(0,20,5)")) 

qui génère:

SELECT "timestamp" FROM "generate_series(0,20,5)" AS "timestamp" 

Mais il cherche une table nommée generate_series(0,20,5) qui n'existe pas

Et aussi:

$select = $this->select() 
    ->columns(array("timestamp")) 
    ->from(array("timestamp" => new \Zend\Db\Sql\Expression('generate_series(0,20,5)'))) 

Mais il génère aussi une erreur:

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

Toutes les idées sur la façon de transformer le nom de la table dans une expression au lieu d'un nom de table cité?

+0

Quelle requête voulez-vous exécuter? – Nawin

+0

@Nawin La première 'SELECT timestamp FROM generate_series (0,20,5) AS timestamp' – matt

+0

Donc' generate_series (0,20,5) 'est votre nom de table? – Nawin

Répondre

1

FYI, sachez qu'il existe une autre classe Zend \ Sql \ Predicate \ Expression dans ZF2. Si vous regardez le Select :: from(), je pense que vous ne pouvez pas passer un objet Expression comme nom de table.

Donc une solution rapide serait d'utiliser un sous-select. Mais il est une sorte de laid)

$prefixColumns = false; 
$select2 = new Select(); 
$select2->columns(array('*'), $prefixColumns); 
$select2->from('generate_series(0,20,5)'); 

$select = new Select(); 
$select->columns(array('timestamp')); // or disable prefixed columns like in $select 2 
$select->from(array('tblAlias' => $select2)); 

Cela devrait fournir la requête suivante:

var_dump($select->getSqlString()); 

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