Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SF][Symfony3.1] Relacje pomiędzy entity
qbas-s
post
Post #1





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

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


Od jakiegoś czasu uczę się Symfony 3.1 w oparciu o Doctrine

Mam problem ze zbudowaniem relacji pomiędzy tabelami. Wycinek projektu bazy danych wygląda tak
https://snag.gy/Bj9abF.jpg

Tabela comapny - przechowuje podstawowe informacje o firmie
Tabela company_type - jest odpowiednikeim kategorii
Tabela company_type_relation - łączy dwie powyższe tabele

Podczas generowania formularza dodawania firmy, ładuję sobie do selectbox'a dane z company_type.

Jak napisać adnotacje w entity company aby po zapisie wypełniła się prawidłowo tabela company_type_relation ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
qbson69
post
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 7
Dołączył: 3.01.2016

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


Nie wiem, czy do końca zrozumiałem, ale jeśli firma ma mieć wiele kategorii, to mamy klasyczną relację Many-To-Many:

http://doctrine-orm.readthedocs.io/project...-unidirectional

Czyli coś w stylu:

  1. // src/AppBundle/Entity/Company.php
  2. class Company
  3. {
  4. // ...
  5.  
  6. /**
  7.   * @ORM\ManyToMany(targetEntity="CompanyType")
  8.   * @ORM\JoinTable(name="company_type_relation",
  9.   * joinColumns={@ORM\JoinColumn(name="company_id", referencedColumnName="id")},
  10.   * inverseJoinColumns={@ORM\JoinColumn(name="type_id", referencedColumnName="id")}
  11.   * )
  12.   */
  13. private $types;
  14.  
  15. }
  16.  
  17.  
Go to the top of the page
+Quote Post
qbas-s
post
Post #3





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

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


Firma może mieć dokładnie jedną kategorię czyli relacja ManyToOne
Go to the top of the page
+Quote Post
kapslokk
post
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


W takim razie tabela łącząca nie jest Ci potrzebna. W entity company powinieneś mieć pole companyType i dla niego ustawione ManyToOne

http://symfony.com/doc/current/book/doctrine.html
I szukaj ManyToOne

Ten post edytował kapslokk 12.07.2016, 12:14:12
Go to the top of the page
+Quote Post
qbas-s
post
Post #5





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

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


w standardowym przypadku oczywiście zgodziłbym się jednak aplikacja będzie oparta na pewnej koncepcji(te 3 tabele są jedynie wycinkiem projektu i to w niekompletnego) dlatego wolałbym aby była tabela łącząca(chodzi głównie o wydajne przeszukiwanie)
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Cytat
chodzi głównie o wydajne przeszukiwanie
Troche odbiegne od tematu ale w czym ma ci w takim razie pomoc rozbicie tego na tabele laczaca?


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

"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
kapslokk
post
Post #7





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


http://docs.doctrine-project.org/en/latest...with-join-table
tutaj coś masz.
Go to the top of the page
+Quote Post
qbas-s
post
Post #8





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

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


załóżmy, że będziemy mieć 2mln firm w bazie. W pewnym momencie będę chciał pobrać wszystkie id firm które mają przypisaną kategorię o id 2. Zakładając, że część zapytań będzie wykonywana asynchronicznie - czy ten przypadek nie zwróci szybciej wyniku z użyciem tabeli łączącej?
Go to the top of the page
+Quote Post
nospor
post
Post #9





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




Cytat
Zakładając, że część zapytań będzie wykonywana asynchronicznie
Co masz na mysli?


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

"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
qbas-s
post
Post #10





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

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


asynchronie już po stronie skryptu ajax'em - istnieją serwisy które doczytują sobie dane asynchronicznie, i to doczytywanie działa bardzo wolno. Raz może to być problem po stronie skrypty(słabo zoptymalizowany) a dwa w konstrukcji bazy danych.
Go to the top of the page
+Quote Post
nospor
post
Post #11





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




Nie wiem o jakim wolnym dzialaniu mowisz. 2 mln rekordow dla bazy to pikus (rzecz jasna przy poprawnej strukturze i indeksach) i robienie oddzielnej tabelei dla twojej relacji to tylko bez sensowne kombinowanie.


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

"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 Aktualny czas: 20.08.2025 - 15:05