Doctrine 2加入一个加入实体的实体

时间:2014-11-30 00:07:18

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

我有一个实体租赁,它连接一个实体房间和实体房间连接和实体床。如何存档以使用一个查询加载所有内容?实际上,使用以下代码,实体床将被加载为懒惰。所以我有多个查询。

$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" [语义错误]第0行,col 180附近' RentalBeds WITH':错误:Class Rental \ Entity \ Rental没有任何关联命名床"。

例外是正确的,因为实体租赁没有名为床的关联。房间实体有一个名为床的协会。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案! :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);