![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Co potrzebuję.
1 domyślne połączenie które musi być nawiązanie z BD (dane pobierane z parameters.yml) Tam pobieram niezbędne dane które później muszą być zapisane np. w sesii 2 połączenie które ma być nawiązywane (może być zastępowane poprzednie). Dane będą pobierane z plików konfiguracyjnych na podstawie adresu URL. Czyli w url mam: http://domain.com/conn1/.... Parametr "conn1" będzie zawsze obecny w URL, bo na jego podstawie będę się przełączał przez BD. Jak? Człowiek dostał S3 do nauki i takie problemy (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 144 Dołączył: 22.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Bardzo prosto i przyjemnie
https://symfony.com/doc/current/cookbook/do...y_managers.html + jakiś listener wybierający odpowiednie połączenie. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ahh kurcze, pod latarnią najciemniej (IMG:style_emoticons/default/biggrin.gif)
A możesz naprowadzić na jakieś rozwiązanie ? Symfony to jeszcze czarna magia (IMG:style_emoticons/default/smile.gif) Pomyślałem nad nadpisaniem getManager() ale to nie jest chyba zbyt dobry pomysł. Choć może stworzenie swojego wrappera na doctrine do pobierania managera to nie głupi pomysł. PS. A czy przypadkiem nie będzie się pluł o brakujące properties '%database_driver2%' itd? bo chyba tak miałem jak próbowałem różnych rozwiązań z sieci. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 144 Dołączył: 22.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Chodziło mi o rozwiązanie mniej więcej coś w tym stylu
https://stackoverflow.com/questions/1510873...585284#24585284 Wyłapujesz requesta, zmieniasz połączenie na jakie chcesz i puszczasz dalej (IMG:style_emoticons/default/smile.gif) Co do nadpisywania getManagera, to raczej niebardzo, ale parametry możesz ewentualnie zmieniać (chociaż to też może się to zemścić po czasie (IMG:style_emoticons/default/wink.gif) ), ewentualni tak jak piszesz, że jakiś wrapper/manager połączeń też powinien się sprawdzić. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Oh yeaaa (IMG:style_emoticons/default/biggrin.gif)
To mi się sprawdzi idealnie w sumie. Chociaż tak na prawdę to nawet nie potrzebuję 2 połączeń, a jedynie podmianę domyślnego na inne po pobraniu niezbędnych danych z 1-szego połączenia. Tak więc bajera (IMG:style_emoticons/default/smile.gif) Dzięki (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 182 Pomógł: 9 Dołączył: 30.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o ConnectionWrapper w Doctrine. napisałem nawet do tego symfonowego bundla, plus mogę dostarczyć nieco kodu poglądowego (IMG:style_emoticons/default/smile.gif) Daj znać. Ta technika ("przełączalna baza") to multitenant database sie ogolnie nazywa chyba. w swoim projekcie mam jedną podstawową bazę dla wszystkich subdomen projektu oraz po jednej bazie na każdą subdomene. dwa połączenia, dwa entity menagery, dużo baz danych (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Bardzo chętnie zobaczyłbym Twoje rozwiązanie.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 182 Pomógł: 9 Dołączył: 30.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
dwa linki:
https://github.com/gyman/app https://github.com/UirapuruDende/MultidatabaseBundle nie mam zbyt wiele czasu, wiec naprędce napisze tylko; po pierwsze to wszystko sie nadal tworzy, jest brzydkie i uzywane tylko przeze mnie (IMG:style_emoticons/default/smile.gif) multidatabase bundle dostarcza kilka rzeczy: 1) klasę connection wrapper, której używam w configu doctrine w gyman/app. 2) dostarcza też listener dla "command" - są commandy doctrinowe (schema, fixtury), które musisz wykonać na pewnej konkretnej bazie - listener do wskazanych commandów dodaje parametr, według którego możesz wyłapać sobie interesujacą Cię baze i przeprowadzić na niej operacje. jesli tego nie zrobisz - zadziała jak zwykle na podstawowej. potrzebne do tego rzeczy również w config.yml w gyman/app siedzą bundle wymaga by dostarczyc mu serwis, który dostarczy tzw. Tenanta. W moim przypadku (w gyman/app) jest request listener, który odczytuje subdomene i na jej podstawie tworzy tenanta i przekazuje go do multidatabase bundle, który przełącza na podstawie tych danych connection. Nie widze problemu, by napisać własną klasę, która te dane pobierze np. z encji usera, czy innego miejsca. generalnie zasada działania jest prosta. pozostało mi otestować, uporządkować, odokumentować i dodać może coś co pozwoli hurtowo przelecieć wszystkie bazy tą samą operacją (np. migracją). do testów też warto mieć to rozwiązane tak, by test sie uruchamiał na odpowiednich ustawieniach (tak w moim wypadku jest, testy gyman/app lecą na "drugim" połączeniu zafiksowanym w config_test.yml na sqlite). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 12:17 |