Nette\Database query a ActiveRow

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

Jde nějak udělat vlastní SQL dotaz a odeslat pomocí ->query() tak aby byl výsledek activeRow ?

public function getArchivePosts($year, $month = null, $limit, $offset, $needkey = "No")
    {

        $sql = "SELECT *
		FROM posts
		WHERE DATE_FORMAT(date, '%Y') = $year ";
        if (isset($month)) {
            $sql .= "AND DATE_FORMAT(date, '%m') = $month ";
        }
        $sql .= "AND needkey = '$needkey' ";
        $sql .= "ORDER BY date DESC
		LIMIT $offset, $limit";

        $result = $this->database->query($sql);
        return $result;
    }

z výsledku pak potřebuji v latte zavola $post->related(…)

Editoval ondraondra81 (21. 5. 2014 11:31)

Oli
Člen | 1215
+
0
-

Podle mě nedá. Každopádně ten tvůj kod je docela blbej v tom, že všechny proměnný dáváš rovnou do toho dotazu. Měli by být jako parametr.

Nicméně neměl by být problém přepsat to do NDBT. Něco jako

public function getArchivePosts($year, $month = null, $limit, $offset, $needkey = "No"){
	$temp = $context->table('posts')->where("DATE_FORMAT(date, '%Y')", $year)->where('needkey', $needkey)
	if (isset($month)) {
		$temp = $temp->where("DATE_FORMAT(date, '%m')", $month);
	}
	return $temp->order('date DESC')->limit($offset, $limit);
}
ondraondra81
Člen | 82
+
0
-

No v tom je trochu problém.

když udělám

return $posts = $this->database->table('posts')
            ->where("DATE_FORMAT(date, '%Y') = ?", $year)
            ->where("DATE_FORMAT(date, '%m') = ?", $month)
            ->where("needkey = ?", $needkey)
            ->order('date DESC')
            ->limit($limit, $offset);
        }

Tak z toho vznikne

SELECT *
FROM `posts`
WHERE (DATE_FORMAT(`date`, '%Y') = '2014') AND (DATE_FORMAT(`date`, '%`m`') = '05') AND (`needkey` =
'No')
ORDER BY `date` DESC
LIMIT 4

tedy escapuje se z najakeho duvodu to m a dotaz nefunguje

MW
Člen | 626
+
0
-

Ja pouzivam toto

->where("MONTH(date) = ?", $month)
David Matějka
Moderator | 6445
+
0
-

a nebo pouzij

...
            ->where("DATE_FORMAT(date, ?) = ?", '%Y', $year)
            ->where("DATE_FORMAT(date, ?) = ?", '%m', $month)
...