Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] Ilość zwracanych danych po odp bazy, doSelectJoinAll(), doSelectJoinObiekt().....
Ravv
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 8.02.2006

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


Witam.

Czy normalne jest że ilość zwracanych danych przez obiekt sfOutputEscaperArrayDecorator (po wywołaniu polecenia doSelectJoinAll*()) jest nad wyraz duża?

W sumie wygląda na to że pobierając np. jeden artykuł z tabeli z artykułami (czyli jeden wiersz) z bazy przy pomocy np. doSelectJoinAutor() by np. prócz ID autora dostać też jego Nazwisko (z osobnej tabeli 'Autor') -> Propel zwraca:
1) obiekt 'Artykuł' (ok)
1a) obiekt 'Autor' powiązany z poprzednim obiektem 'Artykuł' (ok)
1b) wszystkie obiekty 'Artykuł' powiązane z pobranym punkt wcześniej obiektem 'Autor' ((IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !)

Czy idzie jakoś wyeliminować bezużyteczny pkt. 1b)(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (oczywiście bezużyteczny gdy pobrane dane chcę tylko wyświetlić)
Bo jeżeli chcę pobrać jeden artykuł i jego autora, to propel zwróci mi tenże artykuł oraz dane autora, a poza tym 1000 obiektów typu 'Artykuł', które należą do tegoż autora....
Poprawnie to rozumiem? Jak tego uniknąć?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

================================================================
Przykład:

Kod PHP:
  1. <?php
  2. public function executeLastNews()
  3.    {
  4.        $c = new Criteria();
  5.        $c->add( ArticlePeer::IS_PUBLISHED, true );
  6.        $c->add( CategoryPeer::IS_PUBLISHED, true );
  7.        $c->addDescendingOrderByColumn( ArticlePeer::CREATED_AT );
  8.        $c->setLimit( $this->items );
  9.        $this->articles = ArticlePeer::doSelectJoinCategory($c);
  10.    }// end executeLastNews();
  11. ?>


Wygenerowane zapytanie przez w/w funkcję doSelectJoinCategory():
  1. SELECT article.ID, article.CATEGORY_ID, article.REGION_ID, article.PICTURE, article.TITLE, article.SHORT_DESC, article.DESC, article.IS_PUBLISHED, article.CREATED_AT, article.UPDATED_AT, category.ID, category.NAME, category.IS_PUBLISHED, category.CREATED_AT FROM `article` LEFT JOIN category ON (article.CATEGORY_ID=category.ID) WHERE article.IS_PUBLISHED=1 AND category.IS_PUBLISHED=1 ORDER BY article.CREATED_AT DESC LIMIT 3


Zwrócone przez bazę wyniki:

  1. ID CATEGORY_ID REGION_ID PICTURE TITLE SHORT_DESC DESC IS_PUBLISHED CREATED_AT UPDATED_AT ID NAME IS_PUBLISHED CREATED_AT
  2. 5 7 20 testowy_drugi.jpg Czy grozi nam powtórka zimy stulecia? Najbliższy tydzień upłynie pod znakiem gwałtownego... TO jest pełny opis.
  3. Najbliższy tydzień upłynie pod... 1 2009-02-04 14:35:59 2009-02-04 14:35:59 7 Teatr 1 2009-02-04 14:35:59


( wiem że ostatnie pole może mało czytelne, ale WSZYSTKO do tej pory jest naprawdę super, tak jak powinno być! )

Tyle że........
podczas var_dump( $articles ) dostaję taki oto obiekt:

  1. <?php
  2. object(sfOutputEscaperArrayDecorator)#65 (3) {
  3.  ["count:private"]=>
  4.  NULL
  5.  ["value:protected"]=>
  6.  array(1) {
  7.    [0]=>
  8.    object(Article)#90 (18) {
  9.      ["id:protected"]=>
  10.      int(5)
  11.      ["category_id:protected"]=>
  12.      int(7)
  13.      ["region_id:protected"]=>
  14.      int(20)
  15.      ["picture:protected"]=>
  16.      string(17) "testowy_drugi.jpg"
  17.      ["title:protected"]=>
  18.      string(38) "Czy grozi nam powtórka zimy stulecia?"
  19.      ["short_desc:protected"]=>
  20.      string(201) "Najbliższy tydzień upłynie pod znakiem gwałtownego ochłodzenia.
  21. Temperatury spadną nawet poniżej -25 stopni. Czy grozi nam powtórka
  22. z zimy stulecia? Wtedy też nic nie zapowiadało fali zimna.
  23. "
  24.      ["desc:protected"]=>
  25.      string(1227) "To jest pełny opis.
  26. Najbliższy tydzień upłynie pod znakiem gwałtownego ochłodzenia.
  27. Temperatury spadną nawet poniżej -25 stopni. Czy grozi nam powtórka
  28. z zimy stulecia? Wtedy też nic nie zapowiadało fali zimna. Itd."
  29.      ["is_published:protected"]=>
  30.      bool(true)
  31.      ["created_at:protected"]=>
  32.      string(19) "2009-02-04 14:35:59"
  33.      ["updated_at:protected"]=>
  34.      string(19) "2009-02-04 14:35:59"
  35.      ["aCategory:protected"]=>
  36.      object(Category)#91 (14) {
  37.        ["id:protected"]=>
  38.        int(7)
  39.        ["name:protected"]=>
  40.        string(5) "Teatr"
  41.        ["is_published:protected"]=>
  42.        bool(true)
  43.        ["created_at:protected"]=>
  44.        string(19) "2009-02-04 14:35:59"
  45.        ["collThemaCategorys:protected"]=>
  46.        NULL
  47.        ["lastThemaCategoryCriteria:private"]=>
  48.        NULL
  49.        ["collArticles:protected"]=>
  50.        array(1) {
  51.          [0]=>
  52.          object(Article)#90 (18) {
  53.            ["id:protected"]=>
  54.            int(5)
  55.            ["category_id:protected"]=>
  56.            int(7)
  57.            ["region_id:protected"]=>
  58.            int(20)
  59.            ["picture:protected"]=>
  60.            string(17) "testowy_drugi.jpg"
  61.            ["title:protected"]=>
  62.            string(38) "Czy grozi nam powtórka zimy stulecia?"
  63.            ["short_desc:protected"]=>
  64.            string(201) "Najbliższy tydzień upłynie pod znakiem gwałtownego ochłodzenia.
  65. Temperatury spadną nawet poniżej -25 stopni. Czy grozi nam powtórka
  66. z zimy stulecia? Wtedy też nic nie zapowiadało fali zimna.
  67. "
  68.            ["desc:protected"]=>
  69.            string(1227) "To jest pełny opis.
  70. Najbliższy tydzień upłynie pod znakiem gwałtownego ochłodzenia.
  71. Temperatury spadną nawet poniżej -25 stopni. Czy grozi nam powtórka
  72. z zimy stulecia? Wtedy też nic nie zapowiadało fali zimna. Itd."
  73.            ["is_published:protected"]=>
  74.            bool(true)
  75.            ["created_at:protected"]=>
  76.            string(19) "2009-02-04 14:35:59"
  77.            ["updated_at:protected"]=>
  78.            string(19) "2009-02-04 14:35:59"
  79.            ["aCategory:protected"]=>
  80.            object(Category)#91 (14) {
  81.              ["id:protected"]=>
  82.              int(7)
  83.              ["name:protected"]=>
  84.              string(5) "Teatr"
  85.              ["is_published:protected"]=>
  86.              bool(true)
  87.              ["created_at:protected"]=>
  88.              string(19) "2009-02-04 14:35:59"
  89.              ["collThemaCategorys:protected"]=>
  90.              NULL
  91.              ["lastThemaCategoryCriteria:private"]=>
  92.              NULL
  93.              ["collArticles:protected"]=>
  94.              array(1) {
  95.                [0]=>
  96.                *RECURSION*
  97.              }
  98.              ["lastArticleCriteria:private"]=>
  99.              NULL
  100.              ["alreadyInSave:protected"]=>
  101.              bool(false)
  102.              ["alreadyInValidation:protected"]=>
  103.              bool(false)
  104.              ["validationFailures:protected"]=>
  105.              array(0) {
  106.              }
  107.              ["_new:private"]=>
  108.              bool(false)
  109.              ["_deleted:private"]=>
  110.              bool(false)
  111.              ["modifiedColumns:protected"]=>
  112.              array(0) {
  113.              }
  114.            }
  115.            ["aRegion:protected"]=>
  116.            NULL
  117.            ["alreadyInSave:protected"]=>
  118.            bool(false)
  119.            ["alreadyInValidation:protected"]=>
  120.            bool(false)
  121.            ["validationFailures:protected"]=>
  122.            array(0) {
  123.            }
  124.            ["_new:private"]=>
  125.            bool(false)
  126.            ["_deleted:private"]=>
  127.            bool(false)
  128.            ["modifiedColumns:protected"]=>
  129.            array(0) {
  130.            }
  131.          }
  132.        }
  133.        ["lastArticleCriteria:private"]=>
  134.        NULL
  135.        ["alreadyInSave:protected"]=>
  136.        bool(false)
  137.        ["alreadyInValidation:protected"]=>
  138.        bool(false)
  139.        ["validationFailures:protected"]=>
  140.        array(0) {
  141.        }
  142.        ["_new:private"]=>
  143.        bool(false)
  144.        ["_deleted:private"]=>
  145.        bool(false)
  146.        ["modifiedColumns:protected"]=>
  147.        array(0) {
  148.        }
  149.      }
  150.      ["aRegion:protected"]=>
  151.      NULL
  152.      ["alreadyInSave:protected"]=>
  153.      bool(false)
  154.      ["alreadyInValidation:protected"]=>
  155.      bool(false)
  156.      ["validationFailures:protected"]=>
  157.      array(0) {
  158.      }
  159.      ["_new:private"]=>
  160.      bool(false)
  161.      ["_deleted:private"]=>
  162.      bool(false)
  163.      ["modifiedColumns:protected"]=>
  164.      array(0) {
  165.      }
  166.    }
  167.  }
  168.  ["escapingMethod:protected"]=>
  169.  string(16) "esc_specialchars"
  170. }
  171. ?>


I to tylko dla jednego rekordu... Jakbym chciał pobrać ich 100, to aż strach pomyśleć jak obciążyłoby to pamięć :/.
Obłęd.

Ten post edytował Ravv 5.02.2009, 21:32:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ravv
post
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 8.02.2006

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


Z tego co wiem to Doctrine jest tak samo zasobożerny. Pobierane są chyba wszystkie powiązane ze sobą rekordy, nawet jak ich nie chcesz (i to nawet po kilka razy te same, co widać po var_dumpie). Tak gwoli zasady "a może programista będzie chciał ich użyć".

Kumpel który jest programistą nie-amatorem mówił że przy projektach robionych przez firmę gdzie pracował często zdarzało się że przy chęci wyciągnięcia 5ciu wierszy Doctrine pobierało dodatkowych kilkaset co powodowało błedy "Fatal error: Memory Exhausted..."... Patrząc na var_dumpy() wcale się nie dziwię.
No i dlatego jakoś mam obawy w korzystaniu z Propela/Doctrine w Symfony przez doSelect, doSelectJoinAll itp. Jak aplikacja mi się rozrośnie i nagle zaczną się sypać błędy z pamięcią to nie pozostani nic innego jak przebudowa wszystkiego :/.

Ten post edytował Ravv 6.02.2009, 11:55:46
Go to the top of the page
+Quote Post

Posty w temacie
- Ravv   [Symfony] Ilość zwracanych danych po odp bazy   5.02.2009, 12:47:30
- - SongoQ   Najlepszym rozwiazaniem jest vidok. Dodaje sporego...   5.02.2009, 14:13:52
- - Ravv   Nie no, jeszcze widoki tworzyć? Tylko po to by móc...   5.02.2009, 14:56:31
- - SongoQ   Ok, widze ze wiele teorii przed Toba. Co to Propel...   5.02.2009, 22:42:59
- - Ravv   No tak, rację masz że ORM stanowi dla mnie (jeszcz...   6.02.2009, 09:19:19
- - AxZx   ja się zastanawiam czy to z czym Ty masz problem b...   6.02.2009, 10:49:32
- - Ravv   Budując system do obsługi bloga, do obsługi galeri...   6.02.2009, 11:08:55
- - AxZx   może coś z var_dump jest nie tak? też jak sprawdza...   6.02.2009, 11:43:14
- - Ravv   Z tego co wiem to Doctrine jest tak samo zasobożer...   6.02.2009, 11:54:53
- - SongoQ   @Ravv pomijajac juz sens propela bo to juz mam nad...   6.02.2009, 12:30:08
- - Ravv   Baza: [SQL] pobierz, plaintext propel: [b...   6.02.2009, 12:55:40
- - SongoQ   No to teraz zobacz - ArticlePeer::doSelectJoinAll(...   6.02.2009, 13:10:00
- - Ravv   Zacząłem kombinować z tymi kryteriami sukcesywnie ...   6.02.2009, 14:25:50
- - SongoQ   Jest tak jak powinno byc. W jednym zapytaniu chesz...   6.02.2009, 14:33:07
- - AxZx   utworzyć widok w bazie to jest jedno rozwiązanie, ...   6.02.2009, 14:51:25
- - SongoQ   @AxZx Tylko poprawienie metod nie zmieni Ci zbyt w...   6.02.2009, 16:29:03
- - AxZx   a po co tworzyć widoki? po co w ogóle robić te dod...   6.02.2009, 17:33:13
- - SongoQ   Widok w propelu to tak naprawde model do oczytu. A...   6.02.2009, 18:50:03
- - AxZx   aaa, rozumiem. czyli po prostu w schema.yml tworzy...   7.02.2009, 01:42:28
- - SongoQ   Uwierz mi ze nawet jesli przenieszesz to na dedyka...   7.02.2009, 10:26:34
- - AxZx   a można zrobić tak jak pisałem wcześniej? że w sch...   7.02.2009, 11:09:42
- - SongoQ   Tylko jak bedziesz pobieral juz w template zalezne...   7.02.2009, 13:14:05
- - AxZx   no nie zupełnie. bo wtedy w addjoin będzie dołącza...   7.02.2009, 13:55:12
- - SongoQ   A wyobrazasz sobie kryteria do 3 tabel z grupowani...   9.02.2009, 09:23:12


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

 



RSS Aktualny czas: 8.10.2025 - 13:49