我有ContactPerson
和TypeContact
个类。
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 :(得分: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();
否则你只能真正匹配实体ID:
$typeContact = $qb->select('tc, cp')
->from('YourBundle:TypeContact', 'tc')
->join('tc.contactPerson', 'cp')
->where($qb->expr()->eq('tc', ':typeContact'))
->setParameter('typeContact', $yourTypeContactEntity)
->getQuery()
->getResult();
答案 1 :(得分: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();