Basta passare la stringa sql per la scheda db in questo modo:
$resultSet = $adapter->query($sql, \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
E se si desidera passare parametri:
$sql = "SELECT * FROM testTable WHERE myColumn = ?";
$resultSet = $adapter->query($sql, array(5));
EDIT: Si prega di notare che il metodo query non restituisce sempre un set di risultati. Quando è una query di produzione di risultati (SELECT
) restituisce un \Zend\Db\ResultSet\ResultSet
altrimenti (INSERT
, UPDATE
, DELETE
, ...) restituirà un \Zend\Db\Adapter\Driver\ResultInterface
.
E quando si lascia vuoto il secondo parametro, si otterrà un \Zend\Db\Adapter\Driver\StatementInterface
che è possibile eseguire.
Sto usando questo approccio per eseguire query complesse direttamente in un controller e funziona bene, ma il problema è che ho bisogno di dichiarare l'adattatore in ogni azione in cui ne ho bisogno, che è ridondante. Mi piacerebbe creare l'adattatore solo una volta e poi chiamarlo nelle azioni dove ne ho bisogno, ma non ho capito come farlo ... quindi la mia domanda è, come e dove dovresti dichiarare o creare il dbAdapter in un modo che in seguito puoi semplicemente chiamarlo in diverse azioni in un controller, senza doverlo dichiarare ogni volta che devi eseguire una query diversa? – Clarissa
Guarda questo link http://norm.al/2012/07/20/zf2-sharing-db-connection/ – Weteef
@Clarissa Non devi mai eseguire SQL in un controller. Si rompe il principio MVC. La comunicazione con il database è il lavoro del modello. – automatix