2015-11-04 4 views
0

Я бы использовал поле в запросе, но я получаю эту ошибку: [Semantical Error] строка 0, col 78 рядом с 'resource_id =': Ошибка: Class Dt \ TagBundle \ Entity \ Tagging имеет ни одно из полей или объединение им не resource_idОшибка Entity Entity Error Doctrine

Это моя сущность Tagging:

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

в таблице на моей БД: Пометка (идентификатор, tag_id, resource_type, resource_id) где tag_id соответствуют по идентификатору таблицы: Tag (id, name) и resource_id соответствуют в таблице User User (идентификатор, имя, фамилия, ...)

Это мой поисковый запрос:

$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

Я объяснил это в ответе: в запросах доктрины вам нужно использовать имя полей, а не имя столбцов базы данных, где они сохраняются –