Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Doctrine] klucz złożony
Forum PHP.pl > Forum > Gotowe rozwiązania > Skrypty obsługi baz danych
NorthPole
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.
murwazy
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?
NorthPole
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.



murwazy
dlaczego nie uzyjesz tego?
http://docs.doctrine-project.org/projects/...viors.html#i18n
NorthPole
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
murwazy
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2019 Invision Power Services, Inc.