Podmínka na relaci m:n v Nette Database

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

Ahoj.

Řeším víceméně triviální úlohu, jejíž jediné zatím funkční řešení, které jsem dal dohromady, se mi vůbec, ale vůbec nelíbí. Mám databázi víceméně totožnou s tím, co je jako example v dokumentaci Nette Database. Dejme tomu že books a k nim tags. A chci udělat naprosto pochopitelnou věc, tj. vypsat books, které mají daný tag. Nechci vypsat všechny books a ke každé její tags, to už mám, chci po prokliku na tag zobrazit jen ty books, které tento tag mají.

Otázka zní, jak napsat modelovou metodu, která takový Selection vrátí. Jednoduchá očekávaná varianta

public function getByTag($tag) {
    return $this->db->table('books')
                    ->where('tags.name = ?', $tag);
}

selhává na chybě ` Unknown column ‚books.tags_id‘ in 'on clause`

Co mi funguje, je toto:

public function getByTag($tag) {
    $tags = $this->db->table('tags')
                     ->where('name = ?', $tag)
                     ->fetch();
    return $tags->related('book_tags');
}

Což ale vyžaduje při vypisování v šabloně ještě ke všem výpisům přidat ->books, což je velká pruda.

Možná něco dělám špatně, nicméně budu velice vděčný za jakoukoliv pomoc. Omlouvám se, pokud se tu někde už nachází odpověď, hledal jsem docela marně.

Díky

Stanley

David Matějka
Moderator | 6445
+
0
-

zkus:

$this->db->table('books')
->where('book_tags:tag.name', $tag);

EDIT:
pro 2.1:

$this->db->table('books')
->where(':book_tags.tag.name', $tag);

Editoval matej21 (25. 9. 2013 0:35)

hrach
Člen | 1844
+
0
-

Verze nette? v masteru je dvojtecka na zacatku (k tomu, co psal matej21).

David Matějka
Moderator | 6445
+
0
-

doplnil jsem to tam.. btw, hodilo by se upravit dokumentaci nebo aspon nekam na viditelny misto hodit ty tvoje prezentace