17 komentářů k článku Doctrine 2: načítání, ukládání a mazání:

  1. Marek Šudák

    Čistý návrh entity

    „Entita se sama neukládá, někdo ji vezme a někam uloží.“
    To je správně. Zároveň ale entita v anotaci obsahuje informaci, k jaké databázové tabulce se váže, což by IMHO neměla – máslo taky neví, jestli patří do ledničky.

    1. drevolution

      Re: Čistý návrh entity

      A když nepoužijeme anotace, ale zapíšeme mapování do XML? Anotace se jménem tabulky mi přijde jako informace pro toho, kdo chce s máslem něco dělat, ne pro samotné máslo.

    2. Jan TichýAutor příspěvku

      Re: Čistý návrh entity

      Zároveň ale entita v anotaci obsahuje informaci, k jaké databázové tabulce se váže, což by IMHO neměla – máslo taky neví, jestli patří do ledničky.

      Máte pravdu, neměla. Tato informace do entity z čistě návrhového hlediska opravdu vůbec nepatří. V tomto případě ale převažuje čistě praktické hledisko nad akademickou čistotou – takhle nám to umožňuje udržovat všechny definice související s danou entitou přehledně na jednom místě, namísto co bychom místo toho část psali do entity a část do konkrétního mapperu. Ale jinak s námitkou opravdu souhlasím, také mě to dráždí.

    3. Tharos

      Re: Čistý návrh entity

      Máslo samo to sice neví, ale má to na sobě napsané, v případě mého exempláře doma: „Skladujte při teplotě od 4°C do 8°C“ :). Takže i máslo má v podstatě anotaci :).

  2. pavel

    Re: Doctrine 2: načítání, ukládání a mazání

    [cite]Jinými slovy pokud uvnitř jakékoliv entity potřebujete sáhnout na Entity Manager, děláte něco špatně.[/cite]
    jak potom docílím něčeho jako:
    $articleEntiti­es=$categoryEn­tity->getArticleEn­tities();
    ?
    Musím pokaždé někde explicitně volat Entity Manager a vyžádat si $articleEntities pro tuhle $categoryEntity?
    Omlouvám se, pokud jsem tohle přehlédl v předchozích článcích. Ale ani teď to tam nevidím.

    1. Jan TichýAutor příspěvku

      Re: Doctrine 2: načítání, ukládání a mazání

      Všechno tohle řeší Doctrine 2 pomocí asociací, kde načtení všech článků z dané kategorie zajistí sama, aniž bych musel explicitně volat nějaké findBy() v entitě kategorie.

      K asociacím se dostanu v přespříštím díle. Seriál musí mít pochopitelně nějaký postupný vývoj a nešlo zatím tak úplně psát o asociacích, pokud jsem se dosud nezmínil třeba o Entity Manageru. Takže trpělivost, na všechno dojde.

  3. Tharos

    Díky za seriál

    Děkuji autorovi za moc příjemné počtení, Doctrine 2 (oproti první verzi) se pro mě též začíná stávat velmi inspirativní. Tak už aby byla na světě stabilní verze :).

  4. ameeck

    Dodatek k poslednímu odstavci

    K poslednímu odstavci by bylo vhodné přidat hlavně důvod – a to výkon.
    Doctrine vygeneruje potřebné dotazy k provedení flush() tak, abych jich bylo co nejméně. Např. rozšířené INSERTy, DELETE z jedné tabulky v jednom dotazu, etc.

    1. drevolution

      Re: Dodatek k poslednímu odstavci

      Tak on není důvodem jenom výkon (i když je velice důležitý). Stejně tak je třeba zajistit, aby se dotazy provedly ve správném pořadí či abychom nemuseli mít dlouho otevřené transakce.

  5. v6ak

    Jedna instance na entitu

    Pokud se Doctrine stará, aby měl jednu instanci na entitu, pak si vše drží až do ukončení? Jinak si to představit dost dobře nedovedu, v PHP neznám WeakReference apod.

    1. drevolution

      Re: Jedna instance na entitu

      Ano, všechny načtené instance entit jsou v Entity manageru po celou dobu běhu skriptu. Osobně v tom nevidím žádný problém.

      1. v6ak

        Re: Jedna instance na entitu

        V případě typického webového použití to problém obvykle opravdu není. Ale třeba u dávkového skriptu to problém být může.

        1. drevolution

          Re: Jedna instance na entitu

          Ano, to pak opravdu může být problém. Pokud bys chtěl mermomocí Doctrinu používat, tak pak můžeš clearovat entity manager a unsetovat nepotřebné instance. Nicméně z vlastní zkušenosti mohu doporučit v takovýhle případech se na Doctrine vykašlat a používat čisté SQL (třeba přes Doctrine DBAL). Za tu ztrátu výkonu práce s entitami IMHO ani trochu nestojí.

  6. tomp

    Random() v Doctrine 2

    Existuje v Doctrine 2 nějaká obdoba funkce RANDOM() z Doctrine 1?

    Z Doctrine teprve začínám a narazil na problém náhodného výběru kolekce objektů. Zatím jsem nenašel elegantní způsob jak toho docílit. Zjistil jsem, že v Doctrine 1 existovala funkce RANDOM, která ale v Doctrine 2 nelze využít.

  7. Bublafus

    Hledání podle nullové hodnoty

    Super články!
    Měl bych ale jeden dotaz – Jde pomocí entityManageru a metody findBy hledat sloupečky, které mají hodnotu NULL?

    Díky;)

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3312