首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >symfony错误:预期=,<,<=,<>,>,>=,!=,got‘’

symfony错误:预期=,<,<=,<>,>,>=,!=,got‘’
EN

Stack Overflow用户
提问于 2015-07-07 23:49:33
回答 1查看 4.4K关注 0票数 3

我有一个查询,它查找从控制器中的变量获得的结果。

代码语言:javascript
复制
$category = $request->request->get('category');

$catContent = $em->getRepository('PublicartelAppBundle:Content')->findByCategory($category);

public function findByCategory($category)
    {
        $em = $this->getEntityManager();

        $dql = 'SELECT c FROM Publicartel\AppBundle\Entity\Content c';

        if (!is_null($category)) {
            $dql .= " WHERE c.categories.name = category";
        }

        $query = $this->getEntityManager()
            ->createQuery($dql)
            ->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_ARRAY);

        if (!is_null($category)) {
            $query->setParameter('category', $category);
        }

        return $query->getResult();
    }

但是,当我对查询运行操作时,出现了以下错误:

代码语言:javascript
复制
[Syntax Error] line 0, col 71: Error: Expected =, <, <=, <>, >, >=, !=, got '.'

从Publicartel\AppBundle\Entity\Content c中选择c,其中c.categories.name =类别

$categories是实体内容的属性。

代码语言:javascript
复制
class Content
{
private $categories;

    public function __construct()
    {
        $this->categories = new \Doctrine\Common\Collections\ArrayCollection();
    }

public function addCategories(\Publicartel\AppBundle\Entity\Category $categories)
    {
        $this->categories[] = $categories;

        return $this;
    }

    public function removeCategories(\Publicartel\AppBundle\Entity\Category $categories)
    {
        $this->categories->removeElement($categories);
    }

    public function setCategories(\Publicartel\AppBundle\Entity\Category $categories = null)
    {
        $this->categories = $categories;

        return $this;
    }
    public function getCategories()
    {
        return $this->categories;
    }
}

奇怪的是,当我获取变量时,错误并没有出现。

代码语言:javascript
复制
$category = $request->query->get('category');
EN

回答 1

Stack Overflow用户

发布于 2015-07-07 23:52:02

不能以这种方式参照子对象:

代码语言:javascript
复制
SELECT c FROM Publicartel\AppBundle\Entity\Content c WHERE c.categories.name = :category

您需要在此之前使用JOIN,并使用该连接实体的别名。如下所示:

代码语言:javascript
复制
SELECT c, cat FROM Publicartel\AppBundle\Entity\Content c JOIN c.categories cat WHERE cat.name = :category

现在,要么使用LEFT JOIN,要么只使用JOIN,它应该可以工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31273457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档