当不需要参数时,在Doctrine中使用join语句

时间:2017-10-09 08:53:41

标签: sql symfony doctrine-orm query-builder

我正在尝试在我的搜索功能中向我的DQL添加一个连接语句,因为用户可以搜索的字段之一实际上是与另一个表链接,特别是一个客户名称,该名称仅在根表中引用为标识。

我已经看到了连接语法应该如何在Doctrine网站上运行(仅在下面的示例中):

$qb->join('u.Group', 'g', 'WITH', 'u.status = ?1', 'g.id')

但是我不想匹配一个特定的值,我只想按照我在mySQL中的方式加入它,如下所示:

...JOIN table2 ON table2.id = table1.existingCustomer

这是我当前的搜索DQL,其中m表示一个名为Message的表,c表示一个名为Customer的表:

$qb = $this->createQueryBuilder('m');
$qb->select('m');
$qb->where('c.firstName LIKE :s');
$qb->orWhere('c.surname LIKE :s');
$qb->orWhere('m.postcode LIKE :s');
$qb->orWhere('m.town LIKE :s');
$qb->orWhere('m.phone1 LIKE :s');
$qb->andWhere('m.archived = :archived');
$qb->orderBy('m.messageDate', 'DESC')
    ->setParameter('s', '%'.$s.'%')
    ->setParameter('archived', 0);
return $qb->getQuery()->getResult();

正如您所看到的那样,c引用了Customer表的别名,因为Message表只使用id来交叉引用它。

我需要知道的是,有没有办法通过将Message表中的existingCustomer字段链接到Customer表的id字段来加入Customer表,而无需匹配特定的价值以使这项工作?

1 个答案:

答案 0 :(得分:1)

你试过这个:

us \Doctrine\ORM\Query\Expr\Join;
// ...
->leftJoin('YourBundle:Table2', 'table2', Join::WITH, 'table2.id = table1.existingCustomer')