Nette\Database jak na outer join

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

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
+
0
-

pouzivas innodb?

olejnjak
Člen | 8
+
0
-

Jo to bude ono, nicméně hosting InnoDB nepodporuje, dá se to zvládnout i bez InnoDB?

EDIT: momentálně jsem to vyřešil pomocí Nette\Database\Connection::query, nicméně pokud by bylo nějaký hezčí řešení :)

Editoval olejnjak (10. 9. 2012 1:39)

David Matějka
Moderator | 6445
+
0
-

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..

olejnjak
Člen | 8
+
0
-

Okej, super dík moc.