Nette\Database jak na outer join
- olejnjak
- Člen | 8
Ahoj,
nějak jsem tu pročítal fórum a snažil se vykoumat jak na outer joiny v Nette\Database.
Potřeboval bych asi takovýhle dotaz.
SELECT * FROM `blog_articles` LEFT JOIN `blog_categories` on blog_articles.ArtCat=blog_categories.CatID
tak jsem stvořil tohle (podle toho co je zminene zde)
$this->findAll()->where('blog_categories:CatID = ArtCat');
řeším to v modelu, findAll jen vrací výsledky jako Nette\Database\Connection\table
nicméně dostávám chybu
PDOException: No reference found for $blog_articles->related(blog_categories)
nemáte někdo nápad jak to vyřešit?
Díky moc.
Editoval olejnjak (10. 9. 2012 0:23)
- David Matějka
- Moderator | 6445
musis pouzit jine reflection, defaultni discovered reflection hleda podle metadat v databazi, konfigurace databaze musi vypadat nejak takhle:
common:
nette:
database:
dsn: 'mysql:host=localhost;dbname=test'
user:
password:
reflection: Nette\Database\Reflection\ConventionalReflection
a potom musis mit pojmenovane tabulky a sloupce podle nejakeho pravidla,
defaultne je to tak, ze primarni klic je id
a cizi klic je
nazev_tabulky_id
v tvem pripade by to bylo ze tabulka blog_articles
ma sloupecek
blog_categories_id
misto ArtCat
a blog_categories ma
primarni klic id
a ne CatId
pokud by byl problem to prepracovat, tak je asi jedine reseni napsat si vlastni reflection, ktere by melo konfiguraci nazvu tabulek se vsema potrebnyma klicema treba v nejakym konfiguracnim poli..