Czy możemy korzystać z FlashBaga w serwisach?

https://gildia-developerow.pl/czy-mozemy-korzystac-z-flashbaga-w-serwisach/ ( ͡º ͜ʖ͡º)

Niezależnie od tego, z którego frameworka korzystamy, zawsze powinniśmy promować własną refleksję ponad wszystko. Nawet pracując w Symfony, który uchodzi za najlepsze narzędzie w swojej kategorii, jesteśmy w stanie stworzyć niefajny kod. Dziś poruszymy temat reprezentatywnego przykładu, który potwierdza tą tezę.
Tagi: #programowanie, #naukaprogramowania i #programista15k w #php
CppPolska - Czy możemy korzystać z FlashBaga w serwisach?

https://gildia-developerow...

źródło: micah-tindell-AdOeV-qlAs4-unsplash-1170x728

Pobierz
Doctrine i problem Lazy Loadingu ()

https://gildia-developerow.pl/doctrine-i-problem-lazy-loadingu/

Większość świeżych programistów, którzy pytają tych starszych o porady, słyszą: „Ucz się Symfony, Doctrine i pisz testy”. A młodzi przyjmują to za świętość i uczą się. Znają podstawowe pojęcia, po czym wchodzą na projekt, napiszą endpoint dla dużego zestawu danych i… całość wykonuje się w 13 sekund. Ta historia, choć nieco przeze mnie ufarbowana, wydarzyła się całkiem niedawno.
CppPolska - Doctrine i problem Lazy Loadingu (。◕‿‿◕。)

https://gildia-developerow.pl/...

źródło: priscilla-du-preez-dOnEFhQ7ojs-unsplash-1536x1024

Pobierz
@Krolik: a potem będziesz miał system z setkami takich obiektów w których wyciągasz sqlem dane i im bardziej złożone zapytanie tym większa przyjemność szukania błędu w razie czego jak coś się wywali. To też nie jest idealne rozwiązanie.
  • Odpowiedz
Metody modelowania domeny w Doctrine 2

https://gildia-developerow.pl/metody-modelowania-domeny-w-doctrine-2/ ()

Warstwa domeny w Domain Driven Design jest prawdziwą wisienką na torcie. Powinniśmy dbać o nią, aby zawsze była czysta. Dziś przedstawię Wam kilka heurystyk, których stosowanie spowoduje, że Wasza domena nabierze barw ʕʔ

Tagi: #programowanie, #naukaprogramowania, #programista15k w #php, #symfony
CppPolska - Metody modelowania domeny w Doctrine 2

https://gildia-developerow.pl/met...

źródło: wesual-click-eXdKs9d37Sc-unsplash-1170x779

Pobierz
Metody modelowania domeny w Doctrine 2

Warstwa domeny w Domain Driven Design jest prawdziwą wisienką na torcie. Powinniśmy dbać o nią, aby zawsze była czysta.


@CppPolska: Jak będziesz używał encji z ORM-ma jak encji domenowych, to nigdy nie będzie czysta. To są zupełnie inne warstwy. Jak sobie nie wchodzą w paradę, to nie problemu z czystością i setterami.
  • Odpowiedz
Koncept migracji bazodanowych i Doctrine 2

https://gildia-developerow.pl/koncept-migracji-bazodanowych-i-doctrine-2/ ( ͡º ͜ʖ͡º)

Podczas tworzenia aplikacji biznesowych, nie sposób nie poruszyć tematu aktualizacji bazy danych – elementu, z którym spotykamy się w codziennej pracy. Niezależnie od typu środowiska, zawsze trafimy na temat migracji bazy danych. Na szczęście Doctrine posiada specjalnie do tego wyspecjalizowany mechanizm, którego najważniejsze elementy poruszymy w tym wpisie.

Tagi: #programowanie, #naukaprogramowania oraz
CppPolska - Koncept migracji bazodanowych i Doctrine 2

https://gildia-developerow.pl...

źródło: ross-parmly-rf6ywHVkrlY-unsplash-1170x777

Pobierz
  • Odpowiedz
Jak pozbyć się setterów z encji?

https://gildia-developerow.pl/jak-pozbyc-sie-setterow-z-encji/ ()

Wszyscy dookoła mówią, że encje powinny zawierać wyłącznie logikę biznesową, a nie settery. Niby wszyscy to wiedzą, ale każdy i tak robi te settery. Ja wiem, dlaczego tak się dzieje i z chęcią Wam o tym opowiem ( ͡º ͜ʖ͡º)

Tagi: #programowanie, #naukaprogramowania i #programista15k
CppPolska - Jak pozbyć się setterów z encji?

https://gildia-developerow.pl/jak-pozby...

źródło: joanna-kosinska-4dnG4q3kxdg-unsplash-scaled

Pobierz
@Pharos: Tak masz rację na początku autor wpisu umieścił encję, która jest encją DDD i encją ORM, ale to przekształca. Usuwa settery i dodaje niezmienniki przez co tworzy encję DDD, dodatkowo wspomina o klasie DTO, która jest modelem anemicznym i tu są wszystkie settery i gettery. Na końcu wpisu encja DDD nie jest równa encji ORM.
  • Odpowiedz
Ma ktoś pomysł czy da się to rozegrać na poziomie query buildera, bo nie mam pomysłu.

Mam encję z polami np.
- withPrice: bool
- withoutPrice: bool

Każda
@pitu120: może pokombinuj z native query + union + własne mapowanie na modele, cos w stylu:

(select *, 'withPrice' as type from xyz where withPrice = 1
union
select *, 'withoutPrice' as type from xyz where withoutPrice = 1)
order by ... limit ...
  • Odpowiedz
Mam encję z polami np.

- withPrice: bool

- withoutPrice: bool Każda encja ma przynajmniej jedno pole ustawione na true ale może też mieć oba.


@pitu120: no to jak dla mnie to robienie jakieś #!$%@? z logiki na modelu. albo jest z ceną albo bez ceny – obie cechy nie mogą być jednocześnie prawdą.

zamiast zastanawiać się jak zmusić doctrine to robienia jakiegoś gówna, weź się za przeprojektowanie swojego gówna.
  • Odpowiedz
Siema mirki. Mam problem z Doctrine w projekcie. Projekt działa na symfony 5.2, mamy zainstalowane doctrine.
Założenia w projekcie były takie, że jeżeli mamy obiekty domentowe, to nie umieszczamy w nich nic spoza domeny, więc używanie adnotacji do powiązania - obiekt->tabela - odpada. Używamy XML. Do tego doszło niedawno użycie ValueObjects zamiast int/string/bool, bo można sobie fajne rzeczy tam zaimplementować (jakieś walidacje itp). No i trzeba te ValueObject zmapować na kolumny w bazie danych, więc xml -> embeddable -> embedded. Wszystko fajnie działa, Doctrine ładnie mapuje, no ale trzeba też jakoś te dane pobierać i wstawiać do bazy, więc tworzymy sobie Criteria wyszukiwania. Jeżeli użyte byłyby proste typy, to criteria byłoby np

[
'bookingId' => 'booking_id',
'operator' => 'equal',
@ajgoron: Nie mamy DevOpsa, który by to ogarnął. Jeszcze 1.5 roku temu deployment był przy użyciu FileZilla.

Amazon CodeBuild Buduje wszystko, pakuje do .zip i później rozpakowuje to w odpowiednim miejscu, na odpowiednim serwerze. Właśnie pobrałem sobie takiego zipa na 420mb.
  • Odpowiedz
#php #symfony #doctrine

Używam EntityListener, w postLoad robie deszyfrowanie, w prePersist / preUpdate szyfrowanie pola x.
Generalnie działa to dobrze, ale w preUpdate zawartość changeset - x - oldValue jest zaszyfrowana, tak jakby postLoad w ogóle było ominięte, tak ma to działać? Jak robię dump w odpowiednich momentach wszystko jest ok.

Czyli
@gajowy_marucha:
setField(string $value) {
$this->field = $value;
$this->setFieldEncrypted(null); // trigger change on mapped field so onFlush can update encrypted value
  • Odpowiedz
Mireczki, robił ktoś w #doctrine uniwersalną metodę do szukania?
Ja próbowałem ale po miesiącach używania doszedłem do wniosku, że więcej szkody niż pożytku.
Chciałem mieć jedną metodę obsługującą parametry, warunki itp. Ale koniec końców zawsze zdarzał się szczególny przypadek który i tak trzeba było osobno zrobić.

W entity Repository robiłem coś w ten deseń:

protected
#symfony #doctrine Pobieram encję A z repozytorium (findBy), następnie przypisuję tą encję do encji B (które są w relacji OneToMany). Standardowo ->setEntityB($entityB);. Symfony zwraca mi błąd, że encja A jest niesperzystowana. Jakim cudem, jeśli pobieram ją z bazy, przy użyciu metody Symfony?

#php #webdev #programowanie
@bmLq: @aso824:

Entity manager injected into my service are lazy loaded, but entity manager injected in Repository, defined as service, are not lazy loaded. So Entity are managed by different instances of a same "manager configuration".


Takie wyjaśnienie znalazłem.

Teoretycznie $this->em->getRepository miało rozwiązać problem... ale nie rozwiązuje.
  • Odpowiedz
#symfony #doctrine
#php #webdev #programowanie

Mam 2 encje które mają relację do encji Kategorii. W encji Kategorii mam pole określające typ kategorii (stworzona dla ułatwienia, integer). Stworzyłem formularz do jednej z 2 encji, gdzie m.in. wybieram kategorię. Chcę, aby wyświetlały mi się wyłącznie kategorie określonego typu (te powiązane z daną encją). W jaki prosty sposób mogę to zrobić? Jakiś warunek w ORM
@Jurix: Pole w formularzu ustawiasz jako Entity Type i wtedy Query Builderem możesz określić, które rekordy mają być wyświetlone. Dokładnie tak jak tutaj w sekcji "Using a Custom Query for the Entities" link
  • Odpowiedz
Musiałem zrobić refactoring i pozamieniać wszystkie boolean w bazie z isCancelled na pole daty dateCancelled. I to mialoby dzialac jako flaga, jesli date_cancelled IS NULL znaczy ze isCancelled = 0;

Problem zaczyna się w kodzie, jest sporo miejsc, gdzie użyty jest zwykły findBy oraz findOneBy. Nie wspierają one jednak IS NULL czy IS NOT NULL i nie ma szans sprawdzić czy encja jest cancelled czy nie jeśli polem jest data.

Można dodać metode do repo, ale problem jest taki, ze tych metod musialoby byc duzo. FindBy uzyte jest w wielu miejscach w roznych konfiguracjach, filtruje rozne pola, nie tylko isCancelled. Dodatkowo, refactoring obejmuje ok 5 encji, więc sporo tych miejsc jest.

Jak
Problem zaczyna się w kodzie, jest sporo miejsc, gdzie użyty jest zwykły findBy oraz findOneBy. Nie wspierają one jednak IS NULL czy IS NOT NULL i nie ma szans sprawdzić czy encja jest cancelled czy nie jeśli polem jest data.


@spike200: Na przyszłość zrób swoją własną klasę repozytorium w której trzymasz wszystkie zapytania. Gdybyś tak zrobił to uniknąłbyś tego problemu.

Czy w doctrine tez daloby sie dodac taki jakby filtr?
  • Odpowiedz
@ghost1511: No chyba to po prostu przeniose do repo, wszystkiego nie, ale akurat te czesc. W sumie moge to w miare skategoryzowac i dodac pare argumentow i powinno to pokryc wiekszosc rzeczy.

Co do wywalania tego pola, to w sumie sam nie wiem po co to robic. Bylo to zaplanowane z góry, ja to mam tylko zrobić, podobno używanie datecancelled zamiast iscancelled jest lepszym standardem. I jak masz
  • Odpowiedz
Hej mam ogromny problem z utworzeniem bazy danych.
Wydaje mi się, że projekt nie ma dostępu do mysql.
Poszukuję rozwiązania, znajdzie się dobra duszyczka aby pomóc?

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
[PDOException]
@nehemiah: dzięki, spojrzę na to i przetestuję. Na co dzień jestem frontendowcem i zazwyczaj korzystam już z gotowego API, ale lubię zdobywać nową wiedzę :P

Może ja coś źle zaprojektowałem i nie powinno się robić takich zagnieżdżeń wielokrotnych? Bo w niektórych widokach, w których będe używał konkretnych obiektów nie będę potrzebował ich wszystkich składowych więc wydaje mi się bez sensu zwracanie ich z serwera i chciałbym mieć wpływ na to
  • Odpowiedz
Tworzę stronę do faktur na zaliczenie (w Symfony3) i chciałbym stworzyć raport podsumowujący zysk/stratę miesiąc po miesiącu. Niestety moim sposobem (podanym poniżej) nie wyświetlają się miesiące dla których nie ma rekordów (np. w lutym nie było wydatków ani zysków to wyświetl w lutym 0).

//query to generate profit report
$query=$entityManager->getRepository(Invoice::class)
->createQueryBuilder('i')
->select(' sum(i.netValue) AS netSum, MONTH(i.createDate) AS month, YEAR(i.createDate) AS year, i.incoming AS incoming')
#symfony #doctrine #php
Mam problem z doctrine/konfiguracją.
Mam encję Order oraz powiązane manyToOne User i Shipping. Ustawiam istniejące encje User i Shipping w obiekcie Order i po persist($order) + flush dodaje mi nowy wpis w Shipping oraz w User. Jeśli mam cascade: ["persist"] w konfiguracji to chce dodać rekord, jeśli tego nie mam to rzuca mi wyjątkiem, że albo mam skonfigurować albo zrobić ręcznie persist(). Encje
@masterix: Postawię diagnozę domyślając się niektórych rzeczy. ;-)

Widzę, że obsługujesz to wszystko sesją, więc domyślam się, że cały proces nie dzieje się w jednym żądaniu, tylko jest rozłożone na kroki (jakiś formularz kilku-krokowy czy coś).
A więc wyciągasz Shipping i Usera z repo, przypisujesz do ordera, ale zapis jest w późniejszym żądaniu i tu masz problem.

Wyciągając obiekt order (wraz z przypisanymi zależnościami) z sesji w nowym żądaniu powoduje, że z punktu widzenia User i Shipping wzięły
  • Odpowiedz
@zakopiak: W ogólności raczej to było problemem. Gdy za pierwszym razem sprawdzałem to robiąc cały zapis w jednej akcji kontrolera to musiałem coś spieprzyć, że mi też nie pykło. Dzięki za pomoc
  • Odpowiedz