Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapis zapytania w Symfony Query Builder
baracuda
post 15.09.2022, 20:33:03
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 2.02.2022

Ostrzeżenie: (0%)
-----


Witam serdecznie,
Mam taki kod napisany z "ręki":


  1. public function checkTransactionsByOrgin(string $origin): bool
  2. {
  3. $sql = 'SELECT 1 FROM `order` o JOIN payment_transaction_order pto ON(o.id = pto.order_id) WHERE o.origin = :origin;';
  4. $stmt = $this->connection->prepare($sql);
  5. $stmt->bindParam('origin', $origin, PDO::PARAM_STRING);
  6. $stmt->execute();
  7.  
  8. return (bool) $stmt->fetchColumn();
  9. }


Potrzebuję przerobić go na Symfonowego Query Buildera.
Próbowałem coś takiego, ale coś nie trybi:


  1. public function checkTransactionsByOrgin(string $origin): bool
  2. {
  3. $result = $this->createQueryBuilder($this->getAlias())
  4. ->addSelect('1')
  5. ->join('order', 'o')
  6. ->join('paymentTransactionOrder', 'pto')
  7. ->andWhere('o.origin = :origin')
  8. ->setParameter('origin', $origin)
  9. ->getQuery()
  10. ->getArrayResult();
  11.  
  12. return (bool) $result;
  13. }




Jak poprawie zapisać powyższy kod w Query Builderze?

Z góry dzięki za pomoc smile.gif






Go to the top of the page
+Quote Post
nospor
post 16.09.2022, 08:28:09
Post #2





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Jak " cos" nie trybi to chyba wypadaloby podac nam blad jakis a nie mamy sie domyslac...

Na pierwszy rzut oka widac ze zamiast FROM to dales o jeden JOIN za duzo


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Salvation
post 16.09.2022, 13:46:27
Post #3





Grupa: Zarejestrowani
Postów: 344
Pomógł: 70
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


Jeżeli wychodzisz z Repo Order, to ten pierwszy join jest zupełnie zbędny.

Wg mnie coś takiego powinno zadziałać:
  1. // OrderRepositiry::class
  2.  
  3. public function checkTransactionsByOrgin(string $origin): bool
  4. {
  5. $builder = $this->createQueryBuilder('o');
  6.  
  7. $builder
  8. ->select('o.id')
  9. ->leftJoin(PaymentTransactionOrder::class, 'pto', 'WITH', 'o.id = pto.order_id')
  10. ->where('o.origin = :origin')
  11. ->setParameter('origin', $origin);
  12.  
  13. $query = $builder->getQuery();
  14. $result = $query->getArrayResult();
  15.  
  16. return !empty($result);
  17. }

Z drugiej jednak strony, nie rozumiem po co ten JOIN jest w ogóle w zapytaniu skoro i tak go nie wykorzystujesz...

Ten post edytował Salvation 16.09.2022, 14:18:15
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 22:28