Michal_Sz
17.03.2015, 20:34:37
Witam,
Chciałbym zmapować tabelę z bazy mssql, niestety podczas takiej próby pojawia się błąd:
Table xxx has no primary key. Doctrine does not support reverse engineering from tables that don't have a primary key.
Oczywiście tabela xxx jest inną tabelą niż ta którą chcę zmapować.
Czy może mi ktoś podpowiedzieć jak mogę rozwiązać taką sytuację?
Tabela xxx jest nie do ruszenia, ponieważ wykorzystywana jest gdzie indziej
Jak mapujesz? Wrzuć co wykonujesz.
Michal_Sz
17.03.2015, 20:58:51
Zaczynam od tego:
console doctrine:mapping:convert yml ./src/My/MyBundle/Resources/config/doctrine/metadata/orm --from-database --force --em=moja_baza --filter=nazwa_tabeli
Już tutaj pojawia się błąd. To samo dzieje się przy console doctrine:mapping:import
ikssde
17.03.2015, 21:29:27
W czym problem? Doctrine po prostu nie umożliwia wykonania takiej operacji na tabeli która nie ma klucza głównego. Dodaj ten klucz na kopii tabeli albo mapuj ręcznie.
Michal_Sz
17.03.2015, 21:39:18
Ok, ale dlaczego podczas mapowania tabeli_1 błąd ma związek z inną tabelą tej bazy?
Rozumiem, że angielskiego można nie znać ale jaki problem to przetłumaczyć, te komunikaty są napisany dla ludzi wystarczy to przeczytać i masz odpowiedź

jak nie znasz podstaw relacyjnych baz danych to nie ma co iść dalej, najpierw trzeba się wtedy z nimi zapoznać
Michal_Sz
17.03.2015, 21:48:03
Rozumiem co mówi komunikat, czy chodzi o to, że tabela którą chcę zmapować jest powiązana z tabelą której dotyczy błąd?
http://www.wikiwand.com/pl/Klucz_g%C5%82%C3%B3wny Tak chodzi o zachowanie relacji, bo operujesz na bazie relacyjnej a nie nosql
Michal_Sz
17.03.2015, 21:55:41
No właśnie tak przypuszczałem, ale tabela którą chciałbym zmapować nie jest powiązana z żadną inną.
Co w tym wypadku mi pozostaje? Ręczne stworzenie Entity?
Klucz główny do tabeli dodałeś już?
Michal_Sz
17.03.2015, 22:04:04
NIe, ponieważ tak jak wspominałem wcześniej nie mogę nic zmieniać w tej tabeli dlatego szukam rozwiązanie na zmapowanie tabeli która oczywiście ma klucz główny.
ikssde
17.03.2015, 22:15:35
Wygląda na to, że pomimo użycia parametru filter analizowana jest cała baza danych, natomiast wspomniany filtr ogranicza jedynie to co generator wypluwa.
Zrób sobie kopię tej bazy danych, dodaj klucz główny albo skasuj tabelę, która powoduje problem i wtedy zrób mapowanie. Głównym celem Doctrine jest co innego niż mapowanie obiektów na podstawie bazy danych więc nie ma się co spodziewać rewelacji w tej kwestii.
Michal_Sz
17.03.2015, 22:28:46
Chyba rzeczywiście nie pozostaje mi nic innego jak stworzenie bazy z kopią interesującej mnie tabeli, zmapowanie tabeli i korzystanie z niej na oryginalnej bazie.
Bo rozumiem, że takie rozwiązanie nie będzie generować problemów ?
No ale ustawienie klucza nie wygeneruje Ci problemów, chyba ze chodzi o to że nie masz gdzie go postawić, ale to wtedy baza jest źle zbudowana
Michal_Sz
18.03.2015, 08:49:59
niestety nie wiem czy udałoby się coś zmienić w bazie pod kątem kluczy, ponieważ z bazy korzystają inne programy, ja jedynie potrzebuje skorzystać z kilku tabel.
Dlatego najlepszym rozwiązaniem będzie stworzenie kopii bazy, ale tylko z tymi kilkoma tabeli i zmapowanie ich, a potem korzystanie na orginalnej bazie, chyba że się mylę?
ikssde
18.03.2015, 21:30:50
Tak będzie najlepiej. Nic nie stoi na przeszkodzie żebyś tak zrobił.
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.