Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony/Propel]Nazwa pola z PK
Forum PHP.pl > Forum > PHP > Frameworki
athabus
Nie wiem czy to godziny czy ciśnienie ale nie mogę znaleźć jednej rzeczy.
Próbuje utworzyć validator w symfony, który będzie sprawdzał czy podana wartość jest unikalna. Problem w tym, że domyślny UniqueValidator sprawdza wszystkie wiersze i przy update wywala wyjątek. Chcę zrobić filtr do formularza, który przy sprawdzaniu unikalności pominie wartość z danego wiersza.

Utknąłem na jednym małym szczególe... Jak pobrać nazwę pola z Primary Key znając nazwę klasy.

Czyli przykładowo chcę sprawdzić czy w tabeli User nie występuje mail xxx@o2.pl z pominięciem wiersza o id=4 - nie znam jednak nazwy pola z Primary Key i nie wiem jak je wydobyć dynamicznie...
phpion
Nigdy tego nie robiłem ale wydaje mi się, że powinno zadziałać:
- $mapBuilder = [Model]Peer::getMapBuilder()
- $map = $mailBuilder->getDatabaseMap()
- $map->getPrimaryKey()
Nie daję jednak głowy, nie sprawdzałem.
athabus
Dzięki za odpowiedź ale w Symfony 1.0 to nie zadziałało - interfejs DatabaseMap nie ma metody getPrimaryKey() sad.gif

Niemniej przeglądając kod sfUniqueValidator zauważyłem coś o czym (chyba) nie ma mowy w dokumentacji.
Podczas sprawdzania czy dany wpis jest unikalny validator sprawdza czy formularz nie zawieral pola z nazwa kolumny primary key (gdy ma sie obiekt to łatwo odczytać nazwę tego pola). I jeśli znajdzie tą nazwę to ignoruje dany wiersz.

czyli przykładowo jeśli sprawdzam unikalność maila dla obiektu user i w formularzu dodam ukryte pole user_id o wartości np. 15, to validator nawet jeśli znajdzie wiersz 15 to i tak go zignoruje i zwróci, że mail jest unikalny. Ważna kwestia pole musi nazywać się dokładnie tak jak pole w bazie czyli user_id a nie np. userId (tak jak ja miałem).
Szkoda, że nie znalazłem tego w dokumentacji bo bi mi zaoszczędziło 1h zastanawiania się jak to obejść ;-)
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-2025 Invision Power Services, Inc.