Podmínka na relaci m:n v Nette Database
- stanley
- Člen | 22
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
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)
- David Matějka
- Moderator | 6445
doplnil jsem to tam.. btw, hodilo by se upravit dokumentaci nebo aspon nekam na viditelny misto hodit ty tvoje prezentace