nefunčkní druhý foreach při dotazu query
- sejmor
- Člen | 63
Zdravím, potřeboval bych osvětlit takovou blbůstku. Můžu jí sice obejít, ale radši problém pochopím :-)
Mám ukázkový presenter, kterej davá do šablony do dvou proměnných ta samá data získaná různým způsobem (druhý způsob je klasicky přes metodu query):
class PokusPresenter extends BasePresenter
{
public function renderDefault()
{
$this->template->nettecreate=$this->context->createArticle();
$this->template->nettegetquery=$this->context->dotaz->get_query("select * from article");
}
}
V Šabloně potřebuju projet přes foreach ta samá data 2x – tedy:
{block content}
<h2>Nette DB create prvni pruchod</h2>
{foreach $nettecreate as $item}
{$item->nadpis}<br>
{/foreach}
<h2>Nette DB create druhy pruchod</h2>
{foreach $nettecreate as $item}
{$item->nadpis}<br>
{/foreach}
<br><br>
<h2>Nette DB query prvni pruchod</h2>
{foreach $nettegetquery as $item}
{$item->nadpis}<br>
{/foreach}
<h2>Nette DB query druhy pruchod</h2>
{foreach $nettegetquery as $item}
{$item->nadpis}<br>
{/foreach}
{/block}
Jde mi o to, že první způsob ($nettecreate) je bez problémů. Foreach se spustí 2× a data zobrazí tedy také 2×. Druhý způsob ($nettegetquery) mi zobrazí pouze jeden průchod a druhý foreach již nezobrazí nic. Kde je zakopán pes ?
- jtousek
- Člen | 951
Iterátor proměnné $nettegetquery zřejmě nemá funkční metodu rewind. Pokud se jedná o NoRewindIterator tak je to úplně jasné.
Co vrací ta funkce metoda get_query()?
Editoval jtousek (14. 8. 2012 19:29)
- sejmor
- Člen | 63
když proměnou $nettegetquery dumpnu v šabloně tak vrací:
Nette\Database\Statement(4) ▼ {
connection private => Nette\Database\Connection(6) ▼ {
dsn private => "mysql:host=localhost;dbname=czechaudiotour" (42)
driver private => Nette\Database\Drivers\MySqlDriver(1) ▼ {
connection private => Nette\Database\Connection(6) { *RECURSION* }
}
preprocessor private => Nette\Database\SqlPreprocessor(6) ▼ {
connection private => Nette\Database\Connection(6) { *RECURSION* }
driver private => Nette\Database\Drivers\MySqlDriver(1) { ... }
params private => array(1) [ ... ]
remaining private => array(0)
counter private => 1
arrayMode private => "assoc" (5)
}
databaseReflection private => Nette\Database\Reflection\DiscoveredReflection(4) ▼ {
cache protected => Nette\Caching\Cache(4) { ... }
cacheStorage protected => Nette\Caching\Storages\FileStorage(4) { ... }
connection protected => Nette\Database\Connection(6) { *RECURSION* }
structure protected => array(3) { ... }
}
cache private => Nette\Caching\Cache(4) ▼ {
storage private => Nette\Caching\Storages\FileStorage(4) { ... }
namespace private => "Nette.Database.b7f010e4461b1effee13cbd35f694ed6\x00" (48)
key private => NULL
data private => NULL
}
onQuery => array(1) ▼ [
0 => array(2) [ ... ]
]
}
time private => 0.0006411075592041
types private => NULL
queryString => "select * from article" (21)
}
Nebo jak jí mám co nejjednodušejc vytáhnout ?
- ViPEr*CZ*
- Člen | 817
Zkuste si to ještě fetchnout :-)
https://api.nette.org/…atement.html
Editoval ViPEr*CZ* (14. 8. 2012 20:07)
- sejmor
- Člen | 63
Když ten dotaz fetchnu … tedy:
$this->template->nettegetquery=$this->context->dotaz->get_query("select * from article")->fetch();
a pak dám v šabloně:
{dump $nettegetquery}
Tak to mi vrátí normálně první záznam z DB:
Nette\Database\Row(8) ▼ {
id => 1
nadpis => "CZECH .... " (16)
text => "<p>CZECH - tedy ... " (229)
url => "" (16)
title => "Czech ... " (16)
description => "Czech ... " (16)
lang => "cs" (2)
publikovano => "1"
}
- sejmor
- Člen | 63
Ještě jsem si všimnl, že když tu nefetchnutou promenou dumpnu po prvním průchodu foreach tak tam je navíc types private:
Nette\Database\Statement(4) ▼ {
connection private => Nette\Database\Connection(6) ▼ {
dsn private => "mysql:host=localhost;dbname=czechaudiotour" (42)
driver private => Nette\Database\Drivers\MySqlDriver(1) ▼ {
connection private => Nette\Database\Connection(6) { *RECURSION* }
}
preprocessor private => Nette\Database\SqlPreprocessor(6) ▼ {
connection private => Nette\Database\Connection(6) { *RECURSION* }
driver private => Nette\Database\Drivers\MySqlDriver(1) { ... }
params private => array(1) [ ... ]
remaining private => array(0)
counter private => 1
arrayMode private => "assoc" (5)
}
databaseReflection private => Nette\Database\Reflection\DiscoveredReflection(4) ▼ {
cache protected => Nette\Caching\Cache(4) { ... }
cacheStorage protected => Nette\Caching\Storages\FileStorage(4) { ... }
connection protected => Nette\Database\Connection(6) { *RECURSION* }
structure protected => array(3) { ... }
}
cache private => Nette\Caching\Cache(4) ▼ {
storage private => Nette\Caching\Storages\FileStorage(4) { ... }
namespace private => "Nette.Database.b7f010e4461b1effee13cbd35f694ed6\x00" (48)
key private => NULL
data private => NULL
}
onQuery => array(1) ▼ [
0 => array(2) [ ... ]
]
}
time private => 0.00061798095703125
types private => array(7) ▼ {
id => "int" (3)
nadpis => "string" (6)
text => "bin" (3)
url => "bin" (3)
title => "string" (6)
description => "string" (6)
lang => "string" (6)
}
queryString => "select * from article" (21)
}