Předání připojení k DB do modelu

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

Jsem asi už slepej:

Mám model který mi má vracet obecný SQL dotaz:

class Dotaz extends Nette\Object {

	public $database;

	public function __construct(Nette\Database\Connection $database)
	{
		$this->database = $database;
	}

	public static function get_query($sql)
	{
		return($this->database->query($sql));
	}
}

V config neon mám:

		dotaz:
			class:	Dotaz(@database)

V presenteru ho volám:

$this->context->dotaz->get_query('select * from category ...');

Vrátí mi to: Using $this when not in object

Asi bych i pochopil, že objekt není vytvořen. Když v model proměnou $database udělám statickou a nepoužiji $this ale self tak to funguje. Když si udělám base model, dám ho do configu, a dědím z něj proměnou $database tak to taky funguje. Jenom mi není jasný proč ve spoustě podobných dotazů zde na fóru mají výše uvedené řešení a asi jim tedy funguje.

Tak by mě vlastně jenom zajímalo, které řešení je nejlepší.

redhead
Člen | 1313
+
0
-

Funkci get_query() máš static, proto.

ViPEr*CZ*
Člen | 817
+
0
-

Proměnnou database bych udělal private, aby nebyla vidět zvenčí. V config.neon pokud máte jediné připojení k DB, tak nemusíte uvádět jako parametr, on se tam dostane tzv. autowiringem.

dotaz:
        class:  Dotaz

Toto bude stačit. No a todle tfuj… public static function get_query($sql) to by mělo být public function get_query($sql)!

Editoval ViPEr*CZ* (6. 8. 2012 18:17)

sejmor
Člen | 63
+
0
-

To static mi tam zbylo když jsem to zkoušel přes statické funkce. No nicméně předtím to tam nebylo nefungovalo, teď jsem to vyhodil a funguje … jsem slepota .. díky :-)

Autowiring funguje.

Editoval sejmor (6. 8. 2012 21:09)