Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] sortowanie wyników doctrine tree
Forum PHP.pl > Forum > PHP > Frameworki
Magician
Witam,

kombinuję jak konik pod górkę i nie mogę znaleźć rozwiązania. Korzystam z tree doctrine i w kodzie sciagam sobie

  1. $table = Doctrine::getTable('sfFilebaseDirectory');
  2. $id = $request->getParameter('id', null);
  3. $root = null;
  4. if($id)
  5. {
  6. $root = $table->find($id);
  7. }
  8. else
  9. {
  10. $root = $table->getRootNode();
  11. }
  12. $this->zwrotka=$root->getNode()->getChildren();


no i ta zwrotka jest posortowana nie tak jak chcę. To daje jako sql:

  1. SELECT s.id AS s__id, s.filename AS s__filename, s.hash AS s__hash, s.comment AS s__comment, s.title AS s__title, s.environment AS s__environment, s.application AS s__application, s.tags AS s__tags, s.type AS s__type, s.author AS s__author, s.copyright AS s__copyright, s.root_id AS s__root_id, s.lft AS s__lft, s.rgt AS s__rgt, s.level AS s__level
  2. FROM sf_abstract_files s WHERE ((s.lft > '82' AND s.rgt < '289') AND s.level <= '2' AND s.root_id = '1')
  3. ORDER BY s.lft ASC


a chcę:
  1. ORDER BY type DESC,filename



Teoretycznie mogę sobie w DQL machnąć zapytanie ale zakładam, że da się bardziej elegancko.

Znalazlem, że coś dzwoni w okolicach setBaseQuery() ale z choinkę nie potrafię wygooglać ani wykombinować o co chodzi.

Za wszelakie podpowiedzi/rozwiązania będę wdzięczny.

ktokolwiek?

[php][/php]

Crozin
Sortowanie drzew opartych o model NestedSet nie jest takie proste - tutaj powinieneś znaleźć potrzebne Ci informacje: http://www.google.pl/search?hl=pl&q=so...+Google&lr=
Najprawdopodobniej bez robienia tego ręcznie (tj. pisania DQLa) lub nadpisywaniu/rozbudowywaniu Doctrine_Node się nie obejdzie.
murwazy
Cytat(Magician @ 26.06.2010, 17:48:05 ) *
Teoretycznie mogę sobie w DQL machnąć zapytanie ale zakładam, że da się bardziej elegancko.

skoro przekazujesz to do widoku moim zdaniem powinienes posluchac tworcow doctrine i napisac metode w rodzaju getByParentId($id) a w niej dac ladnego dqla z hydracja do tablic - ze wzgledu na wydajnosc i mozliwosc swobodnego sortowania wyniku.

sprawdz tez cos takiego ale nie wiem czy zadziala (pisane z palca):
  1. $q = Doctrine_Query::create();
  2. ->select('c.co_tam_chcesz')
  3. ->from('sfFilebaseDirectory c')
  4. ->setHydrationMode(Doctrine::HYDRATE_ARRAY)
  5. ->addOrderBy('c.type desc')
  6. ->addOrderBy('c.filename');
  7.  
  8. $treeObject = Doctrine::getTable('sfFilebaseDirectory')->getTree();
  9. $treeObject->setBaseQuery($q);
  10. $tree = $treeObject->fetchBranch($id, array('depth' => 1));
  11. $treeObject->resetBaseQuery();
  12. $this->zwrotka = $tree;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.