Exemplo n.º 1
0
 /**
  * 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));
 }