Matching table (Vybirani podle vztahove tabulky)

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

Nedávno jsem přešel ze starší verze nette + dibi na nejnovější nette + nette/database a nějak mě nenapadá jak snadno provést dotaz podle m,atching tabulky.

V dibi jsem používal tohle:

<?php
public function fetchTagged($tag_id)
{
	return $this->getDatabase()->select('quotes.*, quotes_tags.*')
				->from('quotes')
				->leftJoin('quotes_tags')
				->on('quotes.quote_id = quotes_tags.quote_id')
				->where('[quotes_tags.tag_id] = %i', $tag_id);
}
?>

Kde v quotes tabulka je:
quote_id, text

Matching tabulka
quote_id, tag_id

Vybírám podle tag id. K jednomu tagu je X quotes.

Asi jsem nějak mimo, ale naprosto jsem se do těch relací zamotal :D

Editoval loneswan (25. 10. 2012 19:40)

studna
Člen | 181
+
0
-

Tuším, že to jde takto:

// obyčejně
$db->query("SELECT ...");
// a nebo
$db->table('quotes_tags')->where('tag_id = ?', $id)->select('quotes.*');
// kdyby nefungovalo předchozí, tak tuším
$db->table('quotes_tags')->where('tag_id = ?', $id)->select('quotes.id, quotes.*');
loneswan
Člen | 5
+
0
-

Stále dostávám No reference found for $quotes_tags->quotes.
Už jsem v tom dost zracenej. Asi se vrátím k dibi ikdyž Nette\Database je mi daleko sympatičtější

Zatím krkolomně vyřešeno jako

<?php
public function findByTag($tag_id)
{
	return $this->connection->query("SELECT quotes.*, quotes_tags.* FROM `quotes` LEFT JOIN `quotes_tags` ON quotes.quote_id = quotes_tags.quote_id WHERE `quotes_tags`.`tag_id` = ? ORDER BY rating_sum/rating_votes DESC", $tag_id);
}
?>

Editoval loneswan (26. 10. 2012 11:27)

Arynev
Člen | 33
+
0
-

Vyzkoušej, ale nejsem si jistý

$connection->table("quotes")
	->where("guotes_tag:tag_id", $tagId)