Leider bietet Extbase bis heute (6.2 LTS) keine Funktionen zum Auslesen des vorherigen bzw. nachfolgenden Datensatzes. Die folgenden Repository Methoden findPrevious() und findNext() liefern jeweils den gewünschten Datensatz ausgehend vom übergebenen Objekt. In diesem Beispiel erfolgt  der Vergleich anhand einer DateTime Eigenschaft ("DatePublished"). Es wird also der nächst jüngere bzw. ältere Datensatz ausgelesen.

Extbase Repository - findPrevious() - findNext()

/*
 * findPrevious
 *
 * @param \Vendor\Ext\Domain\Model\Post $post
 *
 * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
 */
public function findPrevious(\Vendor\Ext\Domain\Model\Post $post) {
	$query = $this->createQuery();
	$query->setOrderings(array('datePublished' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING));
	$query->matching($query->greaterThan('datePublished', $post->getDatePublished()->format('Y-m-d H:i:s')));
	$previousPost = $query->execute()->getFirst();
	return $previousPost;
}

/*
 * findNext
 *
 * @param \Vendor\Ext\Domain\Model\Post $post
 *
 * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
 */
public function findNext(\Vendor\Ext\Domain\Model\Post $post) {
	$query = $this->createQuery();
	$query->setOrderings(array('datePublished' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING));
	$query->matching($query->lessThan('datePublished', $post->getDatePublished()->format('Y-m-d H:i:s')));
	$nextPost = $query->execute()->getFirst();
	return $nextPost;
}




Kommentare