Katarzyna
Kajzar
Student, Akademia
Górniczo-Hutnicza
im. Stanisława
Staszi...
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 :)
Michał
Majewski
Programista Symfony
& Symfony 2
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
Student, Akademia
Górniczo-Hutnicza
im. Stanisława
Staszi...
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ę.
Michał
Majewski
Programista Symfony
& Symfony 2
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
Student, Akademia
Górniczo-Hutnicza
im. Stanisława
Staszi...
Temat: Zapytanie w Doctrine
Robię, ale wyrzuca mi kompletnie białą stronę w przeglądarce, bez paska developerskiego również.To musi być łatwe..
Łukasz Adamczewski Programista Symfony
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.
www.fotomody.pl
fotografia mody, IT
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
Student, Akademia
Górniczo-Hutnicza
im. Stanisława
Staszi...
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
Student, Akademia
Górniczo-Hutnicza
im. Stanisława
Staszi...
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.
Łukasz Adamczewski Programista Symfony
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.
www.fotomody.pl
fotografia mody, IT
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:)
Michał
Majewski
Programista Symfony
& Symfony 2
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() :))
