@Polim

Как правильно построить запрос на Doctrine 2 + Symfony 2?

Есть 2 таблицы (table1, table2) между ними связь OneToOne
table1 (id, text);
table2 (id, table1_id, param1, param2, param3)
Параметры приходят через get-запрос
В итоге нужно возвращать Entity\table1 удовлетворяющие запросу, в тоже время количество параметров может меняться

$em=$this->get("doctrine")->getManager();
$get=$request->query;
foreach($get as $key=>$value)
{
  if($value!='')
  // ... //
}
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
@curator
Можно сделать связь 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();

Как-то так.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы