Zapnutí cache v Nette\Database

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

Zdravím,

Jak je to s používáním cache v Nette\Database. Nikde jsem nenašel žádnou zmínku o tom jak to nastavit. Používám verzi Nette 2.0 Beta ze dne 24. 8. 2011.

Předem dík za info.

Vyki
Člen | 388
+
0
-

Tak se mrkni do sandboxu https://github.com/…e/master/app, respektive do konfiguracniho souboru https://github.com/…/config.neon

Richard Faila
Člen | 40
+
0
-

Vyki napsal(a):

Tak se mrkni do sandboxu https://github.com/…e/master/app, respektive do konfiguracniho souboru https://github.com/…/config.neon

A tam se dá vidět konkrétně co? Vidím jen normální konfigurák… Já jsme se to snažil zprovoznit jak to bylo ukázáno na https://www.youtube.com/watch?… ale sám si nejsem si jistý jestli to mám správně.

Richard Faila
Člen | 40
+
0
-

Ještě ukážu jak to mám já, třeba to někomu pomůže, protože ve videu to je jinak

config.neon

<?php
database:
      class: Nette\Database\Connection
      arguments: ['mysql:host=localhost;dbname=nette', 'root', '']

    model:
      class: Model
      arguments: [@database,@cacheStorage]

?>

V modelu potom:

<?php
`/**
 * Model base class.
 */
class Model extends Object
{
	/** @var Nette\Database\Connection */
	public $database;

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

Samotného by mě zajímalo jestli to je správně, protože to místy vypadá, že to nefunguje.

Editoval Richard Faila (20. 9. 2011 20:01)

studna
Člen | 181
+
0
-

Toto není zrovna pěkné řešení. Co třeba takto?

// ...
class ServiceFactory
{
	public static function createServiceDatabase( Container $container )
	{
		$db = new Connection(...);
		$db->setCacheStorage( $container->cacheStorage );
		return $db;
	}
}

config.neon

database:
	factory: ServiceFactory::createServiceDatabase
Tomáš Kuba
Člen | 15
+
0
-

Pro ty pomalejší jako jsem já:

class ServiceFactory {
	public static function createServiceDatabase(DiContainer $container, $dns, $user, $password) {
		$db = new Connection($dns, $user, $password);
		$db->setCacheStorage($container->cacheStorage);
		return $db;
	}
}

v config.neon pak:

	database:
		#class: Connection
		arguments: ['mysql:host=localhost;dbname=jmenodatabaze', 'uzivatel', 'heslo']
		factory: ServiceFactory::createServiceDatabase

Editoval Tomáš Kuba (4. 10. 2011 13:43)

mulisano
Člen | 8
+
0
-

Richard Faila napsal(a):

Ještě ukážu jak to mám já, třeba to někomu pomůže, protože ve videu to je jinak

config.neon

<?php
database:
      class: Nette\Database\Connection
      arguments: ['mysql:host=localhost;dbname=nette', 'root', '']

    model:
      class: Model
      arguments: [@database,@cacheStorage]

?>

V modelu potom:

<?php
`/**
 * Model base class.
 */
class Model extends Object
{
	/** @var Nette\Database\Connection */
	public $database;

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

Samotného by mě zajímalo jestli to je správně, protože to místy vypadá, že to nefunguje.

Toto řešení je pouze nepěkné nebo je zároveň i nefunkční?

mkoubik
Člen | 728
+
0
-

Dá se to napsat jako

database:
  class: Nette\Database\Connection
    arguments: ['mysql:host=localhost;dbname=nette', 'root', '']

model:
  class: Model(@database,@cacheStorage)
  setup:
    - setCacheStorage(@cacheStorage)
David Grudl
Nette Core | 8157
+
0
-

Doporučuji jít touto cestou