我有以下 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 的实体具有多对一关系。随着数据库的正确设置和固定装置的填充,关系似乎设置正确,但是当我尝试运行上述查询时,我遇到了以下错误:
在 acmeStyleGuideBundle:Page:pages.html.twig 中渲染模板(“[Semantical Error] line 0, col 130 near 'codeExample =': Error: Invalid PathExpression.StateFieldPathExpression or SingleValuedAssociationField 预期。”)时引发异常在第 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,我只是无法自己解决这个问题。
这是我的代码示例实体:
/**
* @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;
你能给我的任何建议都会很棒。我完全被困在这里。