2015-04-25 9 views

Odpowiedz

3

Ta oferta pochodzi ze starszej wersji dokumentacji, w sekcji Basic Mapping. Najnowsza dokumentacja nie zawiera już tego tekstu, , ale nadal jest to prawda:.

Sekcja Limitations and Known Issues najnowszej dokumentacji rzuca trochę światła na to:

Dla zachowania kompatybilności pomiędzy wszystkich obsługiwanych dostawców i brzegowych problemów przypadku Doctrine 2 ma NIE zrobić automatyczny identyfikator cytowania.

Z powodu różnych strategii cytowania stosowanych w różnych dostawcach SQL oraz sposobu generowania kodu SQL przez mechanizm ORM, trudno jest znaleźć rozwiązanie, które działa we wszystkich przypadkach. A jeszcze trudniej go utrzymać. To może nie być niemożliwe, ale zespół Doctrine zdecydował, że nie jest wart czasu i (być może, co ważniejsze) złożoności kodu, aby spróbować.

Aby dowiedzieć się, jak złożone jest generowanie kodu SQL, należy przejrzeć kod w pliku git repository.

Powszechnie stosowaną praktyką jest używanie wyłącznie znaków alfanumerycznych (i podkreśleń) do identyfikatorów, a do , a nie używanie zastrzeżonych słów kluczowych. Jeśli podążysz za nimi, nie będziesz potrzebować cytowania identyfikatora.

Jeśli trzeba, bo twój czynienia z bazą starszych, Doctrine oferuje 2 rozwiązania:

  1. Instrukcja cytując identyfikatorów, zobacz sekcję Basic Mapping.
  2. Utwórz widoki bazy danych zgodne z najlepszymi praktykami wymienionymi wcześniej.

PS: Dla tych, którzy nie wiedzą: „identyfikator” robi nie odnoszą się do kluczy podstawowych, ale do nazw tabel, kolumn, indeksów itp

+0

Dzięki za odpowiedź, ale tak naprawdę nie odpowiedział na moje główne pytanie. Czy możesz podać mi przykład złożonych identyfikatorów kwotowania? Zawsze uważałem, że jest tak proste, jak "weź identyfikator typu X" (x = tabela, kolumna, nazwa bazy danych itp.) I "zastosuj do niego strategię cytowania Q (X)" (zwykle po prostu zawijaj w jakieś cytaty) . Czy nie tak jest? –

+0

Myślę, że możesz to zobaczyć w ten sposób: Wyobraź sobie, że tworzysz system, który proponujesz, wspierając wszystkich dostawców DB obsługiwanych przez Doctrine. Teraz wyobraź sobie integrację tego systemu z Doctrine. Spróbuj oszacować czas i zasoby, które zajęłoby. Czy to jest warte zysku, który można uzyskać z posiadania go? –

+0

BTW, głównym powodem tego oświadczenia jest w dokumentacji, ponieważ nie tak dawno temu nie było dobrze opublikowane dyskusja: Większość ORMs i tym podobnie stan są bezpieczne od zastrzyku SQL z powodu cytowania. Ale większość tylko cytuje wartości, a nie identyfikatory. To zostało uznane za wprowadzające w błąd. Tak wiele ORMów zaktualizowało swoją dokumentację, aby wyraźnie zaznaczyć, że nie cytują identyfikatorów. –