Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [doctrine] czy bezpiecznie dla danych w tabelach zmieniać nazwy pól entities i doctrine:schema:update ?
szczrzcz
post 28.05.2017, 15:59:10
Post #1





Grupa: Zarejestrowani
Postów: 153
Pomógł: 0
Dołączył: 20.04.2017
Skąd: Warszawa

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


czy bezpiecznie dla danych w tabelach bazy dancyh zmieniać nazwy pól entities i doctrine:schema:update ?
Go to the top of the page
+Quote Post
Puszy
post 28.05.2017, 16:43:26
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


Schema update jest cancerogenny, proponuję jak najszybsze przerzucenie się na migracje. Masz wtedy pełną kontrolę nad tym co się dzieje z bazą.
Go to the top of the page
+Quote Post
szczrzcz
post 28.05.2017, 18:50:47
Post #3





Grupa: Zarejestrowani
Postów: 153
Pomógł: 0
Dołączył: 20.04.2017
Skąd: Warszawa

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


kancerogenny?

Mam projekt pokazowy dla pracodawców z polskimi nazwami, chcę je zmienić na angielskie. Ten projekt ma tylko nie kłóć w oczy.

Czy mogę zmieniać nazwy pól i zaktualizować tą komendą?

Ten post edytował szczrzcz 28.05.2017, 18:51:30
Go to the top of the page
+Quote Post
Puszy
post 28.05.2017, 19:31:01
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


Chcesz zmienić nazwy kolumn w bazie czy nazwę pola w encji? Jeżeli kolumnę to wystarczy zmienić anotację. Jeżeli nazwę pola to nie jestem w do końca pewien co się stanie gdy zmienisz każde jedno pole w encji, nie wiem czy doctrine zapamiętuje kolejność pół etc.

Kancerogenny bo nie masz kontroli nad zmianami w bazie, korzystając z migracji możesz cofnąć się do konkretnej wersji plus widzisz wszystkie zmiany w postaci zapytań SQL. Dodatkowo rada, używaj angielskich nazw metod, pól klas etc. i nie korzysta ze słów kluczowych we własnych nazwach.
Go to the top of the page
+Quote Post
szczrzcz
post 28.05.2017, 20:35:20
Post #5





Grupa: Zarejestrowani
Postów: 153
Pomógł: 0
Dołączył: 20.04.2017
Skąd: Warszawa

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


chcę zmienić pola entities, ale też nazwy w adnotacjach

  1. /**
  2.  * DaneSprzedawcy
  3.  *
  4.  * @ORM\Table(name="dane_sprzedawcy")
  5.  * @ORM\Entity
  6.  */
  7. class DaneSprzedawcy
  8. {
  9. /**
  10.   * @var string
  11.   *
  12.   * @ORM\Column(name="nazwa", type="string", length=45, nullable=true)
  13.   */
  14. private $nazwa;
  15.  
  16. /**
  17.   * @var string
  18.   *
  19.   * @ORM\Column(name="ulica", type="string", length=45, nullable=true)
  20.   */
  21. private $ulica;


i zaktualizować nazwy tabel i kolumn bazy danych przez doctrine:schema:update bo ten projekt gdzieś tam sobie wisi na hostingu by sobie poklikać.

Zaryzykuję, i tak to nie są superważne dane, po prostu chciałbym mieć jak najmniej roboty. W ogóle czeka mnie dużo roboty z tą zmianą nazw, wątpię że to tak ładnie pójdzie, mam zamiar to robić CTRL+R, ciekaw jestem czy jest jakiś sprytniejszy sposób.

Ten post edytował szczrzcz 28.05.2017, 20:36:58
Go to the top of the page
+Quote Post
Puszy
post 29.05.2017, 09:11:14
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


Jeżeli zmienisz tylko name w anotacji to Doctrine sobie poradzi na 100%. W PHP Storm masz refaktoryzację, zmieniasz nazwę zmiennej a Storm szuka wszystkich referencji. Ogólnie działa ale warto przejrzeć przed wciśnięciem "refactor".

Ten post edytował Puszy 29.05.2017, 09:16:33
Go to the top of the page
+Quote Post
szczrzcz
post 31.05.2017, 14:43:02
Post #7





Grupa: Zarejestrowani
Postów: 153
Pomógł: 0
Dołączył: 20.04.2017
Skąd: Warszawa

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


ok, 2 dni zmieniania nazw PL-ENG.

ale gdy teraz zamiast:

  1. * @ORM\Table(name="pracownik", indexes={@ORM\Index(name="idLogin_idx", columns={"idLogin"})})
  2. */
  3. class Pracownik
  4. {


mam :
  1. * @ORM\Table(name="employee", indexes={@ORM\Index(name="idLogin_idx", columns={"idLogin"})})
  2. */
  3. class Employee
  4. {


to komenda
doctrine:schema:update --dump-sql
chce mi tworzyć nowe puste tabele, zamiast aktualizować stare nazwy. Czy źle rozumiem?
  1. CREATE TABLE book (isbn VARCHAR(45) NOT NULL, idcategory INT DEFAULT NULL, created DATETIME NOT NULL, updated DATETIME NOT NULL, title VARCHAR(45) DEFAULT NULL, author VARCHAR(45) DEFAULT NULL, description TEXT DEFAULT NULL, cena NUMERIC(10, 2) DEFAULT NULL, picture VARCHAR(45) DEFAULT NULL, print VARCHAR(45) DEFAULT NULL, publishYear INT DEFAULT NULL, quantity INT NOT NULL, INDEX idCategory_idx (idCategory), PRIMARY KEY(isbn)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
  2. CREATE TABLE category (name VARCHAR(45) DEFAULT NULL, idCategory INT AUTO_INCREMENT NOT NULL, UNIQUE INDEX UNIQ_64C19C15E237E06 (name), PRIMARY KEY(idCategory)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
  3. CREATE TABLE client (idlogin INT DEFAULT NULL, name VARCHAR(45) NOT NULL, surname VARCHAR(45) NOT NULL, email VARCHAR(45) DEFAULT NULL, street VARCHAR(45) NOT NULL, houseNumber VARCHAR(10) NOT NULL, apartmentNumber VARCHAR(10) DEFAULT NULL, postalCode VARCHAR(6) DEFAULT NULL, city VARCHAR(45) NOT NULL, nip VARCHAR(10) DEFAULT NULL, phoneNumber VARCHAR(45) DEFAULT NULL, idClient INT AUTO_INCREMENT NOT NULL, UNIQUE INDEX UNIQ_C74404557C0DA709 (idlogin), INDEX idLogin_idx (idLogin), PRIMARY KEY(idClient)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
  4. CREATE TABLE invoice (invoiceDate DATE DEFAULT NULL, invoiceNumber VARCHAR(45) NOT NULL, idMerchant INT DEFAULT NULL, idOrder INT DEFAULT NULL, INDEX idOrder_idx (idOrder), INDEX idMerchant_idx (idMerchant), PRIMARY KEY(invoiceNumber)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
  5. CREATE TABLE merchant (name VARCHAR(45) DEFAULT NULL, street VARCHAR(45) DEFAULT NULL, houseNumber VARCHAR(45) DEFAULT NULL, apartmentNumber VARCHAR(45) DEFAULT NULL, postalCode VARCHAR(45) DEFAULT NULL, city VARCHAR(45) DEFAULT NULL, nip VARCHAR(45) DEFAULT NULL, phoneNumber VARCHAR(45) DEFAULT NULL, idMerchant INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(idMerchant)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
  6. CREATE TABLE `order` (orderDate DATETIME DEFAULT NULL, idOrder INT AUTO_INCREMENT NOT NULL, idClient INT DEFAULT NULL, idStatus INT DEFAULT NULL, INDEX idClient_idx (idClient), INDEX idStatus_idx (idStatus), PRIMARY KEY(idOrder)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
  7. CREATE TABLE order_product (isbn VARCHAR(45) DEFAULT NULL, quantity INT DEFAULT NULL, productPrice NUMERIC(10, 2) DEFAULT NULL, publishYear VARCHAR(45) DEFAULT NULL, title VARCHAR(45) DEFAULT NULL, author VARCHAR(45) DEFAULT NULL, idOrderProduct INT AUTO_INCREMENT NOT NULL, idOrder INT DEFAULT NULL, INDEX idOrder_idx (idOrder), INDEX isbn_idx (isbn), PRIMARY KEY(idOrderProduct)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
  8. CREATE TABLE shipment (cost NUMERIC(10, 2) DEFAULT NULL, nrShipments VARCHAR(45) DEFAULT NULL, invoiceNumber VARCHAR(45) DEFAULT NULL, shipmentDate DATE DEFAULT NULL, delivererPhone VARCHAR(45) DEFAULT NULL, idShipment INT AUTO_INCREMENT NOT NULL, idOrder INT DEFAULT NULL, INDEX idOrder_idx (idOrder), PRIMARY KEY(idShipment)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
  9. ALTER TABLE book ADD CONSTRAINT FK_CBE5A331AC9951CC FOREIGN KEY (idcategory) REFERENCES category (idCategory);
  10. ALTER TABLE client ADD CONSTRAINT FK_C74404557C0DA709 FOREIGN KEY (idlogin) REFERENCES fos_user (id);
  11. ALTER TABLE invoice ADD CONSTRAINT FK_9065174427080FBA FOREIGN KEY (idMerchant) REFERENCES merchant (idMerchant);
  12. ALTER TABLE invoice ADD CONSTRAINT FK_90651744E2EDD085 FOREIGN KEY (idOrder) REFERENCES `order` (idOrder);
  13. ALTER TABLE `order` ADD CONSTRAINT FK_F5299398A455ACCF FOREIGN KEY (idClient) REFERENCES client (idClient);
  14. ALTER TABLE `order` ADD CONSTRAINT FK_F52993981811CD86 FOREIGN KEY (idStatus) REFERENCES STATUS (idStatus);
  15. ALTER TABLE order_product ADD CONSTRAINT FK_2530ADE6CC1CF4E6 FOREIGN KEY (isbn) REFERENCES book (isbn);
  16. ALTER TABLE order_product ADD CONSTRAINT FK_2530ADE6E2EDD085 FOREIGN KEY (idOrder) REFERENCES `order` (idOrder);
  17. ALTER TABLE shipment ADD CONSTRAINT FK_2CB20DCE2EDD085 FOREIGN KEY (idOrder) REFERENCES `order` (idOrder);
  18. ALTER TABLE fos_user CHANGE username username VARCHAR(180) NOT NULL, CHANGE username_canonical username_canonical VARCHAR(180) NOT NULL, CHANGE email email VARCHAR(180) NOT NULL, CHANGE email_canonical email_canonical VARCHAR(180) NOT NULL, CHANGE confirmation_token confirmation_token VARCHAR(180) DEFAULT NULL;
  19. CREATE UNIQUE INDEX UNIQ_957A6479C05FB297 ON fos_user (confirmation_token);
Go to the top of the page
+Quote Post
nospor
post 31.05.2017, 14:55:05
Post #8





Grupa: Moderatorzy
Postów: 36 468
Pomógł: 6300
Dołączył: 27.12.2004




Zmieniles nazwe klasy wiec dla doctrine jest to nowa encja. Jak chcesz zmienic tylko nazwe tabel to musisz nazwe klasy pozostawic a jedyne co zmienic to

* @ORM\Table(name="pracownik", indexes={@ORM\Index(name="idLogin_idx", columns={"idLogin"})})

na

* @ORM\Table(name="employee", indexes={@ORM\Index(name="idLogin_idx", columns={"idLogin"})})


Oczywiscie jesli zmienisz tylko to, to bedziesz mial sieczke w php w postaci polskich nazw klas. Albo wiec zostaw, albo zmien klasy i pogodz sie z nowymi tabelami smile.gif

Masz teraz potwierdzenie tego co powiedzial Puszy
Cytat
Schema update jest cancerogenny, proponuję jak najszybsze przerzucenie się na migracje. Masz wtedy pełną kontrolę nad tym co się dzieje z bazą.


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

"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

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: 28.05.2024 - 23:35