Magari uno si trova a dover fare una query su una tabella, magari quella inserita nel post precedente.
Non vi spiegherò quanto è contorto Drupal. Mi limiterò a farvi vedere un esempio.
Premessa: In Drupal 7 le query al DB vengono fatte tramite funzioni apposite che si chiamano come la tipologia di query da fare. Avremo quindi:
db_select;
db_insert;
db_update;
db_delete;
Mettiamo che abbiamo una tabella chiamata png_creator_races e vogliamo fare l'equivalente di:
SELECT * FROM png_creator_races as n ORDER BY id_race ASC
Useremo la seguente sintassi:
<?php public function loadAllRaces(){ $result = db_select('png_creator_races', 'n')->fields('n')->orderBy('id_race', 'ASC')->execute(); while ($field = $result->fetchAssoc()){ $race = new race(); $race->race_name = $field['race_name']; $race->mod_for = $field['mod_for']; $race->mod_dex = $field['mod_dex']; $race->mod_cos = $field['mod_cos']; $race->mod_int = $field['mod_int']; $race->mod_wis = $field['mod_wis']; $race->mod_car = $field['mod_car']; $race->mod_cus = $field['mod_cus']; $this->races[] = $race; } } ?>
Nell'esempio sopra ho un metodo loadAllRaces dentro una classe (che ho omesso) che si occupa di fare la nostra select.
Tutto ruota sull'oggetto ritornato da db_select i cui due parametri sono "nome tabella" ed "alias tabella".
Tutti gli altri pezzi possono essere aggiunti in coda o anche sotto secondo la forma:
<?php $query = db_select('png_creator_races', 'n'); $query->fields('n'); $query->orderBy('id_race','ASC'); $result = $query->execute(); ?>
Da notare che mentre prima avevo la variabile result direttamente uguale a tutto il blocco, adesso ho creato un oggetto $query su cui ho lanciato i vari metodi.
Questi metodi permettono di fare altre cose tra cui JOIN, condizioni WHERE, le ovvie LIMIT ed addirittura la paginazione. Per questo ed altro rivediamo altri esempi in futuro.
Tornando al pezzo di codice sopra, vediamo come il nostro While usi il comando fetchAssoc che restituisce la nextRow per associazione. La parte sotto è solo una mappatura della riga della tabella su un oggetto di tipo race.
Nessun commento:
Posta un commento