【问题标题】:Doctrine 2 Join an Entity which joins an EntityDoctrine 2 Join an Entity 加入一个实体
【发布时间】:2026-01-31 21:00:01
【问题描述】:

我有一个实体 Rental,它连接了一个实体 Room,实体 Room 连接和实体 Bed。如何归档以通过一个查询加载所有内容?实际上,使用以下代码实体 Bed 将被延迟加载。所以我有不止一个查询。

$qb->select('Rental', 'RentalRooms')
        ->from('Rental\Entity\Rental', 'Rental')           
        ->leftJoin('Rental.rooms', 'RentalRooms')          
        ->where($qb->expr()->eq('Rental.slug', ':slug'))
        ->setParameter('slug', $slug);  

我是这样尝试的:

$qb->select('Rental', 'RentalRooms', RentalBeds)
        ->from('Rental\Entity\Rental', 'Rental')           
        ->leftJoin('Rental.rooms', 'RentalRooms')
        ->leftJoin('RentalRooms.beds', 'RentalBeds')               
        ->where($qb->expr()->eq('Rental.slug', ':slug'))
        ->setParameter('slug', $slug);   

但是我得到一个 Doctrine\ORM\Query\QueryException “[Semantical Error] line 0, col 180 near 'RentalBeds WITH': Error: Class Rental\Entity\Rental has no association named dates”。

而且例外是正确的,因为实体 Rental 没有名为 Beds 的关联。房间实体具有名为beds 的关联。

【问题讨论】:

    标签: mysql doctrine-orm doctrine entity left-join


    【解决方案1】:

    我找到了解决方案! :D 只需添加 ->addSelect('RentalBeds')

    $qb->select('Rental', 'RentalRooms', RentalBeds)
        ->from('Rental\Entity\Rental', 'Rental')           
        ->leftJoin('Rental.rooms', 'RentalRooms')   
        ->leftJoin('RentalRooms.beds', 'RentalBeds')
        **->addSelect('RentalBeds')**           
        ->where($qb->expr()->eq('Rental.slug', ':slug'))
        ->setParameter('slug', $slug);  
    

    【讨论】: