Klein aber fein. Mit diesem Dreizeiler könnt ihr euch einen zufälligen Datensatz selektieren. Auch wenn zwei Queries ausgeführt werden, sind beide sehr performant. Die erste macht einen richtigen Count und selektiert nicht alle Daten. Die Zweite sorgt mit Offset und Limit für ein kleines Resultset (eine Zeile). Eine Query von Hand zu erstellen würde auch gehen (ORDER BY RAND()), diese würde jedoch nicht die QuerySettings und Einstellungen von Extbase berücksichtigen. Viel Spaß damit.
<?php class Tx_ExtensionKey_Domain_Repository_AbstractRepository extends Tx_Extbase_Persistence_Repository{ /** * Get a random object * @return Tx_Extbase_Persistence_QueryResultInterface|array */ public function findRandom() { $rows = $this->createQuery()->execute()->count(); $row_number = mt_rand(0, max(0, ($rows - 1))); return $this->createQuery()->setOffset($row_number)->setLimit(1)->execute(); } } |