Stránka Nette & Doctrine

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

Diskuse ke stránce Nette & Doctrine


Nebylo by lepší konfiguraci nastavovat místo přes Environment::setVariable vložit do config.ini? Já tam mám momentálně toto (adresářovou strukturu mám jinou):

[common.doctrine]
data_fixtures_path = %appDir%/data/fixtures
sql_path = %appDir%/data/sql
yaml_schema_path = %appDir%/schema
models_path = %appDir%/models
generate_models_options[generateTableClasses] = true

V doctrine-cli.php pak objekt Doctrine_Cli vytvářím takto:

$cli = new Doctrine_Cli((array) Environment::getConfig('doctrine'));

Na Windows také není potřeba nastavovat všechny PHP soubory jako spustitelné a čachrovat s proměnnými prostředí, stačí si vytvořit jednoduchou batku doctrine-cli.bat:

@echo off
REM Cestu k PHP si pravděpodobně budete chtít změnit
C:\webserver\php\php.exe doctrine-cli.php %*

Mno a nakonec bych měl výhradu k profileru – neloguje některé dotazy. Upravil jsem si ho takto:

function fetchDoctrineEvents()
{
	$profiler = Doctrine_Manager::getInstance()->getCurrentConnection()->getListener();
	$queries = 0;
	$time = 0;
	$log = array(
		$profiler->count() . ' Doctrine events',
		''
	);
	/* @var $event Doctrine_Event */
	foreach ($profiler as $event) {
		$evName = $event->getName();

		$out = '<strong>' . $evName . '</strong> [' . number_format($event->getElapsedSecs() * 1000, 3) . 'ms]';
		$time += $event->getElapsedSecs();

		if ($evName == 'exec' || $evName == 'execute' || $evName == 'query') {
			++$queries;
			$out .= "<br />\n" . $event->getQuery();
		}

		$params = $event->getParams();
		if(!empty($params)) {
			$out .= "<br />\n" . print_r($params, true);
		}

		$log[] = $out;
	}
	$log[0] .= ' [' . number_format($time * 1000, 3) . 'ms]';
	$log[1] = $queries . ' sql queries';

	return $log;
}

Jinak pěkný tutoriál!

srigi
Nette Blogger | 558
+
0
-

Jasnacka, kludne sa tie veci mozu prepisat, kedze su intuitivnejsie. Je to len prva verzia dokumentu, navrhy su vitane.

BTW ja som ten profiler obmedzi schvalne, lebo Doctrine na 40 sql requestov vygeneruje aj 200 eventov a developer je zahlteny dlhym zoznamom, kde nemoze najst co sa do DB posielalo.

Asociovanie .php suborov som robil podla PHP manualu, lebo cez .bat som na to nevedel prist.

Ja sa na tutorial mozem pozriet najskor cez vikend, ak je to kriticke, musi upravy urobit niekto iny.

Cifro
Člen | 245
+
0
-

Prihováram sa za upgrade tutoriálu na Doctrine 2.0 a Nette 1.0 ak je to možné.

Editoval Cifro (26. 5. 2010 21:54)

Majkl578
Moderator | 1364
+
0
-

Cifro napsal(a):

Prihováram sa za upgrade tutoriálu na Doctrine 2.0 a Nette 1.0 ak je to možné.

Spíš než upgrade bych to viděl na nový článek (Doctrine 1 a 2 jsou poměrně zásadně odlišné verze, co se jsem se doslechl, dělám pouze s 2).

romansklenar
Člen | 655
+
0
-

Majkl578 napsal(a):

Spíš než upgrade bych to viděl na nový článek (Doctrine 1 a 2 jsou poměrně zásadně odlišné verze, co se jsem se doslechl, dělám pouze s 2).

Tak když s ní děláš, nechtěl by jsi něco na toto téma sepsat?

krissott
Člen | 48
+
0
-

romansklenar napsal(a):

Majkl578 napsal(a):

Spíš než upgrade bych to viděl na nový článek (Doctrine 1 a 2 jsou poměrně zásadně odlišné verze, co se jsem se doslechl, dělám pouze s 2).

Tak když s ní děláš, nechtěl by jsi něco na toto téma sepsat?

Best practice, nebo aspon nejaky utrzek kodu, od tech, co pouzivaji doctrine 2, by se hodil.

mino
Člen | 16
+
0
-

Pripajam sa ze novy clanek a par best practicle by sa na doctrine 2 hodil.

stromc3k
Člen | 7
+
0
-

aj ja sa pripajam. Ak by to bolo mozne :)

iguana007
Člen | 970
+
0
-

mino napsal(a):

Pripajam sa ze novy clanek a par best practicle by sa na doctrine 2 hodil.

+1

Panda
Člen | 569
+
0
-

Koukám, že je tu o Doctrine 2 docela zájem, takže sepíšu moje řešení a hodím ho na fórum.

bazo
Člen | 620
+
0
-

Mna by hlavne zaujimalo ako riesit cachovanie pomocou nette cache ak nemam nainstalovane APC ani memcached

Panda
Člen | 569
+
0
-

Podědíš Doctrine\Common\Cache\AbstractCache, má to 5 abstraktních metod, z toho 4 z nich budou v podstatě jednořádkovky. Jediný problém je metoda getIds(), tam si buď budeš muset trochu pohrát s iterováním v tempu, nebo si jejich seznam odkládat do pomocného klíče (to dělalo Doctrine 1).

bazo
Člen | 620
+
0
-

to som si myslel. ale dufal som, ze uz to niekto implementoval :)

Patrik Votoček
Člen | 2221
+
0
-

bazo napsal(a):

Mna by hlavne zaujimalo ako riesit cachovanie pomocou nette cache ak nemam nainstalovane APC ani memcached

https://github.com/…ineCache.php

Pak tu mám ještě:
https://github.com/…seEntity.php
a
https://github.com/…ctrine2Panel

bazo
Člen | 620
+
0
-

diky vrtak. ako je mozne rozsirit Environment, aby toto fungovalo?

<?php
 $repo = Environment::getEntityManager()->getRepository(get_called_class());
?>
Cifro
Člen | 245
+
0
-

bazo napsal(a):

diky vrtak. ako je mozne rozsirit Environment, aby toto fungovalo?

Vrtak tam zrobil takú fintu… pôvodné Environment premenoval na NEnvironment pomocou use Nette\Environrment as NEnvironment a to getEntityManager() dal do svojej triedy Nella\Environment.

Panda
Člen | 569
+
0
-

Jak jsem slíbil, tak konám: Nette a Doctrine 2 – mé řešení.