Ormion Quick Start

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

Vyrobil jsem cosi jako quick start pro mé ORM Ormion. https://componette.org/search/?…

Tharos
Člen | 1030
+
0
-

Super počin, celý Ormion, velké díky za něj. A uplně jsi mi tím quick startem vyšel vstříc :), protože zrovna včera jsem se definitivně rozhodl v jednom projektu Ormion nasadit.

Editoval Tharos (4. 6. 2010 23:40)

Patrik Votoček
Člen | 2221
+
0
-

Předně se omlouvám pokud je to napsáno někde jinde…

Honzo máš vyřešeny Migrace/Validace? Je něják vyřešen MySQL vs BOOLEAN?

Honza Marek
Člen | 1664
+
0
-

vrtak-cz napsal(a):

Předně se omlouvám pokud je to napsáno někde jinde…

Honzo máš vyřešeny Migrace/Validace?

Migrace nemám. Validace jdou zatím řešit jedině nějakou událostí na onBeforeInsert například, která by vyhazovala výjimku.

Je něják vyřešen MySQL vs BOOLEAN?

Boolean sloupce musíš ručně upravit ve vygenerované konfiguraci.

Abych předešel dalším dotazům, tak asociace taky zatím nemám, ale už se mi docela rýsují v hlavě, tak v dohledné době předpokládám budou.

blacksun
Člen | 177
+
0
-

Vypadá to velice zajímavě, určitě vyzkouším.

Chtěl bych se zeptat, jaká je možnost, že by byla dostupná i verze pro php 5.2.x, byť s nějakými omezeními.

Honza Marek
Člen | 1664
+
0
-

blacksun napsal(a):

Chtěl bych se zeptat, jaká je možnost, že by byla dostupná i verze pro php 5.2.x, byť s nějakými omezeními.

Moc se mi s tím nechce dělat, tak asi nebude. Jedině, že bych to někde hrozně nutně představoval, což se doufám nestane. Nebo to udělá někdo za mě.

blacksun
Člen | 177
+
0
-

A co by všechno (obecně) obnášelo to upravit pro 5.2? V čem je hlavní problém? S nějakými specifickými php5.3 věcmi jsem se zatím moc nepotýkal..

Blizzy
Člen | 149
+
0
-

blacksun napsal(a):

A co by všechno (obecně) obnášelo to upravit pro 5.2? V čem je hlavní problém? S nějakými specifickými php5.3 věcmi jsem se zatím moc nepotýkal..

Myslím, že problém je hlavně v Late Static Bindings, které jsou až od PHP 5.3.

ViliamKopecky
Nette hipster | 230
+
0
-

A ještě by bylo fajn naznačit spojování modelů/tabulek.

Honza Kuchař
Člen | 1662
+
0
-

enoice napsal(a):

A ještě by bylo fajn naznačit spojování modelů/tabulek.

Jak bude spojování tabulek, tak to bude paráda.

norbe
Backer | 405
+
0
-

Měl bych pár dotazů k Ormionu:
1) máš někde nějaký todo list co všechno je v plánu?
2) budeš nějak řešit i ukládání vícejazyčných dat v db?

Honza Marek
Člen | 1664
+
0
-

Todo list ani moc nemám. Až budu mít chvíli čas, podivám se na ty asociace (alias spojování tabulek). Další věci budou vždycky až když mě napadne geniální fičura a zároveň geniální způsob jak ji realizovat.

Mikulas Dite
Člen | 756
+
0
-

Narazil jsem na takovou nepříjemnou věc, výsledek agregační funkce se převádí do int. Což u takového Avg() je docela na škodu. Ormion má k dispozici datové typy sloupečků, tak minimálně pro float a podobné desetinné by to měl převádět na ně, ale stejný problém může nastat i u průměru z celých čísel.

https://github.com/…llection.php#L215

Honza Marek
Člen | 1664
+
0
-

Pravda.. pořeším.

norbe
Backer | 405
+
0
-

Jak to vypadá s těmi asociacemi? Koukal jsem na github a tam jsem si žádné změny v tomhle směru nevšimnul.

Honza Marek
Člen | 1664
+
0
-

Mikulas Dite

fixed

norbe

Žádná změna v tomhle směru nebyla. Zatím si stále nejsem úplně jistý, jak by to mělo vypadat. Něco jsem zkoušel, ale nebylo to ono, tak jsem to nezveřejnil.

LuKo
Člen | 116
+
0
-

Ve třídě Record a metodě convertValue je drobná chybička v testu času. Nebere čas od půlnoci do jedné hodiny. Místo:

<?php
	...
	} elseif ((int) $value === 0) { // '', NULL, FALSE, '0000-00-00', ...
	...
?>

jsem u sebe fixnul na:

<?php
	...
	} elseif (!is_numeric(strtotime($value))) { // '', NULL, FALSE, '0000-00-00', ...
	...
?>

a zatím to funguje spolehlivě, bere i půlnoc.

Honza Marek
Člen | 1664
+
0
-

Hm a to je to přitom zrovna kód vykradený z dibi.

Cifro
Člen | 245
+
0
-

Hlásim nekompatibilitu s novým dibi.

V tomto commite 651c0f8 došlo k zmene konfigurácie profileru. Update Ormionu by bol potešujúci ^^

Patch by mohol byť takýto:

	// Ormion.php, riadok 44
public static function enableProfiler($filePath = null, $connectionName = self::DEFAULT_CONNECTION_NAME) {
	$config = dibi::getConnection($connectionName)->getConfig('profiler');
	$profiler = new DibiProfiler($config);
// ....

A v config.ini je potom nasledujúce:

database.profiler.run = true
;database.profiler.explains = true

Editoval Cifro (4. 6. 2010 16:13)

Honza Marek
Člen | 1664
+
0
-

Možná tu metodu s tím profilerem úplně zruším. Od dob Nette 1.0 Debug panelu už není myslím moc potřeba.

Cifro
Člen | 245
+
0
-

Honza Marek napsal(a):
Možná tu metodu s tím profilerem úplně zruším. Od dob Nette 1.0 Debug panelu už není myslím moc potřeba.

Nechal by som, resp. ak už zrušiť, tak do Quickstartu napísať ako zapnúť profilovanie do súboru a do Debug panelu. To by pomohlo aj mne teraz.

Cifro
Člen | 245
+
0
-

Neviem si dať rady s nastavením dodatočných hodnôt. V Ormione je síce setDefaultValue() ale potom sa nedá pristupovať v cykle k tým hodnotam jednoducho napr. cez $item->xxx, musím volať $item->getDefaultValues() a prechadzať v cykle. Zišla by sa možnosť nastaviť ručne ďalšie hodnoty v metóde init(), okrem tych čo sa načitajú z DB. Gettery a settery fungujú len na hodnoty z Db.

Proki
Člen | 66
+
0
-

Taky momentálně nejsem nějak moudrej z nastavování defaultních hodnot. V tabulce mám sloupec created typu DateTime, do kterého by se mělo při vložení nového záznamu zapsat aktuální datum a čas. V patřičném objektu mám toto:

<?php
protected function init() {
   $this->setDefaultValue('created', 'NOW()');
}
?>

ale bohužel při vkládání nového záznamu odstávám chybu „Insert failed. Field ‚created‘ doesn't have a default value“. Neví někdo v čem je zakopaný pes?

Editoval Proki (10. 6. 2010 15:45)

Honza Marek
Člen | 1664
+
0
-

Proki: To bude tím, že se Ormion neúspěšně pokusí konvertovat now() na datetime, což se mu nepovede. Určitě bude fungovat přiřazení

$this->setDefaultValue('created', time());

i když ale neni to databázovej čas, ale phpčkovej. Takhle ale funguje i timestampable behavior z ormionu.

Proki
Člen | 66
+
0
-

Díky moc, vyřešil jsem to tím timestampable behavior.

Ještě bych měl dotaz ohledně Ormionu a transakcí. Nemám ani moc komplexní databázi, ale většinou potřebuji ukládat data do více tabulek. Momentálně to řeším tak, že z událostí onBeforeInsert, onBeforeUpdate atd. volám jiné modely. Problém nastane, pokud někde dojde k chybě. Nekonzistenci databáze inteligentně vyřeší spuštění všech těchto dotazů v transakci, ale jak toto vyřešit v Ormionu? Momentálně mě napadá pouze to, umístit do presenteru volání dibi::begin() a dibi::commit() kolem updatovacích příkazů z modelu, ale toto řešení se mi vůbec nelíbí. Nejde to udělat nějak efektivněji? Nebo jak jinak ukládat data do více tabulek?

Editoval Proki (11. 6. 2010 10:44)

Honza Marek
Člen | 1664
+
0
-

Pro transakce v Ormionu žádná podpora neexistuje. Když by se vymyslela, tak bych ji tam hodil.

lucass
Člen | 89
+
0
-

Zdary,

jak se, prosím Vás, pracuje v Ormionu se schématy? Pokouším se rozjet Ormion na PostgreSQL 8.4.1, kde funguje bez problémů pro tabulky, které mám ve schématu public. Jak chci ale pracovat s tabulkami pod jiným schématem, tak při zjišťování informací o tabulce dostávám hlášku:

Database '' has no table 'core.t_resources'. // DibiDatabaseInfo.php Line: 95

V Ormion Mapperu to padá na:

<?php
	...
	$tableInfo = $this->getDb()->getDatabaseInfo()->getTable($this->table);
	...
?>

V Ormion Recordu mám název tabulky přes anotaci:

<?php
	@table core.t_resources
?>

Dokázal by někdo poradit? Díky.

Jinak ještě doplním, že se toto děje při volání na modelu Resources::find($id), findAll() funguje bez problémů i v jiných schématech.

Editoval lucass (20. 6. 2010 15:16)

lucass
Člen | 89
+
0
-

Chybku pro první hlášku se mi podařilo najít. Ve zmíněném souboru DibiDatabaseInfo.php na řádku 95 obsahuje pole $this->config namísto klíče database klíč dbname. Udělal jsem si tam prozatímní hack tak, abych měl index database, hláška je tedy:

Database 'ormion' has no table 'core.t_resources'.

Zkoumal jsem tedy dál, proč Dibi nezjistí tabulky z této databáze, až jsem se dostal k metodě getTables() driveru pro postgre, tedy postgre.php, a problémem zřejmě bude následující dotaz a v něm volaná funkce current_schema(), která vrací public.

<?php
	...

	$this->query("
			SELECT table_name as name, CAST(table_type = 'VIEW' AS INTEGER) as view
			FROM information_schema.tables
			WHERE table_schema = current_schema()
		");

	...
?>

Zřejmě by se tedy musel dotaz poupravit tak, aby prohledával i všechna schémata, nebo se current_schema nastavovat v Ormionu na základě tečkové notace ze jména tabulky, tj. v tomto případě by se přepnulo z public na core.

lucass
Člen | 89
+
0
-

Jak to tak vypadá, vznikne možná další ORM nad Dibi:) Otestoval jsem Ormion i PerfORM a u obou jsem narazil při práci se schématy, se kterými ani jeden nepočítal…:/

Ještě napadá druhá varianta: použít Doctrine a zkusit napsat mezičlánek pro DibiDataSource, abych mohl používat skvělý DataGrid (i když jsem ještě nezkoumal, jestli by to šlo), popř. průbnout pro tyto účely Gridito, který by snad měl být nezávislý…

K čemu byste se přiklonili vy?

Werkov
Člen | 17
+
0
-

Copak se stalo s Ormionem, už se s ním nepočítá?

Ještě před pár dny jsem si ho v Doplňcích stáhl a nyní, když jsem hledal jeho „dokumentaci“, tak jsem zjistil, že chybí. Nemohl by autor ji uveřejnit někde jinde?

Díky.

Honza Marek
Člen | 1664
+
0
-

Dokumentaci Ormionu jsem přesunul na github – https://github.com/…/Ormion/wiki

Honza Marek
Člen | 1664
+
0
-

lucass napsal(a):

Jak to tak vypadá, vznikne možná další ORM nad Dibi:)

Zachraň se, dokud je čas ;)

Ještě napadá druhá varianta: použít Doctrine a zkusit napsat mezičlánek pro DibiDataSource, abych mohl používat skvělý DataGrid (i když jsem ještě nezkoumal, jestli by to šlo), popř. průbnout pro tyto účely Gridito, který by snad měl být nezávislý…

Gridito je nezávislý. A datagrid pro doctrine už je taky vymyšlenej, akorát nevim kde se sežene, protože jsem ho nepotřeboval.

pekelnik
Člen | 462
+
0
-

Sežene se na githubu :) http://bit.ly/dBXpGK