【问题标题】:Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected无效的路径表达式。需要 StateFieldPathExpression 或 SingleValuedAssociationField
【发布时间】:2014-02-09 04:23:07
【问题描述】:

我有以下疑问:

$query = $em->createQueryBuilder()->select('s', 'COUNT(pictures) AS HIDDEN items')
                  ->from("MainBundle:InstagramShop", 's')
                  ->innerJoin('s.userPictures', 'pictures')
                  ;

      $query->andWhere('s.id > :shopId');
      $query->andWhere('pictures.style = :style');
      $query->andHaving('items >= 4');

由于某种原因,它给了我以下错误:

[Semantical Error] line 0, col 151 near 'style = :style': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.

我有一个 InstagramShop,它与 InstagramShopPictures 具有多对一的关系:

这是实体:

    class InstagramShopPicture
    {

          /**
         * @Exclude()
         * @ORM\OneToMany(targetEntity="App\MainBundle\Entity\InstagramPictureStyle",         
           mappedBy="picture", cascade={"persist","remove"})
         */
         protected $style; 


        /**
         * @Exclude()
         * @ORM\ManyToOne(targetEntity="InstagramShop", inversedBy="userPictures")
         * @ORM\JoinColumn(name="shop_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
         */
        protected $shop;
    }

这里是 Instagram 商店

class InstagramShop
{
     /**
     * @Exclude()
     * @ORM\OneToMany(targetEntity="InstagramShopPicture", mappedBy="shop", cascade={"persist"})
     * @ORM\OrderBy({"created" = "DESC"})
     */
    protected $userPictures;
}

知道为什么吗?

【问题讨论】:

  • var_dump($query->getQuery()->getSQL()); 告诉你什么?
  • 你是怎么解决这个问题的?我也在为类似的错误而苦苦挣扎。
  • 试试pictures.style.id

标签: symfony orm doctrine-orm


【解决方案1】:

今天我在寻找完全相同的错误消息时发现了您的问题,也与使用 COUNT() 有关。 Pieter Vogelaar 帮我解决了这个问题:

$qb = $this->createQueryBuilder('c', 'bc')
        ->select('c')
        ->leftJoin('c.books', 'bc')
        ->addSelect('COUNT(bc.id) AS book_count')
        ->where('c.owner = :user')->setParameter(':user', $user)
        ->groupBy('c.id')
        ->orderBy('c.created');

你可能需要写: COUNT(pictures.id) 而不是 COUNT(pictures)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-28
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多