Преобразование SQL-запроса с помощью Doctrine Query Builder - PullRequest
1 голос
/ 21 мая 2019

SQL - правильно и работает в mysql-консоли.У меня есть некоторый SQL-запрос, который я использую для выбора из продуктов базы данных.Я пытался просто положить его в хранилище, но это не сработало вообще.

Также вот код функции ProductRepository

Может кто-нибудь помочь мне или показать мою ошибку и объяснить, как преобразовать SQL в запрос построителя запросов или заставить работать чистый SQL?

SELECT *
FROM accounting_products
LEFT JOIN accounting_incoming_invoice_items 
    ON accounting_incoming_invoice_items.product_id = accounting_products.id
WHERE accounting_incoming_invoice_items.outcome_price >
          accounting_incoming_invoice_items.price;
    public function findAllOnStorage()
    {
        $rsm = new ResultSetMapping($this->getEntityManager());

        $query = $this->getEntityManager()->createNativeQuery(
            "SELECT * FROM accounting_products LEFT JOIN accounting_incoming_invoice_items 
                    ON accounting_incoming_invoice_items.product_id = accounting_products.id
                    WHERE accounting_incoming_invoice_items.outcome_price > accounting_incoming_invoice_items.price;",
            $rsm);

        $all = $query->getResult();
        #dump($all);exit;
        return $all;
    }

Если в репозитории чистый SQL - он просто не работает.Результатом запроса является пустой набор, но в консоли он возвращает ровно одну запись

Попытки преобразовать SQL в построитель запросов не увенчались успехом.

1 Ответ

0 голосов
/ 21 мая 2019
$qrBuilder = $this->createQueryBuilder('p')
    ->select('p', 'i')
    ->leftJoin(IncomingInvoiceItem::class, 'i')
    ->where('i.outcomePrice > i.price');


$all = $qrBuilder->getQuery()->getResult();

Но MariaDB по-прежнему выдает ошибку:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE a1_.outcome_price > a1_.price' at line 1
...