2015-05-06 2 views
0

У меня есть классы ContactPerson и TypeContact.Как использовать построитель запросов LIKE для сопоставленного класса

class ContactPerson 
{ 
    ... 
    /** 
    * 
    * @ORM\ManyToOne(targetEntity="App\MyBundle\Entity\TypeContact", inversedBy="type") 
    * @ORM\JoinColumn(name="type", referencedColumnName="id", nullable=true) 
    */ 
    private $typeContact; 

    ... 
} 

и

class TypeContact 
{ 
    ... 

     /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
     private $name; 
    ... 
} 

и мой QueryBuilder как этот

$typeContact= ...('MyBundle:TypeContact')->find($id); 
$person = $repository->createQueryBuilder('person')->where('person.typeContact LIKE ?1')->setParameter(1, '%'.$typeContact.'%')->getQuery()->getResult(); 

Но я получаю сообщение об ошибке. Как использовать LIKE для объекта? Я использую Symfony 2.6

+0

Если вы пытаетесь найти людей с идентификатором contact_type id = 1. Вам не нужно использовать LIKE –

ответ

1

Я не верю, что вы можете делать это непосредственно на сущности.

Предполагая, что это имя свойство TypeContact вы хотите сделать, как на что-то вроде этого:

$qb = $this->getEntityManager()->createQueryBuilder(); 

$typeContacts = $qb->select('tc, cp') 
    ->from('YourBundle:TypeContact', 'tc') 
    ->join('tc.contactPerson', 'cp') 
    ->where($qb->expr()->like('tc.name', $qb->expr()->literal('%YourStringHere%'))) 
    ->getQuery() 
    ->getResult(); 

В противном случае вы можете только действительно совпадают по сущности ид, как так:

$typeContact = $qb->select('tc, cp') 
    ->from('YourBundle:TypeContact', 'tc') 
    ->join('tc.contactPerson', 'cp') 
    ->where($qb->expr()->eq('tc', ':typeContact')) 
    ->setParameter('typeContact', $yourTypeContactEntity) 
    ->getQuery() 
    ->getResult(); 
0

Спасибо , Я решил.

$typeContact= ...('MyBundle:TypeContact')->find($id); 
$person = $repository->createQueryBuilder('person') 
      ->join('person.typeContact', 'tp') 
      ->where('tp.name LIKE ?1') 
      ->setParameter(1, '%'.$typeContact->getName().'%') 
      ->getQuery() 
      ->getResult();