Forum

Forum feed

» zum Forum | » aktuelle Diskussionen

Kommentare

Forum feed

Datenbankabfregen in Zikula 1.3.x  Unten

  • Hallo,

    ich bin momentan am planen für ein neues Modul, so dass ich mich frage, wie ich die Datenbankabfragen umsetzen soll, da es ja anscheinend zwei Möglichkeiten gibt: DBUtil und Doctrine2 wobei DBUtil auch Doctrine2 nutzt. Soweit ich mitbekommen habe, ist es empfohlen Doctrine2 zu nutzen. Doch hier habe ich das Problem, dass ich nicht wirklich weiß, wie die Syntax ist und vor allem wo ich die Tabelle an sich definiere. Vllt. könnt Ihr mir ja mal die Dokumentation dazu aufzeigen.

    Vielen Dank

    lmm

    PS: Wo wir schon bei der Dokumentation sind: die Dokumentation ist momentan ja nicht sooo super (entschuldigung, wenn ich das so sagen muss) Ich würde ja vorschlagen, dass man mal ein oder zwei Aktionstage macht, wo alle mal mitdokumentieren; es müsste sich halt nur jemand finden, der mal eine Struktur macht; vllt. könnte man ja sowas im Englischsprachigen Forum sammeln. Es ist für ein Projekt wie Zikula meines erachtens nämlich sehr wichtig, dass es eine gute Dokumentation gibt, da Zikula viele echt gute und durchdachte Funktionen hat, man diese aber nicht findet... So macht man es Neueinsteigern wie mir leider schwer.
  • Als erstes musst du eine Entity erstellen. Hier ein Beispiel:

    Code

    <?php

    use Doctrine\ORM\Mapping as ORM;

    /**
     * Events entity class.
     *
     * Annotations define the entity mappings to database.
     *
     * @ORM\Entity
     * @ORM\Table(name="beispiel")
     */

    class ExampleModule_Entity_ExampleTable extends Zikula_EntityAccess
    {
        /**
         * The following are annotations which define the fid field.
         *
         * @ORM\Id
         * @ORM\Column(type="integer", unique=true)
         * @ORM\GeneratedValue(strategy="AUTO")
         */

        private $id;
       
        /**
         * The following are annotations which define the language field.
         *
         * @ORM\Column(type="string", length=16, nullable="true")
         */

        private $name = null;


        public function getName()
        {
            return $this->name;
        }
       

       public function setName($name)
        {
            return $this->name = $name;
        }

    }


    Die Datei ersetzt sozusagen die tables.php. Jede Datenbank hat ihre eigene Datei. Die Datei musst du unter modules/ExampleModule/lib/Entity/ExampleTable.php speichern.

    Die verschiedenen Möglichkeiten (string, int, array) findest du unter 5.4.

    Für die Abfrage gibt es drei Möglichkeiten. Hier mal zwei:

    1.

    Code

    $example = $this->entityManager->find('ExampleModule_Entity_ExampleTable', 1);
    $name = $example->getName();


    2.

    Code

    $em = $this->getService('doctrine.entitymanager');
    $qb = $em->createQueryBuilder();
    $qb->select('p');
    $qb->from('ExampleModule_Entity_ExampleTable', 'e')
    $qb->where("e.name = 1")
    $query = $qb->getQuery();
    // return the example or false if failed
    $example = $query->getArrayResult();
    $name = $example['name']



    Das editieren sieht so aus:

    Code

    $example = $this->entityManager->find('ExampleModule_Entity_ExampleTable', 1);
    $example->setName('Max Mustermann');
    $this->entityManager->persist($example);
    $this->entityManager->flush();


    oder auch:

    Code

    $data = array('name' => 'Max Mustermann')
    $example = $this->entityManager->find('ExampleModule_Entity_ExampleTable', 1);
    $example->merge($data);
    $this->entityManager->persist($example);
    $this->entityManager->flush();


    Neue Einträge gehen so:

    Code

    $example = new ExampleModule_Entity_ExampleTable();
    $example->setName('Max Mustermann');
    $this->entityManager->persist($example);
    $this->entityManager->flush();


    Ein Beispiel findes du hier (wobei ich persönlich das zu kompliziert finde):

    https://github.com/zikula/core/tree/release-1.3/src/docs/examples/modules/ExampleDoctrine

    Dennoch solltest du dir dort noch die Installer.php ansehen.

    Weitere Erklärungen gibt es hier:

    http://doctrine-orm.readthedocs.org/en/latest/



    Bearbeitet von phaidon am 28. Jul 2012 - 15:43.
  • Hallo,

    das klingt für mich auf jeden Fall schon mal toll! IChwerde mich in den nächsten Tagen mal ein wenig näher damit auseinandersetzen und sage deshalb schon mla ganz dick DANKE!

    lmm
  • Ich schreibe gerade eine Dokumentation zur Erstellung von Zikula-Modulen. Ein Kapitel über Doktrine gibt es auch:

    http://www.wuertz.org/zikula/module-development/de/kapitel/datenbank.html
  • Hallo,

    erst mal danke für die Antwort! Es hat nach ein wenig gesuche funktioniert... Das Problem: ich habe ein Feld desc genannt. Das hatte den Erfolg, dass ich kryptische Fehlermeldungen in Form von MySQL Fehlermeldungen erhalten habe. gibt es keine Möglichkeit den Fehler so zu beziffern, dass ich zumindest eine Warnung o.ä. im Development-Modus bekomme?
    Ansonsten würde ich noch vorschlagen, dass man die möglichen Feldnamen noch in die Dokumentation aufnimmt.

    Viele Grüße

    lmm

Diese Angaben basieren auf den Useraktivitäten der letzten 30 Minuten.