Katarzyna Kajzar

Katarzyna Kajzar PHP developer

Temat: Zapytanie w Doctrine

Witajcie.

Kolejna prośba o pomoc z mojej strony, mam nadzieję, że niebawem to ja będę mogła pomagać :)

Czy mógłby ktoś z Was powiedzieć mi jak napisać w doctrine zapytanie, które w MySQL wygląda następująco:


SELECT *
FROM article AS a
INNER JOIN section_article AS sa ON a.id_article = sa.article_id
AND sa.section_id =8
ORDER BY a.`priority` ASC


Mam relacje wiele-do-wielu pomiędzy Section i Article. Bez problemu pobieram sobie sekcję, którą potrzebuję i mam w niej artykuły, ale potrzebuję, żeby były one ustawione ważnością artykułów. Może da się jakoś zmienić to zapytanie:

$this->section = Doctrine_Core::getTable('Section')->find($this->id_section);


żeby było prościej.

Z góry dziękuję za pomoc :)

konto usunięte

Temat: Zapytanie w Doctrine

Piszę z palca i nigdy nie robiłem w doctrinie inner joinów (zawsze left joiny:P), więc nie wiem czy będzie poprawnie, ale spróbuj:

$this->section = Doctrine_Query::create()
->from('Article a')
->innerJoin('a.SectionArticle sa')
->where('sa.section_id = ?', $this->id_section)
->orderBy('a.priority ASC')
->fetchOne();


daj znać, czy o to chodziło:)
Katarzyna Kajzar

Katarzyna Kajzar PHP developer

Temat: Zapytanie w Doctrine

Cześć!
Dzięki za odpowiedź.

Ja to pisałam w ten sposób:


$this->q = Doctrine_Query::create()
->select('a.content, a.id_article, a.priority')
->from('Article a')
->innerJoin('a.SectionArticle sa')
->where('sa.section_id = ?', $this->id_section)
->orderBy('a.priority ASC');


Ale nie chodzi, nie wiem dlaczego. Przeglądarka wyrzuca białą stronę.

konto usunięte

Temat: Zapytanie w Doctrine

A robisz pozniej jakiegoś execute() albo fetchOne() na tym? Jeżeli tak, to zrób var_dumpa na wyniku (najlepiej zrobić echo '<pre>' . var_dump($q) . '</pre>', bedzie sie to dało jakoś czytać) i zobacz czy w ogóle coś zwraca. No i przede wszystkim - jak wygląda to zapytanie w sqlu (tzn jak to doctrine przekształca na sql, można w pasku developerskim zobaczyć:))Michał Majewski edytował(a) ten post dnia 29.04.11 o godzinie 10:17
Katarzyna Kajzar

Katarzyna Kajzar PHP developer

Temat: Zapytanie w Doctrine

Robię, ale wyrzuca mi kompletnie białą stronę w przeglądarce, bez paska developerskiego również.

To musi być łatwe..

konto usunięte

Temat: Zapytanie w Doctrine

Zobacz logi w log/srodowisko_dev.log na środowisku develperskim, na 100% zapytanie musi być poprawne, ale może nazwa relacji się inaczej nazywa albo w kolumnie literówka
Adam W.

Adam W. senior php
developer, Symfony

Temat: Zapytanie w Doctrine

Łukasz Adamczewski:
Zobacz logi w log/srodowisko_dev.log na środowisku develperskim, na 100% zapytanie musi być poprawne, ale może nazwa relacji się inaczej nazywa albo w kolumnie literówka

jeżeli jest błąd w nazwie kolumny, czy zła nazwa relacji doctrine zwraca błąd, który powinien wyświetlić się.
Katarzyna Kajzar

Katarzyna Kajzar PHP developer

Temat: Zapytanie w Doctrine

Macie rację, zapytanie jest ok. To mój brak doświadczenia i.. wiedzy.
Ktoś mi kiedyś powiedział, że print_r() drukuje obiekty tak samo, jak tablice, więc w widoku drukowałam tym wynik i nie pokazywało się nic - nawet pasek developerski.

Jak wywołałam na wyniku zapytania toArray(), to działa elegancko.

Dzięki wielkie za pomoc.

A tak btw. to jak podejrzeć można obiekt? Tylko var_dump() ?

Edit:
Czy może toString() zadziała?Katarzyna Idczak edytował(a) ten post dnia 01.05.11 o godzinie 14:52
Katarzyna Kajzar

Katarzyna Kajzar PHP developer

Temat: Zapytanie w Doctrine

Ostatecznie zostawiłam taką wersję akcji:


$this->q = Doctrine_Query::create()
->select('a.content, a.id_article, a.priority')
->from('Article a')
->innerJoin('a.SectionArticle sa')
->where('sa.section_id = ?', $this->id_section)
->orderBy('a.priority ASC')
->limit(1)
->execute()
->toArray();

$this->redirect('@default?&module=article&action=show&art=' . $this->q[0][id_article] . '&id=' . $this->id_section) ;


Sprawdzenie, który artykuł w sekcji ma najniższy priorytet i przekierowanie do artcile/show.

konto usunięte

Temat: Zapytanie w Doctrine

Adam W.:
Łukasz Adamczewski:
Zobacz logi w log/srodowisko_dev.log na środowisku develperskim, na 100% zapytanie musi być poprawne, ale może nazwa relacji się inaczej nazywa albo w kolumnie literówka

jeżeli jest błąd w nazwie kolumny, czy zła nazwa relacji doctrine zwraca błąd, który powinien wyświetlić się.

Jeśli error_reporting albo error_display i do tego w symfony jest to wszystko wyłączone to wszystkie błędy zostaną stłumione, dlatego poleganie na logach php i symfony jest zawsze niezawodne.

Ps. ponieważ pisałaś jeszcze na grupie doctrine odsyłam też tam
http://www.goldenline.pl/forum/2381732/zapytanie-w-doc...Łukasz Adamczewski edytował(a) ten post dnia 01.05.11 o godzinie 15:21
Adam W.

Adam W. senior php
developer, Symfony

Temat: Zapytanie w Doctrine

Łukasz Adamczewski:
Adam W.:
Łukasz Adamczewski:
Zobacz logi w log/srodowisko_dev.log na środowisku develperskim, na 100% zapytanie musi być poprawne, ale może nazwa relacji się inaczej nazywa albo w kolumnie literówka

jeżeli jest błąd w nazwie kolumny, czy zła nazwa relacji doctrine zwraca błąd, który powinien wyświetlić się.

Jeśli error_reporting albo error_display i do tego w symfony jest to wszystko wyłączone to wszystkie błędy zostaną stłumione, dlatego poleganie na logach php i symfony jest zawsze niezawodne.

zgadza się:)
ale jeżeli sprawdzamy błędy, poprawiamy coś w kodzie, to chyba normalne, że wyświetlanie błędów powinno być włączone:)

konto usunięte

Temat: Zapytanie w Doctrine

Katarzyna Idczak:
Ostatecznie zostawiłam taką wersję akcji:


$this->q = Doctrine_Query::create()
->select('a.content, a.id_article, a.priority')
->from('Article a')
->innerJoin('a.SectionArticle sa')
->where('sa.section_id = ?', $this->id_section)
->orderBy('a.priority ASC')
->limit(1)
->execute()
->toArray();

$this->redirect('@default?&module=article&action=show&art=' . $this->q[0][id_article] . '&id=' . $this->id_section) ;


Sprawdzenie, który artykuł w sekcji ma najniższy priorytet i przekierowanie do artcile/show.

tak jeszcze dodam od siebie, że jeżeli chcesz zrobić execute()->toArray() to można to napisać krócej, jedną funkcją fetchArray() :))

Następna dyskusja:

Doctrine_Collection::save -...




Wyślij zaproszenie do