Cannot read an undeclared column ‚title‘
- mi85
- Člen | 41
Čau, snažím se vypsat data ale dostávám error
Cannot read an undeclared column 'title'.
Kód:
$posts = $this->database->table('posts')
->order('created_at DESC');
$postsData = [];
foreach ($posts as $post) {
$postsDataItem = new \stdClass();
$postsDataItem->post = $post;
$comment = $this->database->table('comments')
->where('post_id', $post->id)
->count();
$postsDataItem->countComments = $comment;
$postsData[]= $postsDataItem;
}
$this->template->postsData = $postsData;
A v latte volám
{foreach $postsData as $postData}
{$postData->post->title}
{/foreach}
Děkuji za rady.
Editoval mi85 (14. 12. 2016 18:34)
- mi85
- Člen | 41
Dump
array (1)
0 => stdClass #7482
post => Nette\Database\Table\ActiveRow #cb56
table private => Nette\Database\Table\Selection #01d0 { ... }
data private => array (1) [ ... ]
dataRefreshed private => FALSE
countComments => 0
Tzn. že se mi to nezapisuje do array pokud se nepletu,kde by mohla být chyba?Když si dumpuju data před vložením do array fungují.Díky
Když si dumpuju ($postDataItem->post) tak se mi vrací
Nette\Database\Table\ActiveRow #c710
table private => Nette\Database\Table\Selection #cda7
data private => array (1)
id => 7
dataRefreshed private => FALSE
Editoval mi85 (14. 12. 2016 18:43)
- jarda256
- Člen | 130
Proč vlastně dáváš stdClass? Tohle by nešlo? Nejsem žádný expert co se týká nette, tak to prosím ber s rezervou.
$posts = $this->database->table('posts')
->order('created_at DESC');
$postsData = [];
foreach ($posts as $post) {
$comment = $this->database->table('comments')
->where('post_id', $post->id)
->count();
$post->countComments = $comment;
}
$this->template->postsData = $posts;
{foreach $postsData as $post}
{$post->title}
{/foreach}
Editoval jarda256 (14. 12. 2016 18:53)
- Mysteria
- Člen | 797
Nefunguje ti to proto, že Nette používá cache a vybírá z databáze jenom ty sloupce, které se použijí. Ty nepoužiješ žádné, takže se vybere jenom IDčko a proto máš pak v šabloně jenom IDčka. Takže buď doplníš dotaz o ->select(‚sloupce, které, chceš, vybrat‘) nebo to nepřeváděj na pole stdClass, ale předej si do šablony rovnou $posts a pracuj s tím normálně:
{foreach $posts as $post}
{$post->title}
{$post->related('comments')->count('*')}
{/foreach}
Plus ještě technická, místo ->count() používej radši ->count(' * ') , protože to první funguje tak, že vybere všechny data z databáze a počítá záznamy v PHP, kdežto to druhé, udělá klasický COUNT(*) v databázi.