Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Symfony Encje
Malinaa
post 3.02.2021, 23:02:42
Post #1





Grupa: Zarejestrowani
Postów: 518
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


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 4.02.2021, 09:49:25
Post #2





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
LowiczakPL
post 4.02.2021, 09:53:04
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


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
Malinaa
post 4.02.2021, 16:44:27
Post #4





Grupa: Zarejestrowani
Postów: 518
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 wink.gif Coś wymyślę 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


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 4.02.2021, 17:20:37
Post #5





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Malinaa
post 4.02.2021, 18:34:12
Post #6





Grupa: Zarejestrowani
Postów: 518
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


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 5.02.2021, 09:56:33
Post #7





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Czemu ustawiasz to przy jakims JOINCOLUMN?

https://stackoverflow.com/questions/7692686...-unsigned-value


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
LowiczakPL
post 5.02.2021, 16:19:26
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


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
Malinaa
post 5.02.2021, 17:10:37
Post #9





Grupa: Zarejestrowani
Postów: 518
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.


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 17:05