Ergebnis 1 bis 3 von 3

Thema: DB-Abfragen auslagern

  1. #1
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard DB-Abfragen auslagern

    Hallo zusammen,

    ich arbeite an einem Modul für eine Schnittstelle zu einer komplexen Datenbank und habe entsprechend umfangreiche MySQL-Queries, die den Code relativ unübersichtlich wirken lassen.
    Aus diesem Grund möchte ich die Datenbank-Abfragen gerne auslagern.

    Hat sich jemand von euch schon mal Gedanken über sowas gemacht?

    Da die Queries meist unzusammenhängend sind würden normale Funktionen in einer Datei die inkludiert wird am meisten Sinn machen. Nur bricht das irgendwie mit dem Stil von Contao.

    Ideen?

  2. #2
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Hallo sans,

    ja in speziellen Fällen hatte ich mir auch gedacht, dass es ganz schön wäre die ein oder andere SQL einfach evtl. auch extern zu redefinieren. Allerdings ist ein vernünftiges Konzept was alles mögliche abdeckt nicht mehr ganz so trivial.
    Eine Überlegung war bei mir auch die Auslagerung in eine SQL-Datei. Aber wie gehe ich dann mit dem Contao-Konzept konform? Ich denke eine Möglichkeit wäre es, diese als eine Art besonderes Template zu definieren und damit in die Dateistruktur Deiner Erweiterung unterzubringen.

    Eine andere Idee war die SQL-Statements in einer Datenbank zu speichern, aber dann muss erst mal eine vernünftige Verwaltung dafür konzipiert werden.

    Ich denke, am geschicktesten wäre es ein Feld im Backend bei den entsprechenden Modulen mit zu implementieren. Hier könnte ich mir vorstellen, entweder das SQL direkt anzugeben oder aber alternativ eine Datei auszuwählen - à la Template. Damit mache ich das Modul konfigurierbar und kann aber auch verschiedene Szenarien testen. Allerdings sollte man dabei bedenken, dass nicht jeder Redakteur in der Lage ist SQL-zu definieren oder anzupassen.

    Was meinst Du dazu?

    Gruß

    easy

  3. #3
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard

    Hi easy, vielen Dank für deine Antwort.

    Da sich die Queries später kaum ändern, muss ich im Backend eigentlich keine Möglichkeit für Editierungen haben. Vor allem klingt eine Datenbankabfrage für eine Datenbankabfrage nicht unbedingt optimal

    Was hältst du aber von folgender Lösung:

    Zusammenhängende Abfragen (z.B. alle Abfragen betreffend Dateidownloads) werden in ein entsprechendes Model ausgelagert. Im Modul wird dann dieses Model importiert und die gewünschten Methoden aufgerufen.

    PHP-Code:
    // FILE: DownloadModel.php
    class DownloadModel extends Model
    {

        
    /**
         * Connect to crm database
         */
        
    public function connect()
        {
            
    $this->Database->setDatabase($GLOBALS['TL_CONFIG']['crmDbDatabase']);
            
    $this->Database->execute("SET NAMES 'utf8'");                
        }
        
        
    /**
         * Disconnect from crm database
         */
        
    public function disconnect()
        {
            
    $this->Database->setDatabase($GLOBALS['TL_CONFIG']['dbDatabase']);
            
    $this->Database->execute("SET NAMES 'utf8'");
        }
        
        
    /**
         * Sample method
         */
        
    public function getProducts($params)
        {
            
    $sql "SQL";
            return 
    $this->Database->execute($sql);
        }


    PHP-Code:
    // FILE: Module Sample
    // Import model
    $this->import('DownloadModel');

    // Switch database to crm
    $this->DownloadModel->connect();
    // Sample query
    $objResult $this->DownloadModel->getProducts($params);
    // Switch database back to contao
    $this->DownloadModel->disconnect();

    print_r($objResult); 
    Mit dem Wechseln der Datenbank bin ich allerdings noch nicht zufrieden. Muss nämlich jedes mal geschehen, wenn ich vom CRM was hole und wieder zurück, wenn ich dann wieder was von der Contao Datenbank brauche.
    Eine Möglichkeit wäre ein Wrapper, der automatisch die Datenbank wechselt, die Methode ausführt undwieder zurück wechselt. Allerdings hätte ich damit - wenn ich mehrere CRM Abfragen hintereinander habe - sinnlose Wechsel dabei.

    Hat da vielleicht jemand eine Idee?
    Geändert von sans (15.06.2011 um 09:26 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •