web-dev-qa-db-fra.com

Problème de demande Nooku

J'utilise Nooku Framework et la base de données Joomla CMS et MySQL pour créer une application. Je dois récupérer certaines données d'une autre table dans le menu déroulant de ma table, à l'aide de Nooku Framework, Model Part.

La différence dans Nooku est que les requêtes ne sont pas écrites en SQL. Je veux donc savoir si vous voulez comment écrire cette requête: "SELECT DISTINCT Libelle_Pays de a3n4v_sgrmre_reclamations r, a3n4v_sgrmre_pays p where r.Code_Pays = p.code_pays"

Merci beaucoup

1
user4147

Pour ce faire, vous devez créer un modèle pour votre composant et le placer dans votre dossier de modèles de composants. Nooku est une structure par convention qui vous permet de comprendre les conventions de dénomination. Vous pouvez trouver plus d'informations dans le guides Nook .

Voici le code de votre modèle (Nooku Framework 2.x):

class ComSgrmreModelReclamations extends KModelDatabase
{ 
    protected function _buildQueryColumns(KDatabaseQueryInterface $query)
    {  
        $query
            ->distinct();
            ->columns(array('tbl.Libelle_Pays'))

    }        

    protected function _buildQueryJoins(KDatabaseQueryInterface $query)
    {
        $query->join(array('pays' => 'sgrmre_pays'), 'pays.Code_Pays = tbl.code_pays', 'LEFT'):

    }
}

La requête résultante générée par ce code serait:

SELECT DISTINCT Libelle_Pays FROM a3n4v_sgrmre_reclamations AS tbl LEFT JOIN a3n4v_sgrmre_pays AS pays WHERE tbl.Code_Pays = pays.code_pays

L'objet $ query transmis est un objet KDatabaseQuerySelect dans ce cas et fournit un wrapper OO pour créer des instructions SELECT).


Le nom de la table est basé sur le nom du nom de la classe de modèle, par exemple sgrmre_reclamations. Le préfixe de la base de données Joomla est automatiquement ajouté par Nooku et n'a pas besoin d'être inclus.


Le tbl est le raccourci pour la table de base de la table qui est interrogée; il est disponible partout lors de la création d'une requête.


La DISTINCT est effectuée lors de la création des colonnes pour s'assurer qu'elle n'est pas incluse lors de la génération d'une requête COUNT. Si vous voulez que la requête de nombre prenne en compte le compte distinct, vous devez passer à la méthode joins ou where.


Le type de jointure est LEFT par défaut et le troisième paramètre peut être omis. ou tout autre type de jointure peut être spécifié.

Les références :

  1. KDatabaseQuerySelect
  2. KModelDatabase
2
Johan Janssens