Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Doctrine] klucz złożony
NorthPole
post 16.08.2012, 11:00:23
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 20.02.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam, mam problem z dodawaniem rekordów do tabeli z kluczem złożonym. Jest to mój pierwszy projekt z doctrine (1.x) i powiem, że tutaj poległem.
Sytuacja wygląda następująco: jest tablica w której trzymam tłumaczenia entries, posiadająca klucz główny składający się z id i lang. Jest ona powiązana z innymi tablicami poprzez id, tzn. mam przykładowo tablicę employees w której mam FK entries.id.
Nie potrafię sobie poradzić z dodaniem rekordów do entries i połączeniem tego z employees.
Po zapisaniu do entries
  1. $entries->lang = 'pl';
  2. $entries->title = 'coś';
  3. $entries->save();
  4. $eid = $entries->identifier();

w $eid mam tylko lang='pl' i nie zwraca mi id (mam null) które potrzebuje do wstawienie kolejnego rekordu np. dla lang='en' oraz do wstawienia do employees
Proszę o sugestie.
Go to the top of the page
+Quote Post
murwazy
post 17.08.2012, 08:48:06
Post #2





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


nie do konca rozumiem, tabela entries to tabela z tlumaczeniami? mozesz napisac nieco jasniej bo nie rozumiem dlaczego laczysz relacjami tlumaczenia do czegos wiecej niz do elementu tlumaczonego. i czy korzystasz z I18n?
Go to the top of the page
+Quote Post
NorthPole
post 17.08.2012, 11:44:52
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 20.02.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Fakt, zbyt mało naświetliłem sprawę;-)
Tłumaczenia są u mnie robione dwutorowo. Drobne elementy, które są stałe w aplikacji, tłumaczone są przez Zend_Translate. Mam tutaj na myśli wszystkie teksty dotyczące obsługi formularzy - labele, errory itp, czy jakieś inne stałe opisy stron. Pozostałe treści, które mogą być edytowane przez użytkowników trzymam w tabeli z tłumaczeniami. Przykładowo, opis zakresu obowiązków pracownika, który może być edytowany przez usera trzymam w tabeli employees jako FK do tabeli z tłumaczeniami (entries). Tabela entries zawiera klucz złożony (id, lang) i inne kolumny typu title czy content zawierające właściwe teksty.
  1. tebela entries
  2. id (PK)
  3. lang (PK)
  4. title
  5. content
  6. ...

  1. tabela employees
  2. id
  3. name
  4. ...
  5. description - FK do entries.id
  6. ...


W zależności od języka rozpoznanego w aplikacji do opisu pracownika wybierany jest odpowiedni tekst (entries->find(id, lang). Tak załatwione są wszystkie elementy mogące być tłumaczone. Jak się domyślasz tabel zawierających relację do tłumaczeń jest sporo. Inna, to chociażby tabela zawierająca opisy plików uploadowanych do aplikacji przez userów. Tam jest kolumna z opisem pliku, który jest tłumaczony w zależności od języka i w tabeli files jest również FK do entries.
Sprawa rozbija się o obsługę klucza złożonego w entries. Doczytałem, że w doctrine 1.2 nie jest to domyślnie rozwiązane.
W związku z tym proszę o sugestie dotyczące rozwiązania tego problemu. Ostatecznie mogę przerobić projekt bazy i zmienić taktykę tłumaczenia. Przyznam, że zatrzymałem się na tym i jestem już dość zdesperowany;-)
Proszę o pomoc.



Go to the top of the page
+Quote Post
murwazy
post 18.08.2012, 01:01:04
Post #4





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


dlaczego nie uzyjesz tego?
http://docs.doctrine-project.org/projects/...viors.html#i18n
Go to the top of the page
+Quote Post
NorthPole
post 20.08.2012, 08:44:18
Post #5





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 20.02.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Dziękuję za podsunięcie tego rozwiązania. Tak jak pisałem, to mój pierwszy projekt z doctrine i dlatego jaszcze nie ogarniam. Widzę jednak, że to rozwiązanie bazuje na dwóch tablicach czyli dla każdej w której mam kolumny tłumaczone muszę stworzyć tabele translations. Strasznie to mnoży byty.
Znalazłem inne rozwiązanie bez kluczy złożonych:
Multilingual database design approaches (przykład 2).
Zastanowię się co lepsze, ale i tak dziękuję za pomoc.
Pozdrawiam
Go to the top of the page
+Quote Post
murwazy
post 20.08.2012, 11:49:36
Post #6





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


doctrine2 ma rozszerzenie, ktore przechowuje tlumaczenia w jednej tabeli
https://github.com/l3pp4rd/DoctrineExtensions -> translatable

D1 ma wbudowane to co podalem - i tez sie to dobrze sprawdza.

a jesli chcialbys w D1 miec jedna tabele z tlumaczeniami to zapewne mialbys problem z laczeniem ich w dqlu, moim zdaniem za bardzo to komplikuje zycie zeby isc w te strone, bo jak wyszukac rekordy po tlumaczeniu bez pisania za kazdym razem nowych metod w klasach *Table?

uzyj i18l wbudowanego w D1 albo przejdz na D2 i uzywaj ktoregos z rozszerzen
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 00:50