我想通过dql语句获取菜单中的数据,包括自定义存储库中的类别,但它不会返回关联的实体。我需要它作为json数据,所以我将水合模式 Query :: HYDRATE_ARRAY 添加到函数调用中。
/**
* @ORM\Entity(repositoryClass="Company\Repository\Doctrine\MenuRepository")
* @ORM\Table(name="menu")
*/
class Menu {
/**
* @var \Company\Entity\MenuCategory[]
*
* @ORM\OneToMany(targetEntity="Company\Entity\MenuCategory", mappedBy="menu")
*/
protected $categories;
}
/**
* @ORM\Entity(repositoryClass="Company\Repository\Doctrine\MenuCategoryRepository")
* @ORM\Table(name="menu_category")
*/
class MenuCategory {
/**
* @var \Company\Entity\Menu
*
* @ORM\ManyToOne(targetEntity="Company\Entity\Menu", inversedBy="categories")
* @ORM\JoinColumn(nullable=false)
*/
protected $menu;
}
class MenuRepository extends EntityRepository implements MenuRepositoryInterface {
public function findById($id, $hydration = Query::HYDRATE_OBJECT) {
$queryBuilder = $this->createQueryBuilder('menu')
->leftJoin('menu.categories', 'categories')
->where('menu.id = :menuId')
->setParameter('menuId', $id);
return $queryBuilder->getQuery()->getSingleResult($hydration);
}
}
结果如下:
array(4) {
["id"]=>int(1)
["name"]=> string(6) "Test"
}