Mysql
 sql >> база данни >  >> RDS >> Mysql

отношение много към много в доктрината

Това не е възможно, защото не можете да направите правилно присъединяване. Обединяването в този случай ще зависи от стойността в parent_entity и child_entity (т.е. всеки ред може да се наложи да се присъедини към различна таблица). В допълнение, как доктрината ще знае кой тип запис да хидратира (т.е. защото зависи от типа обект).

Може да успеете да извадите нещо подобно (макар и да е странно), като използвате клаузата WITH във вашите съединения. Например, в метода setUp() на вашия модел на новини можете да направите:

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

И в настройката на вашия модел връзки:

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

Ще трябва да дефинирате всички комбинации от съединения в модела връзки. Това, което имам предвид, е, че трябва да му кажете, че има много новини и албуми, като използвате и child_id, и parent_id.

И тогава във вашата заявка ще трябва да направите нещо като:

$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();

Както можете да видите, това е много тромаво. Горещо бих препоръчал създаването на таблици за свързване за всяка релация. Все пак ще получите това, което търсите, като се присъедините към всяка маса за присъединяване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съображения за производителност на PDO fetchall()?

  2. Как да получите средно с orderBy Desc в Laravel 5

  3. Как да избирате имена на колони динамично в mySQL

  4. Размерът на реда е твърде голям (> 8126) мога ли просто да променя InnoDB на MyISAM

  5. MySQL базирано на курсора пагинация с множество колони