Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 10 Dołączył: 16.11.2008 Ostrzeżenie: (0%)
|
Korzystam z pluginu sfDoctrineGuardPlugin. Dodatkowo mam w bazie tabelę przechowującą teksty literackie użytkowników, powiązaną z sfGuardUser:
Kod writing: actAs: Taggable: ~ Timestampable: ~ Sluggable: fields: [title] name: title_slug canUpdate: true unique: false columns: user_id: type: integer title: type: string(255) title_slug: type: string(255) content: type: clob relations: User: class: sfGuardUser type: one foreignType: many foreignAlias: Writings local: user_id foreign: id onDelete: CASCADE options: collate: utf8_unicode_ci charset: utf8 indexes: writings_index: fields: [created_at, updated_at, title_slug] Jeden użytkownik może być autorem wielu tekstów, a jeden tekst posiada jednego użytkownika (autora). Próbuję "dobrać się" do wszystkich tekstów użytkownika nie za pomocą zwykłego getWriters() w sfGuardUser, ponieważ zależy mi na istnieniu dodatkowej kolumny - nazwy użytkownika. W tym celu dopisałem metodę w sfGuardPlugin:
Niestety Doctrine zwraca mi zawsze tylko jeden rekord , pomimo że czysty SQL w konsoli PhpMyAdmin zwraca ich tyle, ile jest w bazie. Co ciekawe, jeśli wymuszę zachowanie na Doctrine::HYDRATE_NONE, to metoda użytkownika zwraca tyle rekordów co czysty SQL. Czy ktoś wie dlaczego Doctrine zwraca tylko jeden rekord? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 8.09.2009 Ostrzeżenie: (0%)
|
Jeśli mogę jeszcze coś zasugerować. W mojej opinii niepotrzebne jest w ogóle złączenie w metodzie getWritingsWithUsername. Skoro warunkiem złączenia staje się userId, to przecież znacznie prościej jest wykonać:
Powyższy przykład posiada "podwójną optymalizację" - po pierwsze nie łączy tabel, a jedynie wyszukuje po indeksie, a po drugie nie wykonuje hydratacji do obiektu. Warto jednak pamiętać, że hydratacja do tablicy stosowana jest w momencie odczytu danych i braku konieczności wykonywania na nich operacji zmieniających stan obiektów (update(), save()). |
|
|
|
m44 [Symfony][Doctrine] Problem z prostym złączeniem. 5.10.2010, 18:42:29
olekbiker Doctrine najprawdopodobniej zwraca prawidłowy wyni... 5.10.2010, 19:40:58
m44 Miałeś rację, wszystko jest w obiekcie. Co ciekawe... 5.10.2010, 19:51:37 ![]() ![]() |
|
Aktualny czas: 28.12.2025 - 08:07 |