- Accueil
- Info légales
- Aide (FAQ)
- Les tags de ce site
- Bloc note
- Articles techniques
- Notes system
- Divers articles
- Drupal
- Notes ITIL 2007
- Notes MS
- Dans le quartier...
- Emploi
- Recettes de cuisine et adresses gourmandes
- mes applis ubuntu préferées
- Divers acronymes du monde social
- Internet 2018
- P2 meublé à louer - quartier du Poteau 75018
- apcos - réseaux sociaux et outils
- Articles techniques
- Divers liens
- Fun
- Mon CV IT
- Nouveautés
db_select
db_query pour requete sur une unique table. db_select si LIKE, plusieurs tables... indépendant de la db (MySQL ou autre).
Ex 1 avec node_access
Le code suivant est équuivalent au SQL SELECT title, nid, created FROM {node} n WHERE n.status = 1
$result = db_select('node', 'n')
->addTag('node_access') // Enforce node access permissions.
->fields('n', array('title', 'nid', 'created')) // Fields to return.
->condition('n.status', 1) // WHERE condition.
->execute();
foreach ($result as $node) {
// $node will be a PHP object with fields corresponding to the table fields.
$title = $node->title;
// ...
}
Notes:
- db_query doit {nomtable} mais pas db_select
-
methode addTag() à utiliser si on interroge des données en pensant aux permissions.
-
certaines methodes query permettent le chaining (comme dans cet ex) parce qu'elles modifient la query et retourne un objet modifié ; d'autres non (dont addField et les methodes de jointures).
Ex de méthode "non chaining", avec pagination, 20 items par page, et node_access:qui équivaut à
SELECT n.changed AS last_updated, n.title, n.nid, u.name
FROM {node} n
INNER JOIN {users} u ON u.uid = n.nid
WHERE n.status = 1$query = db_select('node', 'n');
$query->addField('n', 'changed', 'last_updated');
$query->innerJoin('users', 'u', 'u.uid = n.uid'); // Join.
$query = $query->extend('PagerDefault');
$result = $query
->fields('n', array('title', 'nid'))
->fields('u', array('name'))
->addTag('node_access')
->condition('n.status', 1)
->limit(20)
->execute();chp alias
jointure
paginationperm
publié
nb items/p
-
certaines methodes query permettent le chaining (comme dans cet ex) parce qu'elles modifient la query et retourne un objet modifié ; d'autres non (dont addField et les methodes de jointures).
- Si on utilise PagerDefault (comme ici plus haut) alors il faut appeller theme('pager')