原则2:将Select与另一个具有相同结构的表中的Select相结合

时间:2018-03-26 10:05:36

标签: php mysql doctrine-orm symfony-2.3

在我使用Doctrine 2的Symfony应用程序中,我有两个表: 任命和任命_ARCHIVED。 两个表都有相同的(!)结构,字段相同!

我在AppointmentsRepository中的功能:

private function getAppointments()
{
    $qb = $this->createQueryBuilder('a');
    $qb->leftJoin('a.instructor', 'i')
        ->leftJoin('i.contactdetails', 'c')
        ->join('a.area', 'ar');  

    return $qb;
}

此存储库指向我的表APPOINTMENTS。

如何在APPOINTMENTS_ARCHIVED中为此查询添加一组数据?我的目标是我的查询不仅考虑我的表APPOINTMENTS中的数据,而且我的表中的数据还包含存档数据APPOINTMENTS_ARCHIVED。

2 个答案:

答案 0 :(得分:0)

我假设您的APPOINTMENTS_ARCHIVED表是APPOINTMENTS表的归档版本?

这意味着归档表未映射到实体,因此无法使用DQL

您最好的选择是用户Native SQL

答案 1 :(得分:0)

您可以选择不相关的多个实体。在这种情况下:

$qb = $this->createQueryBuilder('a');
$qb->addSelect('aa')
   ->from(AppointmentArchived::class, 'aa'); // ->join(AppointmentArchived::class, 'aa'); will also work
$qb->leftJoin('a.instructor', 'i')
    ->leftJoin('i.contactdetails', 'c')
    ->join('a.area', 'ar');  
$qb->leftJoin('aa.instructor', 'aai')
    ->leftJoin('aai.contactdetails', 'aac')
    ->join('aa.area', 'aar');  

在这种情况下,您必须分别加入并选择关系。