Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony][Symfony 3.4] Entity - unikalna wartość
qbas-s
post 22.04.2018, 23:55:48
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

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


W entity kolumnę "name" mam ustawioną jako unikalną - to działa, wyrzuca błąd jeśli próbuję wrzucić duplikat.

Chciałbym aby w przypadku próby wrzucenia duplikatu, instancja danego Entity wypełniła się rekordem o przekazanej wartości do kolumny name, na chwilę obecną mam to zrobione mało elegancko
  1. $browser = new Browser();
  2. $browser->setName();
  3. $errors = $validator->validate($browser);
  4.  
  5. if (count($errors) > 0) {
  6. $id_browser = $errors[0]->getCause('id')[0]->getId();
  7. $browser = $this->getDoctrine()
  8. ->getRepository(OperationSystem::class)
  9. ->find($id_browser);
  10. } else {
  11. $em->persist($browser);
  12. $em->flush();
  13. $id_browser = $browser->getId();
  14. }


Jak można to lepiej napisać? Obiekt browser potem jest wykorzystywany tak

  1. $em = $this->getDoctrine()->getManager();
  2. $stats = new UsageStats();
  3. $stats->setIp();
  4. $stats->setBrowser($browser);
  5. $stats->setCountry($country);
  6. $stats->setOperationSystem($os);
  7. $em->persist($stats);
  8. $em->flush();


Go to the top of the page
+Quote Post
Pilsener
post 23.04.2018, 08:05:39
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Jak używasz MySQL to możesz użyć "ON DUPLICATE KEY":
https://dev.mysql.com/doc/refman/8.0/en/ins...-duplicate.html
Ponieważ jednak jest to standard MySQL, będziesz musiał użyć native query (albo napisać lub znaleźć jakieś rozszerzenie Doctrine)

Jeśli chcesz zrobić tak, żeby w przypadku konfliktu leciał INSERT zamiast update to można użyć merge:
https://www.doctrine-project.org/projects/d...erging-entities

Jak chcesz coś kompletnie swojego to najlepiej użyć wbudowanej obsługi zdarzeń:
https://www.doctrine-project.org/projects/d...ifecycle-events

Zarejestrować serwis, który coś tam zrobi przed każdą próbą utrwalenia encji.
Go to the top of the page
+Quote Post
LowiczakPL
post 23.04.2018, 13:23:44
Post #3





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

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


  1. $browser->setName($browser->getName().'DOPISEK');


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
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: 16.04.2024 - 07:50