MetaModels Workshop in Berlin
Ergebnis 1 bis 16 von 16

Thema: Datenbank Klasse

  1. #1
    Contao-Nutzer
    Registriert seit
    28.02.2011.
    Beiträge
    197

    Standard Datenbank Klasse

    Hallo,

    ist dieser Artikel im Wiki eigentlich noch aktuell?

    https://de.contaowiki.org/Datenbank_Klasse_verwenden

    Gibt es irgendwo BestPractices zum Bearbeiten von externen Datenbanken?

    Viele Grüße
    conter

  2. #2
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.014
    User beschenken
    Wunschliste

    Standard

    Nein, Contao 4.4 hat zwar diese Klasse noch, aber nur aus Gründen der Abwärtskompatibilität zu Contao 3
    Contao 4 bzw. Symfony arbeitet mit Doctrine/dbal, damit kann man auch externe Datenbanken connecten, weil man auch mehrere Server definieren kann.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    20.566
    User beschenken
    Wunschliste

    Standard

    Das was du von hier bekommst ist ein Doctrine\DBAL\Connection Objekt, mit dem du folgendes machen kannst: http://docs.doctrine-project.org/pro...ipulation.html (siehe auch http://www.doctrine-project.org/api/...onnection.html).

  4. #4
    Contao-Nutzer
    Registriert seit
    28.02.2011.
    Beiträge
    197

    Standard

    Super, vielen Dank!

    Das hilft und funktioniert!

  5. #5
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.613
    User beschenken
    Wunschliste

    Standard

    Bedenke auch, dass man Datensätze aus sehr vielen Tabellen auch mit Models holen kann, was sehr einfach ist.

    @spooky: Oder ist das auch veraltet, bzw. gibt es neue Models?
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    20.566
    User beschenken
    Wunschliste

    Standard

    Nein, Models gibt es schon noch. Aber im anderen Thread ging es um eine zweite Datenbankverbindung - Models kann man nur mit der Default Datenbankverbindung benutzen.

  7. #7
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.613
    User beschenken
    Wunschliste

    Standard

    Ja, klar, Models geht nicht mit externen DBs, habe das extern oben irgendwie überlesen. Wollte die Models auch nochmal erwähnt habe, weil ich immer wieder sehe, dass Leute einen Datensatz kompliziert mit Database holen, wo sie ihn mit Models holen könnten.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  8. #8
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    567

    Standard

    Hallöchen,

    ich nutze bei einem Projekt auch derzeit die "alte" Contao Datenbank Klasse.
    Wie würde z.B. folgender Code über die Doctrine/dbal Connection aussehen?

    Code:
    $name=$_POST['name'];
    $email=$_POST['email'];
    $pic=($_FILES['photo']['name']);
    $set = array('name' => $name, 'email' => $email, 'photo' => $pic);
    Database::getInstance()->prepare("INSERT INTO teilnehmer %s")->set($set)->execute();

  9. #9
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    567

    Standard

    Also das ich mit
    Code:
    $db = \System::getContainer()->get('doctrine.dbal.second_connection');
    eine Verbindung zu einer zweiten Datenbank herstellen kann, verstehe ich.
    Aber wie sieht die Verbindung aus, wenn ich die Default Datenbank verbinden will?

    Etwas so?
    Code:
    $db = \System::getContainer()->get('doctrine.dbal');
    Wie mache ich dann z.B. eine einfache Datenbank Abfrage?

    Etwa so?

    Code:
    $sql = "SELECT * FROM tl_log WHERE id=?";
    $stmt = $db->prepare($sql);
    $stmt->bindValue(1, $id);
    $stmt->execute();

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    20.566
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    $db = \Contao\System::getContainer()->get('database_connection');
    $result $db->executeQuery("SELECT * FROM tl_log WHERE id = ?", [$id])->fetch(); 

  11. #11
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    567

    Standard

    Cool, die Datenbank Verbindung funktioniert nun.
    Aber wie gebe ich das Ergebnis in der While aus?

    So funktioniert es bei mir leider nicht:
    Code:
    while($result->next())
    {
      echo $result->id;
    }

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    20.566
    User beschenken
    Wunschliste

    Standard

    Dein SQL query fetched nur einen Eintrag. Wenn du mehrere Einträge fetchen willst, kannst du andere fetch Methoden verwenden. Oder auch:
    PHP-Code:
    $statement $db->executeQuery("SELECT * FROM …", []);

    while (
    $result $statement->fetch()) {
        
    // …

    (ungetestet)
    Geändert von Spooky (14.03.2019 um 09:52 Uhr)

  13. #13
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    567

    Standard

    Danke Spooky. So funzt es jetzt :-)

  14. #14
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    567

    Standard

    Einen habe ich doch noch.
    Wie sieht das ganze bei einem INSERT aus? Wenn ich also einen Datensatz anlegen möchte:

    Code:
    $set = array('tstamp' => time(), 'source' => 'BE', 'action' => 'GENERAL');
    $objInsert = $this->Database->prepare("INSERT INTO tl_log %s")->set($set)->execute();
    Ich hatte es so versucht, was aber leider nicht geklappt hat:

    Code:
    $objInsert->executeSet("INSERT * FROM tl_log WHERE %s", [$set])->fetch();

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    20.566
    User beschenken
    Wunschliste

    Standard

    https://www.doctrine-project.org/pro...on.html#insert

    Warum willst du das bei tl_log überhaupt so machen?

  16. #16
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    567

    Standard

    Ahhh ja. Prima. Funzt auch.
    Die tl_log war einfach nur ein Beispiel ;-) Hätte auch jede andere Tabelle sein können.

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
  •