Database context vnoreny v cykle

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

Mám otázku, mám

$articles = $this->context->table('articles')->where('published=1');

A dalej:

foreach($articles as $article) {

// Preco mi tento vnoreny context nefunguje spravne?
$nieco = $this->context->table('nejakatabulka')->where('article_id='$article->id);

// Ked namiesto toho robim query, funguje
$nieco = $this->context->query(SELECT * ....)

}

Editoval steelbull (8. 4. 2016 22:27)

David Matějka
Moderator | 6445
+
+1
-

Preco mi tento vnoreny context nefunguje spravne?

co znamena „nefunguje spravne“ ?

jak to vypada presne? takhle ten kod asi nemas, protoze by to byl syntax error

steelbull
Člen | 241
+
0
-

David Matějka napsal(a):

Preco mi tento vnoreny context nefunguje spravne?

co znamena „nefunguje spravne“ ?

jak to vypada presne? takhle ten kod asi nemas, protoze by to byl syntax error

jj, to bol len priklad. Problem je, ze vzdy ked iterujem vo foreach nad vysledkom predchadzajuceho selektu a zaroven v tom istom foreach robim novy selekt, robi to blbosti. V tomto pripade mi vnoreny select vrati len idcka, nie hodnoty vsetkych stlpcov. Neviem preco. :-)

steelbull
Člen | 241
+
0
-

David Matějka napsal(a):

Preco mi tento vnoreny context nefunguje spravne?

co znamena „nefunguje spravne“ ?

jak to vypada presne? takhle ten kod asi nemas, protoze by to byl syntax error

Moze to byt tym, ze pouzivam Nette 2.2?

CZechBoY
Člen | 3608
+
+1
-

Tak si toho selectni vic.

steelbull
Člen | 241
+
0
-

CZechBoY napsal(a):

Tak si toho selectni vic.

No ved ano, ale ako :D V query si selectnem vsetko, ale ked chcem pouzit context->table, selectne mi len id a neviem preco.

steelbull
Člen | 241
+
0
-

CZechBoY napsal(a):

Tak si toho selectni vic.

Idem skusit najnovsiu verziu.

Šaman
Člen | 2666
+
+1
-

Dokumentaci jsi četl?
Jestli chceš jen jeden záznam (kompletní), použij get($id) nad tabulkou, nebo použij fetch() na Selection. Ten where() ti vrátí objekt Selection a ten není určený k tomu, aby se z něho přímo načítaly hodnoty objektů. Ty potřebuješ Row, který právě získáš pomocí $table->get($id), $selection->fetch(), nebo iterací toho $selection.

Editoval Šaman (9. 4. 2016 1:01)

steelbull
Člen | 241
+
0
-

Šaman napsal(a):

Dokumentaci jsi četl?
Jestli chceš jen jeden záznam (kompletní), použij get($id) nad tabulkou, nebo použij fetch() na Selection. Ten where() ti vrátí objekt Selection a ten není určený k tomu, aby se z něho přímo načítaly hodnoty objektů. Ty potřebuješ Row, který právě získáš pomocí $table->get($id), $selection->fetch(), nebo iterací toho $selection.

Jj, ale to nie je problem, ktory riesim :-( Vo vnutri foreach mi $this->context->table(‚haha‘)->fetchAll(); vycita len idcka. Neviem preco.

Mysteria
Člen | 797
+
+2
-

A používáš tam něco jiného než ID? Protože tam totiž funguje ještě cache, která vybírá jenom ty sloupce, které se později používají. Případně jde udělat pro vynucení všech sloupců:

$this->context->table('table')->select('*')->fetchAll();
Unlink
Člen | 298
+
0
-

A nebolo by lepšie použiť related()
https://doc.nette.org/…ase/explorer#…