Mysql
 sql >> Baza danych >  >> RDS >> Mysql

relacja wiele-do-wielu w doktrynie

Nie jest to możliwe, ponieważ nie możesz wykonać prawidłowego sprzężenia. Dołączenie w tym przypadku będzie zależeć od wartości w parent_entity i child_entity (tj. każdy wiersz może wymagać dołączenia do innej tabeli). Ponadto, w jaki sposób doktryna będzie wiedziała, który typ rekordu należy uwodnić (tj. ponieważ zależy to od typu jednostki).

Możesz być w stanie wyciągnąć coś takiego (choć będzie to dziwne) za pomocą klauzuli WITH w swoich sprzężeniach. Na przykład w metodzie setUp() twojego modelu wiadomości możesz zrobić:

$this->hasMany('Links as NewsVideoLinks', array('local' => 'id', 'foreign' => 'parent_id'));

A w konfiguracji modelu Links:

$this->hasMany('Videos as videos', array('local' => 'child_id', 'foreign' => 'id'));

Musisz zdefiniować wszystkie kombinacje złączeń w modelu Links. Chodzi mi o to, że musisz mu powiedzieć, że ma wiele wiadomości i albumów, używając zarówno identyfikatora dziecka, jak i identyfikatora rodzica.

A następnie w zapytaniu musisz zrobić coś takiego:

$query = Doctrine_Query::create();
$query->from('News n');
$query->innerJoin("n.NewsVideoLinks as links WITH parent_entity = 'news'");
$query->innerJoin("links.Videos as vids WITH child_entity = 'videos'");
$results = $query->execute();

Jak widać jest to bardzo uciążliwe. Gorąco polecam tworzenie tabel złączeń dla każdej relacji. Nadal dostaniesz to, czego szukasz, dołączając do każdego stołu dołączania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mariadb - Każda partia wydłużonego czasu wykonania wkładki stopniowo się wydłuża

  2. Co to jest transaction.commit() w Hibernate?

  3. COUNT(*) z wielu tabel w MySQL

  4. Określ rangę na podstawie wielu kolumn w MySQL

  5. PDO pobiera jedną kolumnę z tabeli do 1-wymiarowej tablicy