Vous pouvez utiliser le code suivant.
$query = db_select('digitaliq_flds_by_node', 'a')->fields('a');
$alias = $query->join('digitaliq_fld_category', 'b', 'a.fld_id = %alias.fld_id AND a.fld_collection_id = %alias.fld_collection_id AND a.fld_group_name = %alias.fld_group_name');
$terms = $query->execute();
Les appels à SelectQuery :: join () (de la même manière que SelectQuery :: leftJoin () , SelectQuery :: innerJoin () et SelectQuery :: addJoin () ) ne peuvent pas être chaînés car ces méthodes ne renvoient pas d' SelectQuery
objet, mais l'alias réel utilisé pour la jointure. Si vous exécutez le code suivant, vous obtiendrez une erreur.
$query = db_select('digitaliq_flds_by_node', 'a')
->fields('a')
->join('digitaliq_fld_category', 'b', 'a.fld_id = %alias.fld_id AND a.fld_collection_id = %alias.fld_collection_id AND a.fld_group_name = %alias.fld_group_name')
->execute();
Les chaînes en PHP ne sont pas des objets et ne définissent pas la execute()
méthode.
Pour vérifier que le code exécute la bonne requête SQL, convertissez-la $query
en chaîne et imprimez-la. Vous obtiendrez la requête SQL qui serait exécutée à partir de votre code.
$query = db_select('digitaliq_flds_by_node', 'a')->fields('a');
$alias = $query->join('digitaliq_fld_category', 'b', 'a.fld_id = %alias.fld_id AND a.fld_collection_id = %alias.fld_collection_id AND a.fld_group_name = %alias.fld_group_name');
print $query;
Avec ce code, j'obtiens la sortie suivante.
SELECT a.*
FROM
{digitaliq_flds_by_node} a
INNER JOIN {digitaliq_fld_category} b ON a.fld_id = b.fld_id AND a.fld_collection_id = b.fld_collection_id AND a.fld_group_name = b.fld_group_name
leftJoin()
ne renvoie pas d'SelectQuery
objet. Le code appellecondition()
quelque chose qui n'est pas un objet.