/** * Retourne un tableau contenant la liste des enregsitrements que les * tables ont en relation. * Ces tables doivent être en relation N:N et configuré dans la base * de données des informations des schémas: * - Voir INFORMATION_SCHEMA > KEY_COLUMN_USAGE dans MySQL * * La valeur de retour est un tableau associatif sous la forme * self::convertSqlResultWithKeyAsFirstFieldToArray() * * En cas d'ambiguïté de nom de champs à sélectionner, préciser le nom * de la table. * Par exemple, si les table RN et RN ont toutes les deux un champs nommé * 'nom', alors préciser 'R1.nom' ou 'R2.nom' dans $arrayFieldsNameToDisplay * * @param string $primaryTableNameRN Nom de la table primaire de relation N * @param array $secondaryTablesNamesAndidKeyValueRN Noms des tables secondaires de relation N et valeur des clefs étrangères * @param string $arrayFieldsNameToDisplay Liste des champs à sélectionner. * @param array $arrayFieldsNameOrder Liste des champs à classer. * @return array de type self::convertSqlResultWithKeyAsFirstFieldToArray() */ public static function getArrayFieldsNameFromForeignKeyRelationNtoN($primaryTableNameRN, $secondaryTablesNamesAndidKeyValueRN, $arrayFieldsNameToDisplay, $arrayFieldsNameOrder = NULL, $keyValue = NULL, $conditionSql = NULL) { /** * Nom de la clef de la table primaire N. */ $tableDescriptionRN = new DatabaseDescriptionTable($primaryTableNameRN); $keyNameRN = $tableDescriptionRN->getKeyName(); /** * Construction de la requête SQL */ $paramSelectClause = $primaryTableNameRN . '.' . $keyNameRN . ',' . $arrayFieldsNameToDisplay; $paramTableClause = $primaryTableNameRN . DatabaseOperation::tableClauseRelationship($secondaryTablesNamesAndidKeyValueRN, $keyValue); $paramWhereClauseRelationship = ' 1 ' . DatabaseOperation::whereClauseRelationshipNtoN($primaryTableNameRN, $secondaryTablesNamesAndidKeyValueRN, $keyValue); $paramWhereClauseRelationship .= DatabaseOperation::whereClauseDistinct($primaryTableNameRN, $keyValue); $paramWhereClauseRelationship .= ' ' . $conditionSql; if ($arrayFieldsNameOrder) { $paramOrderClause = implode(',', $arrayFieldsNameOrder); } return DatabaseOperation::convertSqlStatementWithKeyAsFirstFieldToArray(self::doSqlSelect($paramSelectClause, $paramTableClause, $paramWhereClauseRelationship, $paramOrderClause)); }