[gelöst] Verwendung von Objekten/Arrays und Doctrine  Unten

  • Ich habe versucht, so lange wie möglich ohne euch auszukommen, aber ich komme nicht mehr weiter.
    Folgendes unlösbares Problem stellt sich mir: Ich habe mit MOST ein altes Modul nachgebaut und baue gerade die enstprechenden individuellen Funktionen nach.
    Nachdem ich mit dbutil überhaupt keinen Zugriff auf meine Tabellen bekam, habe ich mir gedacht: versuch halt Doctrine. Ich kann damit sogar auf meine Tabellen zugreifen und die Daten in einem Template ausgeben.
    Jetzt versuche ich, einen zusätzlichen Wert in mein Array zu packen (status = ' ')

    Code

    $repository = $this->entityManager->getRepository('Dashboard_Entity_' . ucfirst($objectType));            
                   $plugins = $repository->findAll();
                   foreach ($plugins as $plugin) {
                   $plugin[status] = '';
                   }

    Dies führt zu einer Fehlermeldung

    Code

    Call to undefined method Dashboard_Entity_Plugins::setStatus() in C:\xampp\htdocs\ZK132BLANK\lib\Zikula\EntityAccess.php on line 45


    An dieser Stelle merke ich, dass ich offenbar einiges nicht verstanden habe. Offenbar will Zikula der Entität über setStatus etwas hinzufügen. Ich möchte aber gar nicht in der Tabelle des Moduls etwas verändern sondern nur in meinem daraus erzeugten Array.
    Wie komme ich da weiter?



    Bearbeitet von kreisliga-alemao am 02. Mai 2012 - 16:50.
  • If the entity extends Zikula_Access, then it's simply looking for setter methods named from the keys. So you are trying to set the key 'status' but your entity doesnt have a setter for it. Entities need getters and setter for all the fields in the table.

    Here is an example: https://github.…dminModule.php

    Drak
  • Thanks for your reply.

    'status' is not in the table and never will be. It is generated by an external function and i just want to add plugin.status to the resulting array. The resulting array is generated by getRepository.
    Maybe entitymanager->getRepository isn't the correct Replacement for DBUtil::selectObjectArray. That's whati am trying to find out.
  • Doctrine returns back entities. In this case you probably want to convert to a array (assuming the entity extends from Zikula_Access).

    $array = $plugin->toArray();
    $array['status'] = ...

    Regards,

    Drak
  • Thanks again. I've tried toArray and it wasn't easy for me (I really don't understand much of that programming stuff), but i found two solutions that are suitable for me.
    Here they are: (Excerpt from Controller/admin.php)

    Code

    // Variante 1, die Entität aus der DB zu holen. Resultat ist ein nicht veränderbares Objekt.
                    $repository = $this->entityManager->getRepository('Dashboard_Entity_' . ucfirst($objectType));            
                    // Variante 2, die Entität aus der DB zu holen. Resultat ist ein veränderbares Array, welches jedoch eine andere Struktur hat als das Array aus Variante 3.
                    // Außerdem muss ZWINGEND eine Datei Dashboard/lib/Dasboard/Model/Plugins.php vorhanden sein, die das Model beschreibt.
                    $aplugins = Doctrine_Core::getTable('Dashboard_Model_Plugins')->findAll()->toArray();
                    foreach ($aplugins as $key=>&$aplugin) {
                                $aplugin[status] = '1';                    
                    }  
                    // Variante 3, die Entität aus der Datenbank zu holen. Resultat ist ein veränderbares Array. Beschreibung des Models in separater Datei nicht notwendig. Struktur anders als bei Variante 2.
                    $dql = "SELECT id FROM Dashboard_Entity_Plugins id";
                    $em = ServiceUtil::getService('doctrine.entitymanager');
                    $query = $em->createQuery($dql);
                    $plugins = $query->getArrayResult(); // hydrate result to array
                    foreach ($plugins as $key=>&$plugin) {
                                $plugin[status] = '1';                    
                    }


    i would be glad if someone has hints how to make it better/easier.



    Bearbeitet von kreisliga-alemao am 03. Mai 2012 - 10:46.
  • 0 Benutzer

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