Zum Inhalt springen

Fatal error: Call to a member function getTimestamp() on a non-object

Erstellt am 29. August 2013 · 3 Antworten · letzte Antwort am 12. September 2013

Tags: Extbase, PHP, TYPO3 6.x, Frage

robsonrobi ·

Hallo zusammen,

ich habe gerade meine erste Extension fertiggestellt und es hat auch alles gut funktioniert. Nun gibt es jedoch ein schwerwiegendes Problem und ich bin am verzweifeln. Kurz zum Vorgehen. Ich habe ein Model TourDate, in dem es eine property "date" vom Typ DateTime gibt. Ich nutze das Repository, um mir allen TourDaten-Objekte zu holen:

$tourDates = $this->tourDateRepository->findUpcoming();

Die Objekte werden erfolgreich geholt und ich durchlaufe diese in einer foreach-Schleife, um evtl. Touren herauszufiltern, welche einen bestimmten Timestamp besitzen...
Es funktioniert alles, aber nach manchmal 5, manchmal 3 oder 7 Stunden erscheint folgender Fehler:

Fatal error: Call to a member function getTimestamp() on a non-object

In der DB haben alle Einträge einen date-Eintrag, so dass dieser Wert definitiv exsitieren muss, auch gibt es die Objekte, denn sonst würde die foreach-Schleife nicht durchlaufen werden. Hier der Code der Schleife:

$filteredArray = array();
/** @var TourDate $row */
foreach ($tourDates as $row) {
  $tour = $row->getTour();

  /** @var \DateTime $dateObject */
  $dateObject = $row->getDate();

  if($dateObject->getTimestamp() == $todayTS && $tour->getTourstarted()) {
    continue;
  }

  $filteredArray[] = $row;
}

$tourDates = $filteredArray;
$this->view->assign('tourDates', $tourDates);

Das $dateObject ist manchmal NULL und ich bin am Ende meines Lateins.
Vielleicht kann jemand helfen, kennt das Problem?

Die Controller-Action läuft ungecashed und es gibt auch ein Verwaltungs-Interface, wo auf die DB-Tabellen zugegriffen wird. Ich bin am überlegen, ob es gleichzeitige Zugriffe gibt und es irgendwann crashed, denn wenn man den Cache löscht, geht alles wieder, aber das kann nicht des Rätsels Lösung sein.

Für alle Hinweise bin ich sehr dankbar!

Gruß
Robert

Fatal-Error.png

einpraegsam.​net ·

Das ist eigenartig.

Als Workarround könntest du schon mal den Fatal-Error damit beseitigen:

    if (method_exists($dateObject, 'getTimestamp') && $dateObject->getTimestamp() == $todayTS && $tour->getTourstarted()) {

Das Problem sitzt aber eventuell tiefer

robsonrobi ·

Den Fatal-Error wegbekommen geht auch mit

if($dateObject === NULL) { und tschüss }

.

Ich denke auch, dass der Fehler tiefer sitzt, evtl. wenn eine Buchung erfolgt und gleichzeitig dann die ForEach-Schleife durchlaufen wird. Kann es sein, dass wen man bei einer Buchung einen Wert im Objekt (int reservationSum) ändert und parallel die obige Action ausgeführt wird, sich irgendeine Referenz geändert hat, da sich ja auch das Objekt an sich geändert hat?

Vielen Dank!