【问题标题】:Symfony2 Doctrine Query Entity ErrorSymfony2 Doctrine 查询实体错误
【发布时间】:2015-11-04 09:38:20
【问题描述】:

我会在查询中使用一个字段,但我收到此错误: [Semantical Error] line 0, col 78 near 'resource_id =': Error: Class Dt\TagBundle\Entity\Tagging 没有名为 resource_id 的字段或关联

这是我的实体标记:

<?php

 namespace Dt\TagBundle\Entity;
 use Doctrine\ORM\Mapping as ORM;
 use Doctrine\ORM\Mapping\UniqueConstraint;
 use FPN\TagBundle\Entity\Tagging as BaseTagging;


 /**
  * Dt\TagBundle\Entity\Tagging
  *
  * @ORM\Table(uniqueConstraints={@UniqueConstraint(name="tagging_idx",      columns={"tag_id", "resource_type", "resource_id"})})
  * @ORM\Entity
  */
 class Tagging extends BaseTagging
 {
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\ManyToOne(targetEntity="Dt\TagBundle\Entity\Tag")
 * @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
 **/
protected $tag;
 }

我数据库上的表是:Tagging(id, tag_id, resource_type, resource_id) 其中tag_id对应表的id:Tag(id,name) 和 resource_id 对应于用户表 User(id, name , surname, ...)

这是我的搜索查询:

$query = $em->createQueryBuilder()
         ->select('uu')   
         ->from('DtEcBundle:User', 'uu')
         ->innerJoin("DtTagBundle:Tag","tg", "WITH", "tg.id = tig.tag")
         ->innerJoin("DtTagBundle:Tagging","tig", "WITH", "tig.resource_id = uu.id")
         ->innerJoin("DtTagBundle:Tag","tg", "WITH", "tg.id = tig.tag") 
         ->where("uu.surname LIKE :search OR uu.name LIKE :search OR uu.profession LIKE :search OR tg.name LIKE :search")
         ->setParameter("search",$search.'%')
            ->getQuery();

如何定义resource_id???谢谢

【问题讨论】:

    标签: php mysql entity-framework symfony doctrine-orm


    【解决方案1】:

    如果您查看实体基类的源代码,您会发现该字段称为resourceId 而不是resource_id。它保存在数据库的resource_id 列中,但这不是您需要在 Doctrine 查询中使用的。所以,你应该把它改成:

         ->innerJoin("DtTagBundle:Tagging","tig", "WITH", "tig.resourceId = uu.id")
    

    【讨论】:

    • 谢谢,现在开始工作!!!!为什么是 resourceId 而不是 resource_id?你能解释一下吗? @卡洛斯格拉纳多斯
    • 我在回答中解释了:在原则查询中,您需要使用字段的名称,而不是保存它们的数据库列的名称
    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    相关资源
    最近更新 更多