Nette databaze – míchání dotazů v modelu

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

Zdravim,

mám dotaz, pokud použiju v presenteru následující kód :

$values[] = array('id' => 1);
$values[] = array('id' => 2);
foreach($values as $value){
  $this->context->createTable()->where($value)->fetch();
}

nebude s tím problém, vyvoří se 2 instance a pro každou nový dotaz. Pokud ale budu chtít udělat to samé v modelu :

$values[] = array('id' => 1);
$values[] = array('id' => 2);
foreach($values as $value){
  $this->where($value)->fetch();
}

nastane problém, protože při druhém dotazu mi zůstane where z prvního (v rámci jedné instance). Jak docílím toho, abych dostal stejný výsledek jako z presenteru?

mkoubik
Člen | 728
+
0
-

Čemu říkáš „v modelu“? Ukaž třídu ve které to používáš, mám podezření že dědí Nette\Database\Table\Selection.

mildhouse
Člen | 27
+
0
-

Dědí od Nette\Database\Table\Selection

use Nette\Database\Connection,
    Nette\Database\Table\Selection;


class Users extends Selection{

  public function __construct(Connection $connection){
    parent::__construct('user', $connection);
  }

}
enumag
Člen | 2118
+
0
-

Od Selection v žádném případě nic dědit nemáš! Použij tohle.

mildhouse
Člen | 27
+
0
-

@enumag : Aha, ještě nedávno to bylo v quickstartu popsané tak, jak jsem psal. Teď koukám, že už to tam není a je tam něco podobného, jako jsi poslal. Takže v tom mam trochu chaos. Každopádně díky za radu.

enumag
Člen | 2118
+
0
-

@mildhouse: Jasný, ty injecty jsou docela novinka. Ale stejně tam ani předtím určitě nebylo nic o tom že bys měl dědit Selection. ;-)

mildhouse
Člen | 27
+
0
-

@enumag : si piš, že bylo, sám bych si to nevymyslel :-)

enumag
Člen | 2118
+
0
-

@mildhouse: Jestli to tam opravdu bylo a jestli někdy zjistim, kterej chytrák to tam napsal, tak ať si mne nepřeje! :-D

redhead
Člen | 1313
+
0
-

Opravdu to tam bylo, pak se tady taky roztrh pytel s podobnejma dotazama. Katastrofa co se, myslím, bude spravovat ještě dlouho :)

mkoubik
Člen | 728
+
0
-

Opravdu to tam bylo a napáchalo to hodně škod na začátečnících. Normálně si do té třídy předej Connection a nad ním volej $this->connection->table()->... pro každý dotaz zvlášť.

enumag
Člen | 2118
+
0
-

Ouuu. :-( Tak to je hodně zlý. Koukám, že to tam zanesl Panda – ten to pak asi pěkně schytal. Doufejme, že se nic podobného nebude opakovat.

mildhouse
Člen | 27
+
0
-

Díky za rady, jdu předělávat :-)