我有以下DQL查询:DQL查询返回:StateFieldPathExpression或SingleValuedAssociationField预期
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;
}
}
它正试图从与所谓PageContent实体的多对一的关系称为codeExample实体retreive数据。的关系似乎是正确设置为数据库被正确设置,并且正在填充灯具但是当我尝试运行我面临着以下错误上面的查询:
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。这似乎是一个单独的问题比这个,所以我现在设置一个默认值。
我一直在看这个小时,但我仍然在学习Doctrine和Symfony,我只是无法自己弄清这个问题。
这里是我的实体codeExample:
/**
* @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;
什么建议可以给我将是惊人的。我完全陷在这里。
你应该可以做WHERE c =:cex –
请记住,当我们使用Entities使用Doctrines in Repositories时,我们必须使用Entity not Database Table列名中的列名。我认为你在数据库表和实体中具有相同的Id,如果你愿意,可以与其他列一起检查。 – Developer