Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] backend + i18n + duża liczba zapytań SQL
phpion
post 18.11.2007, 12:44:20
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Witam!
Mam pewien problem z ograniczeniem liczby zapytań SQL w backendzie przy pracy z wersjami językowymi (tabele standardowe attraction oraz attraction_i18n).

Mój generator.yml wygląda następująco:
Kod
...
    list:
      title: Attractions list
      display: [_icon, name, is_active]
      filters: [is_active]
      object_actions:
        _edit: ~
        _delete: ~
      peer_method:   doSelectWithI18nIfExists
...

gdzie metoda doSelectWithI18nIfExists() wygląda tak:
  1. <?php
  2. public static function doSelectWithI18nIfExists(Criteria $c, $culture = null, $con = null) {
  3. $return = array();
  4.  
  5. $connection = sfContext::getInstance()->getDatabaseConnection(AttractionPeer::DATABASE_NAME);
  6. $query = 'SELECT a.id, a.icon, ai.name FROM attraction a LEFT OUTER JOIN attraction_i18n a
    i ON a.id=ai.id AND (ai.culture="pl_PL" OR ai.culture IS NULL)'
    ;
  7. $stmt = $connection->prepareStatement($query);
  8. $rs = $stmt->executeQuery();
  9.  
  10. foreach($rs as $r) {
  11. $obj = new Attraction();
  12. $obj->setId($r['id']);
  13. $obj->setName($r['name']);
  14. $obj->setIcon($r['icon']);
  15.  
  16. array_push($return, $obj);
  17. }
  18.  
  19. return $return;
  20. }
  21. ?>

Problem w tym, że w adminie wykonuje mi się masa zbędnych zapytań (myślałem, że rozwiążę to poprzez utworzenie innej metody pobierającej dane):
  1. [0.31 ms] SELECT COUNT(attraction.ID) FROM attraction
  2. [0.88 ms] SELECT a.id, a.icon, ai.name FROM attraction a LEFT OUTER JOIN attraction_i18n ai ON a.id=ai.id AND (ai.culture='pl_PL' OR ai.culture IS NULL)
  3. [0.31 ms] SELECT attraction_i18n.NAME, attraction_i18n.ID, attraction_i18n.CULTURE FROM attraction_i18n WHERE attraction_i18n.ID=1 AND attraction_i18n.CULTURE IS NULL
  4. [0.25 ms] SELECT attraction_i18n.NAME, attraction_i18n.ID, attraction_i18n.CULTURE FROM attraction_i18n WHERE attraction_i18n.ID=2 AND attraction_i18n.CULTURE IS NULL
  5. ...

itd. dla każdego ID (w sumie 40 zapytań :|). Próbowałem wyłączyć w settings.yml ustawienie i18n ale i to nie przyniosło rezultatu. Pomyślałem, że może $obj->setName($v) jakoś wywołuje zapytanie SQL ale zakomentowanie tej linijki wcale nie zmienia liczby wykonywanych zapytań.

Więc moje pytanie jest takie: w jaki sposób wyeliminować te dodatkowe (zupełnie zbędne) zapytania?.

Pozdrawiam: pion
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.08.2025 - 07:48