php - symfony 错误 : Expected =, <, <=, <>, >, >=, !=, 得到 '.'

标签 php symfony doctrine-orm

我有一个查询,用于查找从 Controller 中的变量获得的结果。

$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();
    }

但是当我为查询运行操作时,出现此错误:

[Syntax Error] line 0, col 71: Error: Expected =, <, <=, <>, >, >=, !=, got '.'

SELECT c FROM Publicartel\AppBundle\Entity\Content c WHERE c.categories.name = category

$categories 是实体内容的属性。

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;
    }
}

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

$category = $request->query->get('category');

最佳答案

你不能这样引用子对象:

SELECT c FROM Publicartel\AppBundle\Entity\Content c WHERE c.categories.name = :category

您需要在此之前JOIN 并使用该已加入实体的别名。像这样:

SELECT c, cat FROM Publicartel\AppBundle\Entity\Content c JOIN c.categories cat WHERE cat.name = :category

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

关于php - symfony 错误 : Expected =, <, <=, <>, >, >=, !=, 得到 '.',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31273457/

相关文章:

php - 如何选择外语的mysql查询?

php - 如何使用 PHP 监听 TCP 端口?

php - 如何在教义2中添加正确的一对多关系?

symfony - 在symfony2中使用phpUnit进行测试时如何回滚任何事务

php - 存储波兰语字符 utf8 学说 2 PHP, MySQL, Zend Framework

php - 处理 PHP apache 应用程序中的文件所有权问题

php - 如何一次更新 2 个 mysql 行?

php - 使用 OAuth2 客户端凭证流保护用 PHP 编写的 REST API

image - 在 symfony 的 sonata admin 表单中添加预览图像

symfony - Sonata Admin 编辑表单多对多不起作用 - symfony2.1.6