Komentáře uživatele paranoiq

"Položka (Název) nesmí být prázdná."

s `timestamp on update current_timestamp` je ten problém, že ho lze obejít implicitním vložením údaje, který automaticky generovaný čas přebije. trigger obejít nejde. u tvého řešení je zase ten problém, že se čas updatu zapíše i když nedošlo při zápisu k modifikaci dat (když vložím stejná data jaká už v řádku jsou, trigger se i přesto provede). já detekuji, jestli skutečně došlo ke změně dat v řádku a až poté zapisuji info o změně. to je ale dost složité na ruční psaní triggerů a tak jsem si na to napsal automat, který mi hotový trigger vygeneruje: http://gist.github.com/477277
K článku: DbDibiOrm

Re: Re: Reinventing of the Wheel

ahoj 6) lepší než __toArray nebo asArray by možna bylo implementovat IteratorAggredate: http://www.php.net/manual/en/class.iteratoraggregate.php

Re: Lazy loading

ano, víc matoucí už to být ani nemůže ^_^ jména musí být naprosto zřejmá (get == SELECT)

Re: Re: Re: Re: Lazy loading

zaprvé, ORM přeci nebude tak hloupé, aby si při načtení defaultních hodnot tyto označilo jako změněné. zadruhé, i kdybys je označil a uložil, nic tím nezměníš - jsou přeci defaultní! myslím, že jsi nepochopil ve které situaci načíst defaultní hodnoty - ty je třeba načítat pouze při vytvoření nového záznamu Customer::create…, nikoliv při načtení existujícího Customer::get… ještě to shrnu: při vytvoření nového záznamu třeba metodou Customer::createNew(), je třeba načíst defaultní hodnoty z databáze, tam kde jsou (a dá se to udělat i lazy). při získání existujícího je to samozřejmě nesmysl. tady je na místě načíst celý záznam (pokud neobsahuje nějaké velké sloupce třeba typu blob atd), protože je třeba beztak udělat SELECT - i kdyby jen pro ověření, zda vůbec záznam existuje. pokud potřebuješ dělat nějaký hromadný update a nepotřebuješ u toho znát původní hodnoty , není zřejmě vůbec vhodné vytvářet modelové objekty a měla by se o to postarat nějaká statická metoda modelu, nebo nějaký helper

Re: Re: Re: Re: Lazy loading

už samotné slovíčko get na začátku názvu metody říká proč to nejde. nemůžeš přece zavolat Customer::getByCokoliv() aniž by jsi alespoň ověřil zda takový záznam vůbec existuje

Re: Re: Lazy loading

přehlédl jsem tohle: "$c = Customer::getByPrimary(1);" to skutečně bez SELECTu nepůjde ^_^

Re: Re: Lazy loading

myslím, že 'ORM' si bude muset pamatovat, které údaje byly změněny. něco v tomto smyslu: public function __set($name, $value) { $this->_data[$name] = $value; $this->_update[$name] = TRUE; } potom může udělat při uložení částečný UPDATE (nebo INSERT), aniž by musel načítat ostatní hodnoty z databáze

Re: Re: Re: Re: Položka (Název) nesmí být prázdná

to jsem sice neřekl, ale je to tak. při nevyplnění povinného údaje (který nemá defaultní hodnotu), by mělo 'ORM' vyhodit výjimku ad a) já ho chápu tak jak jsem napsal - MANDATORY == NOT NULL. na každém povinném sloupci by někde ve vyšší úrovni měl být nějaký validátor. pokud je jedinný požadavek na hodnotu, aby tam bylo vyplněno 'něco' (=notempty), tak bude výsledek k ničemu. uživatelé tam nacpou 'cokoliv' aby to prošlo ad b) ano. nesmyslná. má-li něco výchozí hodnotu, tak ji to má proto, aby se použila při nevyplnění

__NAME?__

nj. ale jaké jsou alternativy? :] spouštět navíc COUNT(*) kvůli zjištění počtu řádků také není úplně levná záležitost pekelně rychlé je to pouze na MyISAM, bez JOINů a bez WHERE http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count

Položka (Název) nesmí být prázdná

o právě těchhle otázkách už jsem dost přemýšlel. tady je pár mých závěrů: 1) notempty vlastnost samotná stejně nezaručuje nic. dá se jednoduše oklamat vložením nesmyslného údaje. validace, má-li mít nějaký smysl tedy beztak musí být složitější než pouhé zakázání prázdné hodnoty. ORM za nikoho problémy validity nevyřeší a to ani s pomocí notempty vlastnosti možnosti je tedy možné redukovat na pouhé dvě - NULL a NOT NULL. přičemž každá hodnota musí projít validací na úrovni modelu, nikoliv na úrovni persistence. zda prázdný řetězec je či není validní není úkol pro persistentní vrstvu, ale pro model 2) řekněme, že se objekt ukládá metodou save(). ta slouží pouze pro persistenci a NESMÍ OVLIVŇOVAT FUNKČNOST objektu. objekt tedy musí znát defaultní hodnoty v úložišti už při svém vzniku. nelze je načíst později, ať už při uložení nebo při novém načtení v jiné session. musí je znát a vracet ihned. funkce __toArray() tedy musí vracet i defaultní hodnoty pro ty sloupce, které nebyly dosud v modelu nastaveny jednoduchým řešením je nepoužívat defaultní hodnoty na straně úložiště, ale zavádět je v modelu (třeba v konstruktoru). to navíc podporuje i polymorfismus, kdy se jednotlivé třídy v db tabulce liší pouze jednou 'defaultní' hodnotou, která se nikdy za života objektu nemění (v podstatě slouží jen jako informace pro továrnu)

položek 0-12 z 12 [1 / 1]