Article View: pl.comp.lang.php
Article #232422Re: Symfony 4 - jak projektować bazę danych pod Doctrine?
From: Marek S
Date: Tue, 23 Apr 2019 17:10
Date: Tue, 23 Apr 2019 17:10
58 lines
3592 bytes
3592 bytes
W dniu 2019-04-23 o 15:18, ww pisze:
> A w jaki sposób ORM miałby te triggery obsłużyć? Bo ja ich używam do
> wielu rzeczy o których ORM kompletnie nie musi wiedzieć.
>
> I doctrine wspiera tworzenie różnych "nieporzenoszalnych"
> elementów składni SQL pod dany silnik.
O, właśnie - to mnie najbardziej interesuje. Nie chcę poświęcać
wydajności bazy na rzecz typowego, wygodnego dla programistów,
posługiwania się Doctrine, gdzie co niektórzy nie bardzo wiedzą, co to
SQL (autentycznie). Chciałbym szerzej korzystać z tego środowiska.
W związku z tym mam parę pytań:
1. Czy posługujesz się migracjami do tworzenia nietypowych struktur
poprzez dopisanie do nich własnych SQLi? Czy może porzucasz migracje i
tworzysz bazę "normalnie", w narzędziach do takich rzeczy a potem
jedynie importujesz niektóre tabele do ORM?
2. Co robisz jeśli ORM totalnie nie wspiera jakichś mechanizmów? Np.
pierwszy test, jaki przeprowadziłem, dotyczył tabel polimorficznych w
PostgreSQL. Mega użyteczna rzecz ... ale nie da się ich zaimportować do
ORM'a, który tylko potrafi udawać polimorfizm poprzez "mapowanie"
prostych tabelek. Z drugiej strony chciałbym, aby ORM potrafił
zapisywać/odczytywać do/z takowych. Jak przekładasz to na ograniczone
struktury ORMowe? Masz godne uwagi linki?
P.S.
Powyższy przykład z tabelami byłby do rozwiązania - po prostu ręcznie
napisałbym encję i repozytorium. Ale w przypadku np. własnych typów, czy
korzystania z procedur napisanych w PlPgSQL i nie wiem czego jeszcze -
tak prosto może nie pójść. Jestem jeszcze na początku edukacji, stąd
moje zapewne trywialne pytania.
3. Na koniec... z czystej ciekawości spytam: czy istnieje jakiś natywny
sposób dla ORMa aby usunąć/zaktualizować pole w jakimś rekordzie bez
niepotrzebnie generowanego SELECT'a?
Szukałem po Stack'u lecz wszędzie widziałem jedynie to, że ludzie
posługują się SQLem by wykonać DELETE FROM tabela WHERE id=5. ORM wymaga:
// tu wykonywany jest nadmiarowy select
$user =$entityManager->find('Users', $id);
$entityManager->remove($user);
$entityManager->flush();
Jakoś nie chce mi się wierzyć aby ORM nie potrafił zwyczajnie usunąć
rekordu z bazy i w tym celu generował nadmiarowe zapytania. Przekopałem
dokumentację Doctrine i nie znalazłem odpowiedzi.
Jeśli masz jakieś sugestie, nawet nie powiązane z powyższym, a z którymi
walczyłeś z naginaniem ORM'a - to będę wdzięczny za info.
--
Pozdrawiam,
Marek
Technical Details
Message-ID:
<q9ngu2$rla$1@node2.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailReferences:
<q9foak$p72$1@node2.news.atman.pl> <slrnqboo9s.e87.wojciech.bancer@pl-test.org> <5cbf10a8$0$482$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: Marek S <precz@spamowi.com> Newsgroups: pl.comp.lang.php Subject: Re: Symfony 4 - jak projektować bazę danych pod Doctrine? Date: Tue, 23 Apr 2019 19:10:19 +0200 Organization: ATMAN - ATM S.A. Lines: 58 Message-ID: <q9ngu2$rla$1@node2.news.atman.pl> References: <q9foak$p72$1@node2.news.atman.pl> <slrnqboo9s.e87.wojciech.bancer@pl-test.org> <5cbf10a8$0$482$65785112@news.neostrada.pl> NNTP-Posting-Host: 89-70-94-204.dynamic.chello.pl Mime-Version: 1.0 X-Trace: node2.news.atman.pl 1556039426 28330 89.70.94.204 (23 Apr 2019 17:10:26 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Tue, 23 Apr 2019 17:10:26 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 In-Reply-To: <5cbf10a8$0$482$65785112@news.neostrada.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit