È possibile registrare le query eseguite nel registro dell'applicazione ed esaminarle. Qualcosa di simile nel file di configurazione:
'components' => array(
'db'=>array(
'enableParamLogging' => true,
),
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'trace,log',
'categories' => 'system.db.CDbCommand',
'logFile' => 'db.log',
),
),
),
);
In alcuni casi (ad esempio durante l'esecuzione di test), sarà anche necessario chiamare Yii::app()->log->processLogs(null);
al termine del processo per questo al lavoro.
Ovviamente, una volta che ci sei, niente ti impedisce di scrivere la tua rotta di log che fa qualcosa di diverso con i messaggi registrati, ma ricorda che i log vengono elaborati alla fine della richiesta (o quando chiami processLogs
) , non ogni volta che si registra qualcosa.
A proposito, non è necessario creare query del genere, con input dinamico direttamente nella query. variabili Uso bind invece:
$criteria = new CDbCriteria();
$criteria->condition = 't.date BETWEEN :from_date AND :to_date';
$criteria->params = array(
':from_date' => $from_date,
':to_date' => $to_date,
);
$criteria->with = array('order');
$orders = ProductOrder::model()->findAll($criteria);
non sembra DAO con comando sql diretto è molto più semplice/più veloce rispetto all'utilizzo di CDbcriteria? – itachi
Dipende da cosa si vuole fare con il risultato, suppongo. Se si desidera utilizzare la funzionalità del modello (ad esempio la convalida), l'utilizzo di AR è una scelta ovvia. Personalmente, preferisco AR e lascia DAO solo per situazioni più complesse come l'aggiornamento che coinvolge un join. In questo modo posso utilizzare gli ambiti del modello per condizioni comuni e non dover rivedere/aggiornare manualmente tutti i comandi diretti quando lo schema o la logica aziendale cambia. (Inoltre, usare AR ovunque significa un modo coerente per accedere ai dati contenuti nei risultati, senza doversi preoccupare se la riga del risultato è un oggetto o un array ...) – DCoder
ha ottenuto il tuo punto. Grazie per la spiegazione. – itachi