Nette\Database spojení tabulek + agregační dotazy

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

Zdravím,
snažím se toto přepsat a doplnit o práci s další tabulkou(hodnocení článku), ale prozatím neůspěšně.

<?php
public function getArticlesByCategory($category_id)
	{
		return $this->connection->table('article')
						->select('*')
						->where('category_id=?', $category_id);
	}
?>

Prozatím mám složený dotaz,

<?php
public function getArticlesByCategory($category_id)
	{
		return $this->connection->query("
			SELECT
				article.*,
				AVG(articlerating.value) AS rating,
				COUNT(articlerating.id) AS ratings
			FROM articlerating
				RIGHT JOIN article
					ON articlerating.article_id = article.id
			WHERE article.category_id = $category_id
			GROUP BY article.id,
				articlerating.article_id;");
	}
?>

kterým docílím potřebného výběru dat, nicméně dále se používá limit() a count() v paginátoru a skončím s hlášením
Call to undefined method Nette\Database\Statement::count()
respektive pokud přepíšu

<?php
$vpaginator->itemCount = $articles->count();
?>

na

<?php
$vpaginator->itemCount = count($articles);
?>

Call to undefined method Nette\Database\Statement::limit()

Najde se někdo, kdo poradí jak na to?

Editoval hiny (11. 7. 2013 17:17)

hiny
Člen | 35
+
0
-

Tak jsem to vyřešil(metoda pokus omyl funguje :-) ).

public function getArticlesByCategory($category_id)
	{
		return $this->connection->table('article')
				->select('article.*, AVG(articlerating:value) AS rating, COUNT(articlerating:id) AS ratings')
				->where('article.category_id = '.$category_id)
				->group('article.id, articlerating:article_id');
	}

Výsledný dotaz:

SELECT `article`.*, AVG(`articlerating`.`value`) AS `rating`, COUNT(`articlerating`.`id`) AS `ratings`
FROM `article`
LEFT JOIN `articlerating` ON `article`.`id` = `articlerating`.`article_id`
WHERE (`article`.`category_id` = 1)
GROUP BY `article`.`id`, `articlerating`.`article_id`

Editoval hiny (11. 7. 2013 22:02)