我有以下查询。查询在我的InstagramShopPicture中
$queryBuilder = $this->createQueryBuilder('p')
->select('p.id, p.caption, p.price, p.lowresimageurl, p.medresimageurl, p.highresimageurl, p.numberoflikes, p.numberofdislikes, shop.id, shop.username, shop.fullname, contact, category')
->leftJoin('p.shop', 'shop')
->leftJoin('shop.contact', 'contact')
->leftJoin('p.category', 'category')
->leftJoin('category.pictureTopCategory', 'pictureTopCategory')
->leftJoin('category.pictureFirstLevelCategory', 'pictureFirstLevelCategory')
->leftJoin('category.pictureSecondLevelCategory', 'pictureSecondLevelCategory')
->where('p.isLocked = false')
->andWhere('p.isStyleInspiration = false')
->andWhere('shop.isLocked = false');
但是,我收到以下错误:
QueryException: [Semantical Error] line 0, col -1 near 'SELECT p.id,': Error: Cannot select entity through identification variables without choosing at least one root entity alias
关于如何解决这个问题的任何想法?
在SO进行了一些研究之后,我得出了这个解决方案。尝试添加
->from('YourEntityNameForP', 'p')
->from('YourEntityNameForShop', 'shop')
到createQueryBuilder
因为我既不熟悉Symfony 2,也不熟悉Doctrine 2,只是想提供帮助!
此处的信用: 原则:如果不选择至少一个根实体别名,就无法通过标识变量选择实体
似乎您正在尝试在不对表使用别名的情况下进行连接。
这会带来很多问题,尤其是当列名相同时
->leftJoin('p.category', 'category') // aliasing
->leftJoin('category.pictureTopCategory', 'pictureTopCategory') // table name
一次使用表名,下一次使用别名!!只选择其中一种方法