DQL查询返回:预期为StateFieldPathExpression或SingleValuedAssociationField [英] DQL query returns: StateFieldPathExpression or SingleValuedAssociationField expected

查看:93
本文介绍了DQL查询返回:预期为StateFieldPathExpression或SingleValuedAssociationField的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下DQL查询:

public function findByIdJoinedToCodeExample($pageId)
{
    $query = $this->getEntityManager()
        ->createQuery('
            SELECT c FROM acmeStyleGuideBundle:codeExample c
            JOIN c.PageContent p
            WHERE p.codeExample = :cex'
        )
        ->setParameter('cex', $pageId);

    try {
        return $query->getResult();
    } catch (\Doctrine\ORM\NoResultException $e) {
        return null;
    }
}

它正在尝试从名为codeExample的实体检索数据,该实体与名为PageContent的实体具有ManyToOne关系.随着数据库的正确设置和夹具的建立,关系似乎已正确设置,但是当我尝试运行上述查询时,我遇到了以下错误:

It is attempting to retreive data from an entity called codeExample which has a ManyToOne relationship with an entity called PageContent. The relationships seem to be set up correctly as the database is being correctly set up and the fixtures are being populated but when I try to run the above query I am faced with the following error:

在acmeStyleGuideBundle:Page:pages中的模板呈现过程中引发了异常("[语义错误]第0行,'codeExample ='附近的col 130:错误:无效的PathExpression.StateFieldPathExpression或SingleValuedAssociationField.").html.twig在第16行.

An exception has been thrown during the rendering of a template ("[Semantical Error] line 0, col 130 near 'codeExample =': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.") in acmeStyleGuideBundle:Page:pages.html.twig at line 16.

正在由以下控制器调用:

// find the current pages code examples (if there are any)
public function findCodeExamplesAction($pageId =10) 
{
    $em = $this->getDoctrine()->getManager();
    $codeExample = $this->getDoctrine()
    ->getRepository('acmeStyleGuideBundle:codeExample')
    ->findByIdJoinedToCodeExample($pageId);
    return $this->render(
        'acmeStyleGuideBundle:Page:codeExample.html.twig', 
        array(
            'Code' => $codeExample
        )
    );
}

注意:$ pageID = 10是因为它告诉我没有填充pageID.这似乎是一个单独的问题,所以我暂时为此设置一个默认值.

我已经看了好几个小时了,但我仍在学习《主义》和《 Symfony》,但我自己无法弄清楚.

I've been looking at this for hours but I'm still learning Doctrine and Symfony and I just cannot figure this one out by myself.

这是我的代码实体,例如:

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
    private $id;

/**
 * @var string
 *
 * @ORM\Column(name="textExample", type="text")
 */
    private $textExample;

/**
 * @var string
 *
 * @ORM\Column(name="codeExample", type="text")
 */
    private $codeExample;

/**
 * @var integer
 *
 * @ORM\Column(name="lang", type="integer")
 */
    private $lang;

/**
 * @ORM\ManyToMany(targetEntity="PageContent", mappedBy="codeExample")
 */
    protected $PageContent;

/**
 * Constructor
 */
public function __construct()
{
    $this->PageContent = new \Doctrine\Common\Collections\ArrayCollection();
}

这是我的PageContent实体:

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
    private $id;

/**
 * @var ArrayCollection $pageSector_Id;
 * @ORM\ManyToMany(targetEntity="pageSector", inversedBy="PageContent")
 * @ORM\JoinTable(
 *      name="pageSector_PageContent",
 *      joinColumns={@ORM\JoinColumn(name="PageContent_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="pageSector_Id", referencedColumnName="id")}
 *      )
 */
    protected $pageSector;

 /**
 * @var ArrayCollection $pageCategory_Id;
 * @ORM\ManyToMany(targetEntity="pageCategory", inversedBy="PageContent")
 * @ORM\JoinTable(
 *      name="pageCategory_PageContent",
 *      joinColumns={@ORM\JoinColumn(name="PageContent_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="pageCategory_Id", referencedColumnName="id")}
 *      )
 */
    protected $pageCategory;

/**
 * @ORM\ManyToOne(targetEntity="pageTypes", inversedBy="PageContent")
 * @ORM\JoinColumn(name="pageTypesId", referencedColumnName="id")
 */
    protected $pageTypes;

/**
 * @var integer
 *
 * @ORM\Column(name="pageTypesId", type="integer")
 */

    private $pageTypesId;

/**
 * @ORM\OneToMany(targetEntity="PageContent", mappedBy="parentPage")
 */
    private $childPages;

 /** @ORM\ManyToOne(targetEntity="PageContent", inversedBy="childPages")
 *   @ORM\JoinColumn(name="parentPage_id", referencedColumnName="id")
 **/
    private $parentPage;

/**
 * @var string
 *
 * @ORM\Column(name="pageName", type="string", length=255)
 */
    private $pageName;

/**
 * @var string
 *
 * @ORM\Column(name="pageUrl", type="string", length=255)
 */
    private $pageUrl;

/**
 * @var string
 *
 * @ORM\Column(name="richText", type="text")
 */
    private $richText;

/**
 * @var ArrayCollection $pageSector_Id;
 * @ORM\ManyToMany(targetEntity="codeExample", inversedBy="PageContent")
 * @ORM\JoinTable(
 *      name="codeExample_PageContent",
 *      joinColumns={@ORM\JoinColumn(name="PageContent_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="codeExample_Id", referencedColumnName="id")}
 *      )
 */
    protected $codeExample;

您能给我的任何建议都将是惊人的.我完全被困在这里.

Any advice you can give me would be amazing. I'm completely stuck here.

推荐答案

我设法自己解决了这个问题:

I managed to work it out myself:

 $query = $this->getEntityManager()
    ->createQuery('
        SELECT c FROM acmeStyleGuideBundle:codeExample c
        JOIN c.PageContent p
        WHERE p.codeExample = :cex'
    )
    ->setParameter('cex', $pageId);

应该是:

 $query = $this->getEntityManager()
    ->createQuery('
        SELECT c FROM acmeStyleGuideBundle:codeExample c
        JOIN c.PageContent p
        WHERE p.id = :cex'
    )
    ->setParameter('cex', $pageId);

这对我来说似乎很奇怪,因为我认为对象的重点是不使用id,但它确实有效,对我来说已经足够了.如果有更好的方法,请随时告诉我.

This seems odd to me as I thought that the point of objects is to NOT use the id but it worked so that's good enough for me. If there is a better way, please feel free to tell me.

这篇关于DQL查询返回:预期为StateFieldPathExpression或SingleValuedAssociationField的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆