Come ottenere Sql come questo:Come aggiungere Sql Expression davanti al nome colonna in ZF2?
select * from foo where LOWER(foo_name) = 'test';
ciò che ottengo è se Sql \ Espressione a destra, non in sinistra.
Come ottenere Sql come questo:Come aggiungere Sql Expression davanti al nome colonna in ZF2?
select * from foo where LOWER(foo_name) = 'test';
ciò che ottengo è se Sql \ Espressione a destra, non in sinistra.
È 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.
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');
+1 per la soluzione del lato destro –
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'
?>
grazie. Funziona!. – samsonasik
ora è possibile contrassegnarlo ha risposto :) –
ok, è ora contrassegnato – samsonasik