nORMa – ORM manager pro Nette

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

Ahoj všichni,
po delší době jsem letos oprášil svůj starší projekt light ORM manageru. A dotáhl jsem ho do použitelné verze.
I rozhodl jsem se, že ho dám k dispozici komunitě, které mi mnohokráte pomohla s nějakým problémem s Nette.

Takže moje ORM vzniklo, protože jsem byl líný učit se Doctrinu a přišla mi moc těžkopádná.

Celý popis by se sem nevešel a tak jsem sepsal stručný návod zde (Je tam i odkaz na git)

Jsou tam i jednoduché výkonostní testy s porovnáním s Dibi a Nette DB (Doctrine není – nebudu se jí učit:) )
Testy se spouští v reálném čase, takže budete dostávat různé výsledky, podle zatížení serveru).

Určitě se v programu najde pár chyb a testy jsou odfláknuté (zase ta moje lenost na testy), ale mám to již nasazené v ostrém provozu na dvou eshopech a na svém vlastním účetnictví, které mám jako web aplikaci, takže tomu poměrně dost důvěřuju.

Snad to bude někomu k užitku. Dotazy se pokusím zodpovědět zde. Nápady, náměty a pull requesty jsou vítány :)

Pavel Janda
Člen | 977
+
+1
-

Trošku si protiřečíš. :P

„A dotáhl jsem ho do použitelné verze.“ vs „určitě to obsahuje chyby … testy jsou odfláknuté … všechno na vaší vlastní zodpovědnost“.

Rampus
Člen | 39
+
0
-

Pavel Janda napsal(a):

Trošku si protiřečíš. :P

„A dotáhl jsem ho do použitelné verze.“ vs „určitě to obsahuje chyby … testy jsou odfláknuté … všechno na vaší vlastní zodpovědnost“.

Myslel jsem to tak, že v každém programu je aspoň jedna chyba, které se projeví jen ve specifické situaci a za běžného provozu se třeba rok neprojeví, což každý, kdo nějakou dobu programuje jistě zná :)
A testy jsou jen základní, jinak mám otestováno provozem.

Pavel Kravčík
Člen | 1195
+
+1
-

Určitě palec nahoru, že jsi to dotáhl do použitelného řešení. Chce to více dotáhnout. Třeba věc jako $this->prepareData(); by mě asi strašně iritovala.

A ještě informace, že něco bude implementováno a třeba rok není vypadá tak nějak zvlášně. Jinak plus.

Rampus
Člen | 39
+
0
-

Pavel Kravčík napsal(a):

Určitě palec nahoru, že jsi to dotáhl do použitelného řešení. Chce to více dotáhnout. Třeba věc jako $this->prepareData(); by mě asi strašně iritovala.

A ještě informace, že něco bude implementováno a třeba rok není vypadá tak nějak zvlášně. Jinak plus.

$this->prepareData(); ve většině případů není potřeba, ale může nastat situace, kdy jo. Ale máš pravdu, dám to na tvrdo do parseru, ať to tam doplňuje automaticky a bude po starostech.
To neimplementováno se týká vazby m:n.
V současné době se to dá řešit přes další entitu:

<?php
	class Book{
		/** @var BookTag @collection */
		public $bookTag;
	}
	class BookTag{
		/** @var Book @entity */
		public $book;
		/** @var Tag @entity */
		public $tag;
	}
	class Tag{
		/** @var string */
		public $name;
	}

	foreach ($book->bookTag as $tag){
		$tag->name;
	}
	// nebo
	$books=$em->getAll('BookTag')
			  ->where(['tag in' => $em->getOne('Tag',['name','sci-fi'])->getId()]);
	foreach ($books->book as $book){
		$book->name;
	}
?>

Jen přemýšlím, jestli to tak nechat, nebo to nějak zjednodušit, aby tagy byly přímo kolekce booku definováné přes anotaci. V první verzi jsem to tak měl, ale pak jsem úplně předělal filozofii db requestů a už jsem to tam nedával.
Ale asi se na to vrhnu, až bude chvilka času.

Felix
Nette Core | 1196
+
+1
-

Rampus napsal(a):

Jen přemýšlím, jestli to tak nechat, nebo to nějak zjednodušit, aby tagy byly přímo kolekce booku definováné přes anotaci. V první verzi jsem to tak měl, ale pak jsem úplně předělal filozofii db requestů a už jsem to tam nedával.
Ale asi se na to vrhnu, až bude chvilka času.

Ja bych to tak klidne nechal. Ve vetsine pripadu mam u M:N vazeb nejake dalsi sloupecky, takze mezi-entitu potrebuju tak jako tak.

Radsi bych se zameril na doladeni testu. Proc jsi vlastne volil bitbucket? Resp. klidne bych to tedka prevedl na Github, dokumentaci muzes vest bud v README nebo ve vlastni sekci (/docs) jako to maji Kdyby, pripadne i ve wiki. Usetrilo by ti to nejakou praci :-).

Btw: ten odkaz na git v dokumentaci skoro nejde najit, resp. ja ho nemoh na prvni pokus najit.

Rampus
Člen | 39
+
0
-

Felix napsal(a):

Radsi bych se zameril na doladeni testu. Proc jsi vlastne volil bitbucket? Resp. klidne bych to tedka prevedl na Github,…

Na Bitbucketu jsem už řadu let. Tenkrát jako jediní nabízeli privátní repozitáře zdarma. To ještě jeli jen na Mercurialu. Teď už podporují i git a mají i docela šikovný gui klient SourceTree. Tak jsem u nich zůstal.
Na github se to dá migrovat, ale musel bych se s tím naučit :)

Na testech průběžně pracuju, ale jsem teď zavalen prací… Všichni všechno chtějí do konce roku, určitě to znáte…

Odkaz na git předělám.