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.