Nette\database duplikace dotazu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
rv
Člen | 6
+
0
-

Zjistil jsem, ze mi Nette\database provadi zbytecne dva dotazy na misto jednoho. Je to normalni chovani a pripadne, proc tomu tak je?

PHP kod s dotazem a jeho vyuzitim

$this->record = $this->repository->find($id);
$this["form"]->setDefaults($this->record)

Provedou se tyto dva dotazy

SELECT `id` FROM `table` WHERE (`id` = ?)
SELECT * FROM `table` WHERE (`id` = ?)

Proc se rovnou neprovedl dotaz s hvezdickou a vykona se az pozdeji? Pokud pouziji php kod pro dotaz takto

$this->repository->getTable()->select("*")->find($id);

tak je vse ok, ale je to zbytecne zdlouhave, kdyz uz tady existuje funkce find().

Petr Hudík
Člen | 49
+
0
-

Co přesně je $this->repository resp. $this->repository->find($id)? můžeš sem prosím hodit co tam máš?

hrach
Člen | 1836
+
0
-

Zrejme tam budes mit ->toArray(); pak doporucuji pridat explicitni ->select('*')

rv
Člen | 6
+
0
-

Petr Hudík napsal(a):

Co přesně je $this->repository resp. $this->repository->find($id)? můžeš sem prosím hodit co tam máš?

Omlouvam se, neuvedomil jsem si, ze ta moje trida neni nejaka trida z Nette, ale napsal jsem si ji sam. Cili prikaz $this->repository->find($id) dela tohle:

$this->connection->table("table")->get($id)

kde connection je objekt typu \Nette\Database\Connection

hrach napsal(a):

Zrejme tam budes mit ->toArray(); pak doporucuji pridat explicitni ->select('*')

Tohle tam nikde explicitne nemam, nicmene metoda z formularove tridy setDefaults resp. setValues to predeleva na pole, cili tady bude asi zakopany pes, co?