Jak z výsledku SQL dotazu dostat string

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

Mám úplně jednoduchý problém, ale jelikož jsem začátečník, absolutně nevím jak na to.

Vytáhnu si z databáze kapely. Každá kapela pak má v tabulce band_post seznam postů které má. A v tabulce post pak jsou jména těchto postů. A jediné, co chci udělat je dostat ty jména postů (patřících k dané kapele) do jednoho stringu, abych si ho mohl dát do šablony. Ani po několikahodinovém prohledávání dokumentací a fór jsem na to nepřišel :-( Tak prosím o radu jak na to. Ani netuším jestli na to jdu vůbec dobře. Níže je nástřel mého kódu, který ale nefunguje a nedokážu to dát dohromady.

$bands= $this->database->table('kapely');

$posty = array();
// tady se snazim udelat string z postů, ktere kapela ma
foreach($bands as $band)
{
    // zde by jako vysledek mely byt radky se jmeny postu?
    $bandPosts = $this->database->query('SELECT post.name FROM band_post '
    . 'INNER JOIN post ON band_post.post_id=post.id WHERE band_id=?',$band->id)->fetchAll();

					// tady snad jeste nejak projit $bandPosts v cyklu
        array_push($posty,$bandPosts->name);
}

$this->template->posts = implode(" ",$posty);

Díky za rady

Mysteria
Člen | 797
+
+3
-

Šel bych cestou NDBT, zhruba takto:

$this->template->band = $this->database->table('band')->where('id', $id);
{foreach $band->related('band_post') as $bandPost}
	{$bandPost->post->name}{sep},{/sep}
{foreach}

Viz podobný příklad zde: https://doc.nette.org/…ase/explorer#…

Editoval Mysteria (3. 10. 2014 21:13)

icanjan
Člen | 30
+
0
-

Díky moc, funguje to. Dokumentaci jsem četl a chtěl to podle ní udělat, ale protože mi to nefungovalo uchýlil jsem se k SQL dotazu.
Nicméně jsem tak nějak doufal, že se v odpovědi na můj dotaz dozvím i jak se pracuje s poly. Je na to někde nějaký dobrý tutoriál?
Třeba když mám Row (ne IRow) jak z toho vycucnout data do array. Jak udělat a associativního pole (takovýto s těma šipkama =>) jen obyčejný pole, aby mě pak na něm fungovala ta funkce implode a tak…
Díky

David Matějka
Moderator | 6445
+
+2
-

muzes pouzit metodu fetchPairs na selection, resp. na ResultSetu (ten leze z citeheo query):

$articles = $this->database->table('articles');
$articles->fetchPairs('id', 'title');
// vytvori asociativni pole s pary id => title

$articles->fetchPairs('id');
// vytvori asociativni pole s pary id => radek

$articles->fetchPairs(NULL, 'title');
// vytvori pole s hodnotami "title" (klice jsou cislovane od nuly)
icanjan
Člen | 30
+
0
-

Tohle jsem tak nějak zkoušel, ale taky jsem z toho nikdy nevytáhl co bylo potřeba a nebo jsem to použil špatně. S tvýma komentářama to třeba bude jasnější. Díky