[Frage] Repository: Query nach cild-object funktioniert nicht. TYPO3-Version: 8.7.10

  • 0 x
    15 Beiträge
    0 Hilfreiche Beiträge
    25. 04. 2018, 10:03

    Hallo zusammen,

    ich habe das Problem, dass ich eine Fehlermeldung bekomme, wenn ich im Repository nach einem Kind-Objekt suche.

    Ich habe schon alles mögliche ausprobiert und als Fehler ausgeschlossen, mein code entspricht genau dieser Passage in der Dokumentation:
    https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/3-implement-individual-database-queries.html#implicit-relation-cardinality-handling

    Auf die Kardinalität kommt es bei mir gar nicht an, die Zeile

    $query->matching($query->greaterThan('event.date', $GLOBALS['EXEC_TIME']));

    führt immer zur Fehlermeldung:

    Oops, an error occurred!
    Could not determine the child object type.

    Wenn ich das SQL-Statement selbst schreibe, als

    $query->statement("mein SQL-Befehl");

    funktioniert alles bestens, daran liegts also nicht. Ich würde es einfach so machen, aber dann kann ich die Resultate nicht mehr sortieren. Nach dieser Zeile zeigt sowas wie

    $query->setOrderings(array('event.date' => QueryInterface::ORDER_DESCENDING));
    $query->setLimit(2);

    keinerlei Wirkung mehr. Aber auch keine Fehlermeldung wie oben mehr. Auch dafür habe ich keine Erklärung.

    Weiß irgend jemand Rat?


  • 1
  • freeatweb freeatweb
    Sternenflotten-Admiral
    0 x
    219 Beiträge
    4 Hilfreiche Beiträge
    25. 04. 2018, 13:37

    Hallo,

    sieht eher nach einem Fehler im Domain-Model aus.
    Wie ist hier das Child-Object eingebunden?

    Laut Fehlermeldung dürfte hier der falsche Object Type verwendet werden.

    Lg

  • 0 x
    15 Beiträge
    0 Hilfreiche Beiträge
    25. 04. 2018, 15:31

    Im Domain Modell des Elternteils ist das Child-Object eingebunden mit

    use Gidouille\MyExtension\Domain\Model\Event;

    ebenso im Repository. Aber das hilft nichts. Oder die Art der Einbindung ist falsch. Meine Vermutungen gehen genau dahin. Wo und wie mache ich dem Elternteil das Kind bekannt? In der oben erwähnten Dokumentation war diese Einbindung wohl noch nicht nötig.

    Die Struktur meiner Daten ist ganz ähnlich wie bei Dennis mit seinen Studiengängen: https://www.typo3.net/forum/thematik/zeige/thema/126694/

    Es gibt Programmpunkte mit einer MN-Relation zu Events. Im TCA der Programmpunkte werden die Events, an denen der Programmpunkt stattfindet, eingetragen. Im TCA der Events fehlt das Feld für Programmpunkte.
    Genau wie bei Dennis. Zitat: "Im Studiengang selbst soll man die Person aber nicht wählen können/müssen - das wäre doppelte arbeit." Genau. Und nicht nur das, es wäre auch eine schlimme Fehlerquelle!

    Die Query soll jetzt alle Programmpunkte finden, die (mindestens)ein Event haben, dessen Datum in der Zukunft liegt.

    lg

  • pstranghoener pstrangho...
    Die Macht
    0 x
    393 Beiträge
    21 Hilfreiche Beiträge
    08. 05. 2018, 07:30

    Hey gidouille,
    hast du schon eine Lösung? Sonst würde ich mir das Ganze nochmal genauer anschauen.

    Grüße
    Philipp

  • 0 x
    15 Beiträge
    0 Hilfreiche Beiträge
    14. 05. 2018, 22:29

    Hallo Phillipp,
    nein, leider immer noch nicht. Ich bin nach wie vor ratlos und für jeden Lösungsvorschlag dankbar!

    Hier ist mein code:

    class ProgrammRepository extends \TYPO3\CMS\Extbase\Persistence\Repository

    {

    protected $defaultOrderings = array(
    );

    /**
    *
    */
    public function findByEvent()
    {
    $query = $this->createQuery();
    // $query->matching($query->greaterThan('event.date', $GLOBALS['EXEC_TIME'])); // Diese Zeile erzeugt eine Fehlermeldung

    // mit direktem SQL-Statement funktioniert es einwandfrei:
    $query->statement("SELECT * FROM tx_gidouilleevent_domain_model_programm
    WHERE UID IN
    (SELECT DISTINCT uid_local FROM tx_gidouilleevent_programm_event_mm
    INNER JOIN tx_gidouilleevent_domain_model_event
    ON (tx_gidouilleevent_domain_model_event.uid = tx_gidouilleevent_programm_event_mm.uid_foreign)
    WHERE tx_gidouilleevent_domain_model_event.date >= ".$GLOBALS['EXEC_TIME'].")");

    // aber dann zeigen orderings und limits keine Wirkung mehr:
    $query->setOrderings(array('event.date' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING));
    $query->setLimit(2);
    return $query->execute();
    }

    }

    Grüße
    gidouille

  • 1