Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Symfony Encje
Malinaa
post
Post #1





Grupa: Zarejestrowani
Postów: 578
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Witam, mam kłopot przy tworzeniu encji w Symfony,

Tworzę encje np.

  1. class User implements UserInterface
  2. {
  3. /**
  4.   * @ORM\Id
  5.   * @ORM\GeneratedValue
  6.   * @ORM\Column(type="integer")
  7.   */
  8. private $id;
  9.  
  10. public function getId(): ?int
  11. {
  12. return $this->id;
  13. }
  14. }


a chcę, aby było tak:

1. tabela z prefixem = ok / zrobione
2. klucz - id_user / standardowo generuje id i nie mogę zmienić na id_user bo się wysypuje

  1. class DbmUsers implements UserInterface
  2. {
  3. /**
  4.   * @ORM\Id
  5.   * @ORM\GeneratedValue
  6.   * @ORM\Column(type="integer")
  7.   */
  8. private $id_user;
  9.  
  10. public function getIdUser(): ?int
  11. {
  12. return $this->id_user;
  13. }
  14. }


Wykonuje migracje: php bin/console make:migration
i wyskakuje błąd: Column name `id` referenced for relation from App\Entity\DbmUsers towards App\Entity\DbmUsersProfile does not exist.

Jak zmienić automatycznie wygenerowane id na id_user?

Ten post edytował Malinaa 3.02.2021, 23:03:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




1) To jest bardziej Docrtine a nie Symfony wiec w docrtine dokumentacji szukaj pomocy
Dodaje NAME przy ORM\Column

2) A po grzyba w ogole chcesz to zmieniac? nie ma sensu dodawac do id nazwy tabeli. Nazwe tabeli masz w tabeli. Juz nasi pra pradziadkowie stosowali ID jako nazwe kolumny dla klucza glownego i nie ma wiekszego sensu tego zmieniac
Go to the top of the page
+Quote Post
LowiczakPL
post
Post #3





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


Mam wrażenie że zależy Ci na tym id_user bo tak masz w jakiejś gotowej bazie, i potrzebujesz integracji, wystarczy dodać name.

  1. /**
  2.   * @ORM\Id
  3.   * @ORM\GeneratedValue
  4.   * @ORM\Column(type="integer", name="id_user")
  5.   */
  6. private $id;


Jeśli jednak nie to pomiń to id, niech sobie będzie, i dodaj swoje pole id_user

Ten post edytował LowiczakPL 4.02.2021, 09:53:32
Go to the top of the page
+Quote Post
Malinaa
post
Post #4





Grupa: Zarejestrowani
Postów: 578
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Cytat
A po grzyba w ogole chcesz to zmieniac?


Dzięki za informacje, bo zastanawiałem się, czy z tą zmianą id na name="id_user" to dobry pomysł,
ale jeśli już nasi pra pradziadkowie stosowali ID to zostawię id.

Cytat
Mam wrażenie że zależy Ci na tym id_user


Chciałem id_user, bo uważam, że tak byłoby mi wygodniej przerobić pod Symfony 10 letnią bazę danych,
w której to muszę zmienić wszystko nazwy tabel, kolumn ich kolejność etc. i nie przestawić żadnego rekordu,
aby odpowiadał rekordom z kolejnych (edytowanych) tabel.

Kiedy mam "ręcznie" wykonać taką operacje wolałbym mieć id_user ponieważ jest unikalną nazwą,
natomiast samo id może wystąpić wszędzie również w rekordzie w słowie np. identyfikator, width, widok...
i przy tysiącach rekordów nie zrobić błędu -> wszystko jest możliwe (IMG:style_emoticons/default/wink.gif) Coś wymyślę (IMG:style_emoticons/default/smile.gif)

Chyba, że macie pomysł jak dokonać integracji takiej bazy, gdzie nic nie pasuje do Symfony,
gdzie struktura tabeli, nazwy kolumn będą nowe, ale rekordy muszą pozostać "nie ruszone",
[rekord] id tabeli użytkownicy musi odpowiadać [rekordom] artykułów, zdjęć, komentarzy itd.
id kategorii artykułów, galerii i innych modułów musi odpowiadać id artykułów, galerii...
id to id and id i jest ku*wa kosmos, do przerobienia na encje jedyne kilkadziesiąt tabel z ID
i wstrzyknięcie rekordów, które muszą się ze sobą zgadzać.

Ten post edytował Malinaa 4.02.2021, 17:03:00
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Kiedy mam "ręcznie" wykonać taką operacje wolałbym mieć id_user ponieważ jest unikalną nazwą,
natomiast samo id może wystąpić wszędzie również w rekordzie w słowie

Dobrze, ale jesli przerabiasz to na symfony/doctrine, to ID nie bedzie sobie ot tak lezalo obok innego ID. Kazde ID bedzie powiazane z konkretnym obiektem i naprawde trzeba sie mocno starrac byc tam cos wtedy pomylic
Go to the top of the page
+Quote Post
Malinaa
post
Post #6





Grupa: Zarejestrowani
Postów: 578
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Na początku chciałem przerobić te tabele w Notepad, ale zrobił się z tego kosmos,
Zajrzałem do phpMyAdmina i widzę, że tu można to zrobić możliwie sprawnie,
dane nie będą leżały na "jednej kartce papieru" i wówczas będzie tak jak piszesz
i dane będą widoczne w obiektach.

Patrząc na bazę w phpMyAdmin (na serwerze) widzę, że każde id ma atrybut unsigned, w Symfony domyślnie nie ma atrybutu.
Czy nie przeszkadza kiedy id będzie bez atrybutu?
  1. /**
  2.   * @ORM\ManyToOne(targetEntity=PreArticlesCategory::class, inversedBy="preArticles")
  3.   * @ORM\JoinColumn(nullable=false)
  4.   */
  5. private $category;

Próbowałem dodać tak
@ORM\JoinColumn(nullable=false, options={"unsigned":true})
ale przy $category(id) nie działa
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Czemu ustawiasz to przy jakims JOINCOLUMN?

https://stackoverflow.com/questions/7692686...-unsigned-value
Go to the top of the page
+Quote Post
LowiczakPL
post
Post #8





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


Jeśli masz starą bazę to nie kombinuj z zakładaniem Encji ręcznie bo się zamęczysz, ja pracuję na legacy z setkami tabel i robiłem to z automatu, nastepnie delikatnie zmodyfikowałem.
Są do tego automaty poczytaj to https://symfony.com/doc/current/doctrine/re...ngineering.html
Go to the top of the page
+Quote Post
Malinaa
post
Post #9





Grupa: Zarejestrowani
Postów: 578
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Cytat
Czemu ustawiasz to przy jakims JOINCOLUMN?

Encje utworzyłem w terminalu i Symfony automatycznie daje tu JoinColumn i byłoby dobrze, ale brakuje unsigned
Kiedy zamienię JoinColumn na Column pole traci swoje parametry, gubi klucz, nazwa zamiast category_id = category itd.

Dałem tak:
@ORM\Column(type="integer", name="cotegory_id", options={"unsigned":true}) pole jest unsigned,
ale zgubiło klucz i relacje, długość z integer(11) = integer(10) (length=11 nie pomogło)

Dobrze funkcjonuje w wygenerowanym JoinColum brakuje tu jednak unsigned,
więc pytanie czy nie przeszkadza kiedy id będzie bez atrybutu?

Chyba, że przy:
@ORM\Column(type="integer", name="cotegory_id", options={"unsigned":true})
można sprawić, aby był klucz i relacja w tabelą Category?

Z JoinColum jest super (bez kombinacji) tylko jak tu dodać unsigned?

Cytat
Jeśli masz starą bazę to nie kombinuj z zakładaniem Encji ręcznie bo się zamęczysz

Mam starą bazę, w której nic nie pasuje do nowej, a rekordy muszą się zgadzać i tworzyć relacje.
Obawiam się, że przy tej bazie wymienione narzędzie nie sprawi cudu i będę musiał się zmęczyć...
przerobiłem 3 tabele (phpMyAdmin i ręczna robótka), dało się i można już na nich działać w PHP, więc jest dobrze.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 23:40