Ini tidak mungkin karena Anda tidak dapat melakukan join yang benar. Gabung dalam kasus ini akan bergantung pada nilai di parent_entity dan child_entity (mis. setiap baris mungkin perlu bergabung ke tabel yang berbeda). Selain itu, bagaimana doktrin mengetahui jenis rekaman mana yang harus dihidrasi (yaitu karena bergantung pada jenis entitas).
Anda mungkin dapat melakukan sesuatu seperti ini (walaupun akan aneh) dengan menggunakan klausa WITH pada gabungan Anda. Misalnya, dalam metode setUp() model berita Anda, Anda dapat melakukan:
$this->hasMany('Links as NewsVideoLinks', array('local' => 'id', 'foreign' => 'parent_id'));
Dan dalam penyiapan model Tautan Anda:
$this->hasMany('Videos as videos', array('local' => 'child_id', 'foreign' => 'id'));
Anda perlu menentukan semua kombinasi gabungan dalam model Tautan. Maksud saya adalah, Anda perlu memberi tahu bahwa ia memiliki banyak berita dan album juga menggunakan child_id dan parent_id.
Dan kemudian dalam kueri Anda, Anda perlu melakukan sesuatu seperti:
$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();
Seperti yang Anda lihat, ini sangat merepotkan. Saya akan sangat merekomendasikan membuat tabel gabungan untuk setiap relasi. Anda masih akan mendapatkan apa yang Anda cari dengan bergabung ke setiap tabel bergabung.