Zum Inhalt springen

Ergebnismenge vom Repository

Erstellt am 25. Februar 2011 · Noch keine Antworten

Tags: Datenbank, Frage

sunixzs ·

Hallo zusammen,

Folgende Sachlage:
Ich habe einen Controller "EntryController". Dort eine Action "listAction". In dieser hole ich Daten aus dem Repository:

public function listAction() {
		$categories = ($this->conf['categories']) ? t3lib_div::trimExplode(",", $this->conf['categories'], true) : Array();
		
		$entries = $this->entryRepository->findRange(
			$this->conf['sorting']['order'], // $order
			$this->conf['sorting']['direction'], // $direction
			$this->conf['period'], // $period
			$categories, // $categories
			$this->conf['archiveAutoTime'], // $archiveAutoTime
			0, // $ts_start
			0 // $ts_end
			);
		
		echo count($entries);
		//print_r($entries->toArray());
		//print_r(get_class_methods(get_class($entries)));
		
		if(count($entries) < 1){
			// Hier will ich darauf reagieren, wenn keine Daten gefunden wurden, aber es sind immer "alle" da (5).
		}
		
		$this->view->assignMultiple(Array(
			'entries' => $entries,
			'conf' => $this->conf,
			));
	}

In der Datenbank habe ich insgesamt 5 Einträge.

Nun das Dubiose, was ich nicht verstehe:
Wenn ich meine Repository-Anfrage nicht weiter einschränke, liefert mir das "echo count($entries);" eine 5 (so soll es sein).
Wenn ich meine Repository-Anfrage weiter einschränke (z. B. durch eine Kategorie), liefert mir das "echo count($entries);" immer noch eine 5 (wieso das denn?).

Hier mein vereinfachter View:

<f:layout name="Default" />

<f:section name="main">
	<f:flashMessages />
	<f:count subject='{entries}' /><!-- count liefert immer 5! -->
	<f:if condition="<f:count subject='{entries}' />">
		<f:for each="{entries}" as="entry">
			<h1>{entry.title}</h1>
		</f:for>
		<f:else>
			Keine Daten gefunden. <!-- wird nie ausgeführt, auch wenn nichts auszugeben ist -->
		</f:else>
	</f:if>
</f:section>

Die for-Schleife iteriert korrekt über die Anzahl an Einträgen, die ich erwarte. Also bei "alles Anzeigen": 5 und bei Reduzierung auf eine Kategorie weniger als 5.

Kann es daran liegen, dass ich ein SQL-Statement absetzen musste im Query Object Model, weil es MM-Abfragen nicht gibt?

$query = $this->createQuery();
$query->statement($sql);
Return $query->execute();

Irgendwo habe ich mal gelesen, dass das Repository die Daten erst liefert, wenn fluid diese braucht. Wird dann erst mein SQL-Statement ausgeführt und vorher (im Controller) einfach alle Daten geholt?

Leider kann ich im Controller und im View nicht abfragen, wie viele Datensätze ich habe. Vllt. übersehe ich auch etwas - ist schon spät/früh.

Vielen Dank für Hinweise.

LG sun

Typo3 4.5.0, PHP 5.3, openSUSE 11.3

Edith sagt:
Das Repository liefert ja ein Object(), welches ich mit count() versuche zu zählen. Vllt. liegt da der Hund begraben.

Wenn ich erst:

$entries->toArray();

ausführe, dann sind die Entries zu zählen.