2013-01-07 9 views

risposta

17

È possibile che lo snippet di codice utente sia simile.

$where = new Where(); 
$sql = new Sql($adapter); 
$select = $sql->select(); 
$where->addPredicate(new Predicate\Expression('LOWER(foo_name) = ?', 'test')); 
$select->from('foo')->where($where); 

Tuttavia non penso Sql \ espressione sul lato destro disponibile in Zend Framework 2.

+0

grazie. Funziona!. – samsonasik

+2

ora è possibile contrassegnarlo ha risposto :) –

+0

ok, è ora contrassegnato – samsonasik

5

Si può fare in questo modo:

$sql = new SQL($adaptor); 
$select = $sql->select()->from(array('f'=>'foo')); 
$select = $select->where('foo_name' => new \Zend\Db\Sql\Expression("LOWER('test')")); 

Sopra interrogazione restituisce come:

SELECT `f`.* FROM `foo` AS `f` WHERE `foo_name` = LOWER('test'); 
+0

+1 per la soluzione del lato destro –

0

Per gli altri che cercano simili, ci sono in realtà diversi modi per ottenere questo a partire da ZF 2.2

concatenazione (lo stesso come la risposta accettata)

<?php 
$sql = new Sql($adapter); 
$select = $sql->select(); 
$select->from(array('f' => 'foo')) 
->where 
->addPredicate(new Predicate\Expression('LOWER(f.foo_name) = ?', 'test')); 

//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = :where1 
//:where1 = 'test' 
?> 

nota l'assenza del comando di esecuzione "()" di Select :: $ in cui consente di continuare il metodo di concatenamento. Selezionare :: $ dove è presente un metodo __get Magic catch che restituisce la proprietà Select :: $ _ protetta in oggetto Select che è un'istanza di Sql \ Where.

predicato \ letterale 1

<?php 
$select->where("LOWER(f.foo_name) = 'test'"); 

//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test' 
?> 

predicato \ letterale 2

<?php 
$select->where(array("LOWER(f.foo_name) = 'test'")); 

//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test' 
?> 

I due di cui sopra crea automaticamente un predicato \ letterale oggetto per voi, se il valore indicizzato (identificatore colonna) dell'array o dell'argomento fornito al metodo Select :: where è una stringa.

Predicate \ Expression (manuale)

<?php 
$select->where(new Predicate\Expression("LOWER(f.foo_name) = 'test'")); 

//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test' 
?> 
Problemi correlati