Nextras\ORM strata výkonu pri výbere kolekcie cez get()

Čamo
Člen | 786
+
0
-

Zdravím,
dnes som narazil na trochu čudný problém s výkonom. Mal som v kóde takýto riadok:

$answers = $survey->surveyAnswers->get()->orderBy(['this->surveyDefQuestion->id' => 'ASC'])->fetchAll();

No a to pri exporte viac ako 1000 položiek úplne zablokovalo renderovanie exportu …
A prišli sme na to, že ak sa ten riadok napíše takto:

$answers = $survey->surveyAnswers->get()->findBy(['this->survey' => $survey->id])->orderBy(['this->surveyDefQuestion->id' => 'ASC'])->fetchAll();

tak sa problém s rýchlosťou vyrieši. Len nechápem čím to je, lebo tá podmienka na $survey->id by tam nemala byť vôbec potrebná. Napriek tomu je rozdiel rýchlostí rádový. Vie mi niekto zasvätený povedať čím to je?

Díky.

Editoval Čamo (5. 1. 2018 13:50)

David Matějka
Moderator | 6445
+
+1
-

nevytahnul si to $survey v ramci nejake vetsi kolekce? nextras/orm by totiz prednacetlo i dalsi radky v ramci te kolekce. koukni se, jaky dotaz to poklada

Čamo
Člen | 786
+
0
-

No ano dostávam sa ku tomu takto:

$surveys = $surveyDef->surveys->get()
foreach( $surveys as $survey ) ...

Pomohlo by na konci pridať fetchAll()?

EDIT:
Tak pridať fetchAll() nestačí.

Editoval Čamo (5. 1. 2018 14:30)

hrach
Člen | 1834
+
+1
-

Pokud potrebujes optimalizovat pro velka data (aka pamet), tak muzes vypnout prednacitani takto:

$surveys = $surveyDef->surveys->get()
foreach( $surveys as $survey ) {
	$survey->setPreloadContainer(null);
    ...
}
Čamo
Člen | 786
+
0
-

hrach Díky moc.

Editoval Čamo (5. 1. 2018 20:23)