我有以下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