Více dotazů na nette DB – trochu teorie chci to pochopit
- sejmor
- Člen | 63
Tak mám zase jeden blbej teoretickej dotaz. Mám třídu definovanou jako službu a používám v ní databází:
<?php
public function __construct(Nette\Database\Connection $database)
{
$this->database = $database;
}
?>
Jak jsem se dočetl (a hlavně i přesvědčil sám) tak jakmile tuto službu zavolám tak se vytvoří instance a zůstává jenom jedna. Jestliže potom tedy v dalších metodách zavolám např:
<?php
$prvnidotaz=$this->databaze->table('tabulka')->where();
?>
dostanu nějaký výsledek do proměnné $prvnidotaz. Když teď udělám:
<?php
$druhydotaz=$this->databaze->table('jinatabulka')->where();
?>
Tak jestli tomu dobře rozumím změní se mi i proměnná $prvnidotaz. To vcelku chápu. Zajímalo by mě ale, a nekamenujte mě prosím za stupidní dotaz, když udělám např.:
<?php
$pocet=$this->databaze->table('tabulka')->where()->count();
$druhydotaz=$this->databaze->table('jinatabulka')->where();
?>
Bude i po druhém dotazu proměnná $pocet obsahovat pořád počet hodnot
z prvního dotazu, nebo se mi tam zase přimíchne ten druhej?
Co vrátí ten první řádek hodnotu nebo referenci ?
Chci v tom mít jasno. V podstatě to samé je když potřebuju vycucnou data z řádku přes fetch(). Vytáhnu je a naplním např. do pole se kterým dál pracuju v dalším dotazu. Můžu ? Nebo mi ten další dotaz ty data zase přepíše.
Sorry za dotaz asi na úplnej princip. To co zrovna řeším mi funguje, ale chci v tom mít jasno a chápat a né jenom slepě kopčit kód :-)
- David Matějka
- Moderator | 6445
metoda table('nazev_tabulky')
v \Nette\Database\Connection
VZDYCKY vytvori novou instanci \Nette\Database\Table\Selection
jediny, ceho zustava jedna instance, je Nette\Database\Connection
Editoval matej21 (8. 11. 2012 0:45)
- sejmor
- Člen | 63
Jasně ..... začíná mi to docházet
Takže ty dva dotazy se mi nepomíchaj. Narazil jsem na to nedávno ale měl jsem to asi zprasené takto:
<?php
$tabulka=$this->databaze->table('tabulka');
$pocetkusu=$tabulka->where('nejakejwhere')->count();
$dotaz=$tabulka->where('jinejwhere');
?>
Ovlivní mi ten třetí řádek proměnou $pocetkusu ?
- David Matějka
- Moderator | 6445
neovlivni, v pocet kusu zustane to cislo.. ale nezapomen, ze do $tabulka sis ulozil instanci selection a pracujes tedy nad jednou instanci selection – prvni dotaz se provede s tim nejakejwhere a druhej s nejakejwhere AND jinejwhere…
ale snaz se vyhnout znovu pouzivani stejny instance selection.. s
count
je to ok, ale jindy vetsinou ne :) radsi si vzdycky rekni
Nette\Connection\Database o novou instanci selection (respektive by sis mel
napsat nejakej model a vyhnout se primemu pristupu k Connection)