如何使用查询生成器LIKE到映射类

时间:2015-05-06 04:10:19

标签: symfony doctrine sql-like query-builder

我有ContactPersonTypeContact个类。

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

2 个答案:

答案 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();