[Frage] Abfrage mit Hilfe von Flexforms-Variable bei m-n-Beziehungen

  • z0pfel z0pfel
    T3PO
    0 x
    23 Beiträge
    0 Hilfreiche Beiträge
    23. 10. 2014, 17:27

    Liebe Community,

    ich möchte eine Abfrage ausführen, die durch Flexforms gesteuert wird. Meint: Ich gebe im Plugin eine Variable für einen "Sektor" an (z.B. "Gesundheit") und möchte nun alle Projekte ausgegeben bekommen, die dem Sektor "Gesundheit" zugeordnet sind. Die Module "Sektor" und "Projekt" sind über eine m-n-Beziehung miteinander verknüpft.

    Folgende Abfrage liefert mir eine leere Liste:

    1. /**
    2. * action sectorList
    3. *
    4. * @param \Vendor\Database\Domain\Model\Sector $sector
    5. * @return void
    6. */
    7. public function sectorListAction() {
    8. $sector = $this->sectorRepository->findOneByName($this->settings['sector']);
    9.  
    10. $projects = $this->projectRepository->findByProjectSectors($sector);
    11. $this->view->assign('projects', $projects);
    12. }

    Es wäre wirklich toll, wenn mir jemand verraten würde, wo der Fehler in diesem Controller liegt.

    Viele Grüße
    Dennis


  • 1
  • OnkelEdi OnkelEdi
    Jedi-Ritter
    0 x
    129 Beiträge
    2 Hilfreiche Beiträge
    24. 10. 2014, 13:12

    Hallo hOpfel,

    Du hast im Flexform irgendein Feld(Liste, Auswahl, was auch immer) wo du deinen Sektor angibst?
    Warum dann nicht einfach

    $sector = $this->settings['sector'];

    Soweit in deinem Flexform hier nur ein Wert gespeichert ist sollte das doch reichen um diesen zu bekommen oder? Wenn da mehrere drin sind muss das ganze natürlich anders laufen...
    Was sagt eigentlich der debug zu $sector ?

    Gruß
    Eduard


  • 0 x
    24. 10. 2014, 14:00

    Zunächst einmal die Frage, warum du in der Annotation $sector als Parameter angibst, deine Action aber gar keine Parameter hat/bekommt?

    Zu deinem eigentlichen Problem: Ich vermute, dass der Wert aus deiner Flexform nicht der Wert ist, den du für die Funktion findOneByName($this->settings['sector']) brauchst. Gib dir mal, wie OnkelEdi schon sagt, den debug zu $sector bzw. $this->settings['sector'] aus. Das dürfte vermutlich helfen.

  • z0pfel z0pfel
    T3PO
    0 x
    23 Beiträge
    0 Hilfreiche Beiträge
    24. 10. 2014, 14:54

    Vielen Dank ihr beiden für eure Hilfestellung für mein Problem.

    Die Annotation ist noch drin von einigem Hin und Her um mein Problem zu lösen. Werde ich entfernen.

    Ich rufe ja mit Hilfe von $this->settings['sector'] den Wert der Variable "sector" ab. Meine Idee ist dann, dass ich die Variable (es ist der Name des Sektors) an das Repository von Sector übergebe, um dann den eigentlichen Sektor (das Objekt) abzufragen. Dieses Objekt möchte ich dann zum Filtern der Abfrage nach den dazugehörigen Projekten verwenden.

    Wäre der Sektor bei einem Projekt einfach als Wert angegeben (z.B. "Gesundheit"), dann wäre das wohl ohne Umwege machbar und man könnte den Wert aus Flexforms direkt zum Filtern verwenden.

    In diesem Fall ist es aber eine m-n-Relation, in der die Sektoren in einem anderen Model liegen und selbst wieder mehrere Ausprägungen etc. enthalten.

    Bin ich hier komplett auf dem Holzweg?


  • 0 x
    24. 10. 2014, 18:14

    Nein bist du nicht. Das Problem scheint nur der Wert in $this->settings['sector'] zu sein. Ich bin mir nicht sicher, aber ich glaube es ist möglich, dass du in der FlexForm direkt deinen Sektor auswählen kannst ( und somit in diesem Wert dein Objekt von dem Sektor steht, und nicht irgend ein String ).

    Du verweigerst uns aber auch die Information, was dein debug a) zu $this->settings['sector'] ausgibt und b) was er bei $sector ( $sector = $this->sectorRepository->findOneByName($this->settings['sector']); ) ausgibt.

    Da wird der Hund vermutlich begraben liegen.

    Es ist auch nicht sonderlich elegant, in der Flexform in ein Inputfeld "Gesundheit" zu schreiben.
    Wenn der Sektor irgendwann den Namen ändert, musst du es hier erneut ändern, gibt Probleme bei Mehrsprachigkeit, etc.

    Ich denke du solltest da erstmal Schritt für Schritt machen.

    Was steht im debug zu $this->settings['sector'] ?

    Was steht im debug zu $this->sectorRepository->findOneByName($this->settings['sector']) ?

    Eventuell auch findByName() und nicht findOneByName() ?

    In [url]http://blog.typoplanet.de/2010/01/27/the-repository-and-query-object-of-extbase/[/url] diesem Blog steht auch, dass man die Magic Methods nicht auf Aggregate anwenden kann, allerdings ist der Eintrag auch von 2010, ob das Problem aktuell noch besteht, weiß ich aber nicht, aber vielleicht hilft es dir.

  • 1