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, #symfony, #doctrine no i odrobinę
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.
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, #doctrine i #ddd. No i skoro #ddd to
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.
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 #programista15k w #php,
CppPolska - Koncept migracji bazodanowych i Doctrine 2

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

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

Pobierz
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 w #symfony, #doctrine i #
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.
Dzieeeeń dobry! ( ͡° ͜ʖ ͡°) Zrobiłem sobie kilka dni przerwy od statków i naskrobałem nowy wpis ( ͡º ͜ʖ͡º) Bo gdzieś tam przemyślenia mnie wzięły odnośnie tego, jak piszemy aplikacje, i dlaczego one niekoniecznie szybkie są ( ͡° ͜ʖ ͡°)- No więc łapcie! ()

Kilka porad
CppPolska - Dzieeeeń dobry! ( ͡° ͜ʖ ͡°) Zrobiłem sobie kilka dni przerwy od statków i...

źródło: flavien-ESXhISyyHho-unsplash-scaled

Pobierz
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 encja ma przynajmniej jedno pole ustawione na true ale może też mieć oba. W przypadku gdy ma dwa na true chciałbym otrzymać dwa rekordy tej samej encji jeden z withPrice: true withoutPrice: false i drugi odwrotnie.

Pobieram listę z paginacją i robiąc to na
@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 ...
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.
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
@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.
#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
1) postLoad, x=1
1) dump - pole x jest odszyfrowane - OK
2) zmieniam x=2 - flush i teraz:
-
@gajowy_marucha:
setField(string $value) {
$this->field = $value;
$this->setFieldEncrypted(null); // trigger change on mapped field so onFlush can update encrypted value
}

onFlushEvent...
$entity->setFieldEncrypted($this->encryptor->encrypt($entity->getField()));

Na 1 polu chyba się nie da bo recomputeEntityChangesSet() CHYBA (nie sprawdziłem na 100%) tylko merguje nową zmianę i starą (nawet jeżeli ustawisz oryginalną wartośc). zobacz sobie zawartość tej metody:
[...]
if (isset($this->entityChangeSets[$oid])) {
$this->entityChangeSets[$oid] = array_merge($this->entityChangeSets[$oid], $changeSet);
[...]

w ogóle z czego wynika zapotrzebowanie na takie szyfrowanie?
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 $searchable = ['property' => 'name', 'comparator' => 'LIKE'];
Plus oczywiście bardziej skomplikowane przypadki z funkcjami (np. DATE)
#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.
#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 encji żeby sprawdzało to pole typu, w formularzu ograniczyć listę
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ć
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?


https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/filters.html
@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 ORM
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]
PDO::_construct(): The server requested authentication method unknown to the client [cachingsha2_password]

#php #doctrine #mysql
#programowanie #php #serializacja #json #symfony #symfony4 #doctrine #orm

Siema phpmirki,
piszę API RESTowe w Symfony 4 i za pomocą Doctrine pobieram sobie z bazy danych listę obiektów klasy ClassA, która wśród swoich pól prywatnych ma jedno pole typu ArrayCollection i teraz chcę zwrócić wszystko jako JSON, aby miało to strukturę mniej więcej

[
{
"id": 1,
"name" : "Blabla",
"ClassB" : [{
"id": 9,
"name": "Urabura",
"status": 0
} { ...
@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 która
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')
->where('i.owner=:owner')
->groupBy('year')
->addGroupBy('month')
->addGroupBy('incoming') //faktura przychodzaca czy wychodzaca
#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 są powiązane, ale nie rozumiem dlaczego
@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
@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