![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 18 Dołączył: 2.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dopiero zaczynam swoją przygodę z Doctrine i natknąłem się na następujący problem.
Załóżmy, że mamy następującą encję:
Jak widać User posiada dwa pola Kod id (int) i Kod email (string) . Encja będzie dzialać. Ja natomiast nie chcę aby email był typu string. Chciałbym aby w tym obiekcie email był na przykład obiektem typu Email. W jaki sposób mogę zautomatyzować tę konwersję? W dokumentacji znalazłem to, ale wydaje mi się, że nie do tego to służy. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 18 Dołączył: 2.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ale nie ma żadnej możliwości żeby obiekt ten encji posiadał EmailObject pod emailem? nie chodzi mi o to aby ręcznie ustawić EmailObject przez setter, tylko żeby encja po pobraniu z bazy od razu konwertowała string na EmailObject.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Link, który podałeś, służy do rozwiązania Twojego problemu. W taki sposób Doctrine konwertuje daty.
Cytat Jeżeli w bazie w kolumnie email bedziesz trzymał email (string) to jest to string, jeżeli referencje do innej tabeli to bedzie tam Mapping. Nie mogę się z tym zgodzić. Doctrine nie ma służyć do zmiany danych z bazy na obiekty, tylko ma utrwalać obiekty w bazie danych. Nie można skupiać się na tym co ma być w bazie tylko na tym co będzie utrwalane. Utrwalanie to ma być przezroczyste, tak jakby w ogóle nie było żadnej bazy danych a obiekty istniały cały czas pomiędzy każdym wywołaniem skryptu. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 18 Dołączył: 2.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nie mogę się z tym zgodzić. Doctrine nie ma służyć do zmiany danych z bazy na obiekty, tylko ma utrwalać obiekty w bazie danych. Nie można skupiać się na tym co ma być w bazie tylko na tym co będzie utrwalane. Utrwalanie to ma być przezroczyste, tak jakby w ogóle nie było żadnej bazy danych a obiekty istniały cały czas pomiędzy każdym wywołaniem skryptu. Czyli co? Czy ja źle pojąłem ideę Encji (Entity) i nie może ona być traktowana jako model? A jedynie ma być ono odwzorowaniem jednego wiersza z tabeli bazy danych. Ignorując w ogóle logikę aplikacji? Ten post edytował ghost1511 3.10.2014, 09:15:11 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 18 Dołączył: 2.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
No dobra... W tym przypadku mógłbym utworzyć nowy typ i go odpowiednio konwertować. A teraz taki przypadek:
Rekordy bazy danych: Kod EMAIL NAME ROW_DATE it@noname.pl It office 2014-11-03 00:00:00 office@noname Some name 2014-11-12 00:00:00
Czy teraz jest możliwa konwersja typów? Tzn z tabeli EMAIL i NAME lądują w obiekcie EmailObject, a po zmianach zapis ląduje w odpowiednich kolumnach w bazie? Jedyne co mi przychodzi do głowy to w encji usunąć (lub zmienić na prywatne) funkcje getEmailAddres, i getName(). Utworzyć publiczną funkcję getEmailObject korzystający z pól encji. Ten post edytował ghost1511 3.10.2014, 09:53:14 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Teraz to już nie wiem co chcesz zrobić, ale skoro obiekt reprezentujący adres mailowy ma mieć więcej właściwości to musisz zrobić tak jak sugerował skowron-line, czyli wykorzystać mapowanie relacji w Doctrine.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 13:07 |