Model pracující s více tabulkami

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

V novém quickstartu jsou vytvořené modely jako potomky Nette\Database\Table\Selection a evidovány ve config.neon. Elegantní. Došel jsem však k modelu, který potřebuje pracovat s více tabulky (svoji a „pomocnými“). Napadlo mě, že by Model by potomkem Nette\Database\Connection a vždy zvolím tu správnou tabulku. Teď k otázkám:

  1. Je to správná úvaha?
  2. Pokud ano, proč dostávám od laděnky Service 'page': Parameter $dsn in Method Nette\Database\Connection::__construct() is missing? U „jednotabulkových“ (potomci Selection) vše funguje jak má. Config:
common:
	php:
		date.timezone: Europe/Prague
		# session.save_path: "%tempDir%/sessions"
		# zlib.output_compression: yes
	nette:
		session:
			autoStart: smart
		database:
			default:
				dsn: '%database.driver%:host=%database.host%;dbname=%database.dbname%'
				user: %database.username%
				password: %database.password%

	services:
		database: @Nette\Database\Connection

		authenticator: Security\Authenticator

	factories:
		page: Model\PageModel
		basicPage: Model\BasicPageModel
production < common:
	parameters:
		database:
			driver: mysql
			host: localhost
			dbname: xx
			username: xx
			password: xx

development < common:
	parameters:
		database:
			driver: mysql
			host: localhost
			dbname: yy
			username: yy
			password: yy

Díky za váš čas.

aGr
Člen | 45
+
0
-

Tak jsem to obešel tak, že Modul, který potřebuje více tabulek je klasický Nette\Object a v konstruktoru dostane připojení do databáze. Pak budu pracovat vždy s určitou tabulku. To je snad v pořádku, že?

llook
Člen | 407
+
0
-

To první řešení, kde model dědí od Connection, není správné, protože to by znamenalo, že tvůj model je připojení (is-a). Jenže to není pravda, ve skutečnosti tvůj model připojení (has-a). To druhé řešení je o moc lepší.

Nox
Člen | 378
+
0
-

Jen tak na doplnění
Tohle konkrétně je případ, kdy mi to paradoxně nepřijde úplně jednoznačné

  1. Model tam nedědí od Connection, ale Selection
  2. QuickStart pravděpodobně používá tu podivnou terminologii že „model“ = „loader/repository“

Tudíž pokud má model poskytovat nějaký vybraný úsek databáze, pak se dá IS-A uznat. Vzhledem k tomu, že v NDB funguje joinování, tak by to snad mělo jít udělat i nad víc tabulkama.

Ale samozřejmě kdybych to dělal, tak bych taky zvolil kompozici, asi to v QS není zvolené úplně šťastně

aGr
Člen | 45
+
0
-

Děkuju za doplnění, rozumím.