2012-03-04 10 views
7

Jeśli korzystasz z ORM RedBean, musisz dodać klucz podstawowy o nazwie "id" do każdej tabeli w bazie danych?Czy RedBean potrzebuje klucza podstawowego "id"?

W moim db mam kilka tabel, które mają pary kluczy podstawowych z 2 lub 3 pól lub klucze podstawowe o innych nazwach niż "id" (tak, mógłbym zmienić nazwę na "id", ale nie byłoby to " t naprawdę odzwierciedla rzeczywistości, ponieważ nie są identyfikatory)

Przykład:

tabela1 - sklepy posty:

id   INTEGER  PRIMARY KEY AUTOINCREMENT, 
    name   TEXT, 
    title  TEXT, 
    content  TEXT, 

Table2 - przechowuje meta postow:

post   INTEGER  DEFAULT 0,  # <- references "id" from "posts" 
    name   TEXT, 
    value  TEXT, 
    PRIMARY KEY(name, post), 
    CONSTRAINT posts_meta FOREIGN KEY(post) 
    REFERENCES posts(id) ON DELETE CASCADE ON UPDATE RESTRICT 

Czy RedBean będzie działać z tego rodzaju strukturą db?

+0

O ile wiem, to musi mieć 'id' jako klucz podstawowy. Próbowałem go na tabelach bez lub z 'table_id' i to nie działa. Może istnieć sposób dostosowania go do działania, ale nie próbowałem. –

Odpowiedz

10

Niestety, z obecną strukturą tabeli nie można korzystać z usługi RedBean. Każda tabela musi mieć automatyczny klucz podstawowy. Lekki upadek, ponieważ utrudnia integrację z istniejącym już produktem.

Kilka wątków, które udało się wykorzystać Redbean powodu tego ograniczenia, z odpowiedzi od autora, Gabor De Mooij:

http://groups.google.com/group/redbeanorm/browse_thread/thread/6d5582275326744f?pli=1

http://groups.google.com/group/redbeanorm/browse_thread/thread/4fa7b29b453dcdb8

Redbean nie wymaga pola klucza podstawowego nazywać się po prostu "id". Możesz sformatować nazwę kolumny klucza podstawowego zgodnie ze swoimi upodobaniami, używając metody formatBeanID(), jak widać w przykładzie poniżej, który warunkowo prefiksuje nazwę tabeli do "id". np.) tabela users ma klucz podstawowy: users_id. Korzystając z tego formatowania, można uzyskać szczegółowe informacje z nazwą identyfikatora w razie potrzeby.

http://redbeanphp.com/community/wiki/index.php/Prefixes

Mam nadzieję, że ta powściągliwość zostanie zniesiony w przyszłości, ponieważ to naprawdę nie utrudniać integrację z istniejącymi produktami.

EDIT: Jako alternatywa ORM, słyszałem dobrze o Doctrine: http://www.doctrine-project.org/. Nie używałem go osobiście, ale wydaje się, że jest to standard dla wielu osób pracujących z PHP.

EDIT 2: Dzięki i kredyt do Jasona za sprowadzenie na baczność nową metodę integracji Redbean w istniejącym projekcie, gdzie baza danych nie może być ustanowiony dla niego. Chciałem również zaktualizować moją odpowiedź, na wypadek gdyby ludzie nadal odnosili się do tego problemu. Gabor zasugerował tworzenie widoków mapujących do tabel, gdzie można ustawić widok, aby mieć odpowiednią strukturę dla RedBean. Nie testowałem tego osobiście, ale uzyskałem pozytywną opinię od niektórych użytkowników. Dodaje pewne dodatkowe koszty i konserwację podczas zmieniania tabel, ale wydaje się być najlepszą i najbardziej kompletną odpowiedzią na ten problem do tej pory. http://www.redbeanphp.com/faq#beanformatter

+0

Dziennik zmian RedBeanPHP 3.0: "... Usunięto \t Bean Formatter nie możesz ŻADEN DŁUGI dostosować schematu bazy danych (ponieważ to psuje ...)" Używam ReadBean v3.2 i co mam zrobić? –

+1

@Ostrovski Jeśli próbujesz zintegrować RedBean z już istniejącym projektem/bazą danych i potrzebujesz funkcjonalności dostarczanej przez BeanFormatter, wprowadziłbym RedBean 2.2.3. Nie mam pewności, czy warto usunąć BeanFormatter ... Wygląda na to, że RedBean zbliża się do domeny "nowe projekty", w której wdrażasz ją i bazę danych w parze. Sprawdź, czy możesz zaimplementować wersję 2.2.3, lub jeśli chcesz/musisz używać wersji 3.0+, poczytaj o ewentualnym ponownym wdrożeniu tych zajęć, zgodnie z sugestią tego posta: https://groups.google.com/ forum /? fromgroups = #! topic/redbeanorm/wXUeT4Tj2uU – king14nyr

5

Przyjęty odpowiedź nie jest do końca prawda ... Można wykorzystać istniejącą strukturę tabeli - ale trzeba byłoby wdrożyć widok na szczycie każdej z tabel, które pozwalają zmienić nazwę kolumny PKEY być " ID'...Zobacz ten e-mail od Gabor - twórca RedBeanPHP:

https://groups.google.com/forum/#!searchin/redbeanorm/view/redbeanorm/wXUeT4Tj2uU/3AngnmVwZdYJ

+1

W odpowiedzi na jego sugestię wygląda na to, że jest to realistyczne rozwiązanie. To jest faktycznie ten sam link, który zauważyłem w moim komentarzu, wygląda na to, że wątek pozostał aktywny, a Gabor niedawno zaoferował to potencjalne rozwiązanie. Zmienię moją odpowiedź, aby upewnić się, że nikt, kto przychodzi na tę stronę, nie będzie korzystał ze starej, przestarzałej lub niewłaściwej porady. Dziękuję za aktualizację! – king14nyr

+0

Możesz również użyć funkcji exec(), aby zrobić cokolwiek czujesz. ID jest tylko dla fasoli, możesz nadal wstawiać do/update, jak tylko chcesz. – Nick

Powiązane problemy