Symfony queryBuilder, не могу переписать sql в queryBuidler - PullRequest
0 голосов
/ 03 февраля 2020

Я не могу переписать SQL запрос к queryBuilder, для моей задачи нужен только объект queryBuilder. У меня есть запрос SQL, мне нужно взять из базы данных для каждого пользователя, заказы, которые будут последними и имеют isPaid = 0.

 SELECT
        *
    FROM
        orders o
    JOIN
        (
        SELECT
            owner_id,
            MAX(created_at) max_date
        FROM
            orders
        GROUP BY
            owner_id
    ) max_dates
    ON
        o.owner_id = max_dates.owner_id AND o.created_at = max_dates.max_date
    WHERE
        is_paid = 0

1 Ответ

1 голос
/ 03 февраля 2020

Поскольку вы присоединяетесь к подзапросу, может быть немного сложно передать этот запрос SQL в DQL. К счастью, вам не нужно. Doctrine ORM позволяет вам выполнять обычный SQL запрос и затем отображать результаты обратно на объект, как это было бы с DQL.

Вы можете взглянуть на Native Queries и ResultSetMapping для этого: https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/native-sql.html

В вашем случае это может выглядеть примерно так в методе поиска хранилища:

public function findLatestUnpaidOrders()
{
    $sql = '...'; // Your query

    $rsm = new ResultSetMappingBuilder($this->em);
    $rsm->addRootEntityFromClassMetadata(Order::class, 'order');

    $query = $this->em->createNativeQuery($sql, $rsm);
    // $query->setParameter('owner_id', $user->getId()); // if you later want to pass parameters into your SQL query

    return $query->getResult();
}
...