Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony3.1] Relacje pomiędzy entity
Forum PHP.pl > Forum > PHP > Frameworki
qbas-s
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 ?
qbson69
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.  
qbas-s
Firma może mieć dokładnie jedną kategorię czyli relacja ManyToOne
kapslokk
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
qbas-s
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)
nospor
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?
kapslokk
http://docs.doctrine-project.org/en/latest...with-join-table
tutaj coś masz.
qbas-s
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?
nospor
Cytat
Zakładając, że część zapytań będzie wykonywana asynchronicznie
Co masz na mysli?
qbas-s
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.
nospor
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.