Можно сделать связь OneToOne двусторонней:
// Entity1, она же table1
/**
* @OneToOne(targetEntity="Entity2", mappedBy="parent")
*/
private $child;
// Entity2, она же table2
/**
* @OneToOne(targetEntity="Entity1", inversedBy="child")
* @JoinColumn(name="table1_id", referencedColumnName="id")
*/
private $parent;
И тогда:
$getParams = $this->getRequest()->query->all();
$params = array_filter($getParams, function($el) {
return !empty($el);
});
$queryBuilder = $this->getDoctine()
->getRepository('Entity1')
->createQueryBuilder('t')
->leftJoin('t.child', 'e');
foreach ($params as $key => $val)
{
$where = sprintf('e.%s = :%s', $key, $key);
$queryBuilder
->andWhere($where)
->setParameter($key, $value);
}
$res = $queryBuilder
->getQuery()
->getResult();
Как-то так.