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
...
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:
<?php $connection = sfContext::getInstance()->getDatabaseConnection(AttractionPeer::DATABASE_NAME); $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)'; $stmt = $connection->prepareStatement($query); $rs = $stmt->executeQuery(); foreach($rs as $r) { $obj = new Attraction(); $obj->setId($r['id']); $obj->setName($r['name']); $obj->setIcon($r['icon']); } return $return; } ?>
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):
[0.31 ms] SELECT COUNT(attraction.ID) FROM attraction [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) [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 [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 ...
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