Ormion Quick Start
- Honza Marek
- Člen | 1664
Vyrobil jsem cosi jako quick start pro mé ORM Ormion. https://componette.org/search/?…
- Patrik Votoček
- Člen | 2221
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
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.
- Honza Marek
- Člen | 1664
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ě.
- Honza Kuchař
- Člen | 1662
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.
- Honza Marek
- Člen | 1664
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
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.
- Honza Marek
- Člen | 1664
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
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.
- Cifro
- Člen | 245
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
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
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
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
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
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
Pro transakce v Ormionu žádná podpora neexistuje. Když by se vymyslela, tak bych ji tam hodil.
- lucass
- Člen | 89
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
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
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?
- Honza Marek
- Člen | 1664
Dokumentaci Ormionu jsem přesunul na github – https://github.com/…/Ormion/wiki
- Honza Marek
- Člen | 1664
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.