无法通过存储库中的标识变量选择实体


Cannot select entity through identification variables in repository

我有以下查询。查询在我的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

一次使用表名,下一次使用别名!!只选择其中一种方法

相关文章: