2015-11-04 79 views
0

我会在查询中使用一个字段,但我收到此错误: [语义错误] line 0,col 78 near'resource_id =':Error:Class Dt \ TagBundle \ Entity \ Tagging has没有字段或协会命名RESOURCE_IDSymfony2原则查询实体错误

这是我的实体标记:

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

在我的数据库表是:标记(ID,TAG_ID,RESOURCE_TYPE,RESOURCE_ID) 其中TAG_ID对应的ID的表格:标签(id,name) 和RESOURCE_ID对应的用户表用户(ID,姓名,...)

这是我的搜索查询:

$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 ???谢谢

回答

0

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

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

谢谢,现在工作!为什么resourceId而不是resource_id?你能解释一下吗? @Carlos Granados –

+0

我在答案中解释了它:在教义查询中你需要使用字段的名称,而不是保存它们的数据库列的名称 –