Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony]zapytanie w Propel -- Symfony
mercii
post
Post #1





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 1.05.2006

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


Witam
Jestem początkujący jezeli chodzi o Symfony i ze takpowiem zawiesielem sie na zapytaniach do bazy.
Jak napisac takie zapytanie:
  1. SELECT a.imie, a.nazwisko, a.miasto, a.ulica, a.email, b.nazwa FROM klient a, firma b WHERE a.id=b.id;

?
Czytam tutoriale i dokumenatcje i nie moge tego zrozumiec albo znalesc.
Z gory dziekuje za pomoc.
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Symfony nie ma tu nic do rzeczy, więc możesz zmienić tag.

Jeżeli masz zapisaną relację pomiędzy klient - firma to powinieneś móc to łatwo pobrać poprzez:
  1. TableAPeer::doSelectJoinTableB();
Go to the top of the page
+Quote Post
mercii
post
Post #3





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 1.05.2006

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


Jestem zupelnie w tym zielony:
takie zapytanie daje aie cos:
  1. ...
  2. $c=new Criteria();
  3. $this->klient_list = KlientPeer::doSelectJoinFirma($c);

  1. Fatal error: Call to undefined method KlientPeer::doselectjoinfirma() in D:\xampp\htdocs\jobeet\apps\frontend\modules\klient\actions\actions.class.php on line 18
Go to the top of the page
+Quote Post
-=Peter=-
post
Post #4





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


A w pliku schema.yml masz zdefiniowane relacje między tabelami?

PS. Pewnie literówka/niedopatrzenie, ale zobacz do klauzuli where zapytania z pierwszego postu winksmiley.jpg

Ten post edytował -=Peter=- 30.12.2009, 22:57:48


--------------------
Go to the top of the page
+Quote Post
mercii
post
Post #5





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 1.05.2006

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


  1. firma:
  2. _attributes: { phpName: Firma }
  3. id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
  4. nazwa: { type: VARCHAR, size: '255', required: false }
  5. nip: { type: VARCHAR, size: '10', required: true }
  6. regon: { type: INTEGER, size: '11', required: false }
  7. miasto: { type: VARCHAR, size: '255', required: false }
  8. ulica: { type: VARCHAR, size: '255', required: false }
  9. emial: { type: VARCHAR, size: '255', required: false }
  10. telefon: { type: VARCHAR, size: '45', required: false }
  11. klient:
  12. _attributes: { phpName: Klient }
  13. id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
  14. Firma_id: { type: INTEGER, size: '11', required: true }
  15. imie: { type: VARCHAR, size: '255', required: false }
  16. nazwisko: { type: VARCHAR, size: '255', required: false }
  17. miasto: { type: VARCHAR, size: '255', required: false }
  18. ulica: { type: VARCHAR, size: '255', required: false }
  19. email: { type: VARCHAR, size: '255', required: false }
  20. _indexes: { FI__07: [Firma_id] }

tak to wyglada od strony schema.
Go to the top of the page
+Quote Post
-=Peter=-
post
Post #6





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Tak jak podejżewałem, nie masz zdefiniowanych relacji. Pole "firma_id" powinno być kluczem obcym.

Odsyłam do dokumentacji: klik, dokładnie przeanalizuj przykładowy plik schema.

Po tym gdy dojdziesz do tego czego brakuje, przebuduj model. Wtedy ten wcześniejszy kod powinien działać.

Ten post edytował -=Peter=- 30.12.2009, 23:16:08


--------------------
Go to the top of the page
+Quote Post
mercii
post
Post #7





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 1.05.2006

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


No wlasnie zalozylem ze jak zakladalem klucze obce w DB Designer to ladnie mi to wszsytko przerobi sie na yml a tu niestety nie.
Jakie jest polecenie abym mogl przebudowac model bez kasowania danych z bazy danych?
propel-build-all - czyjak wybiore odpowiedz N na pytaniu to model sie przebuduje?
Czy moze uzywa ktos sfPropelCustomJoinHelper.class.php ?
Ja uzylem i dostalem taki blad.
  1. Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'KlientPeer::doSelectRS' was given in D:\xampp\htdocs\jobeet\apps\frontend\lib\helper\sfPropelCustomJoinHelper.class.p
    hp on line 111
  2.  
  3. Fatal error: Call to a member function next() on a non-object in D:\xampp\htdocs\jobeet\apps\frontend\lib\helper\sfPropelCustomJoinHelper.class.p
    hp on line 78

Czy moze byc wina zlego modelu?

...
Super wszystko działa. Pierwszym sposobem to rozwiazalem wg wskazowek Petera.
Ale w jaki sposob moge w indexSuccess pobrac dane?
echo $klient->getEmail()
ale jak pobrac
np. firma - > nazwa

Ten post edytował mercii 31.12.2009, 00:05:45
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


$klient->getFirma()->getNazwa()

btw: stosowanie polskiego nazewnictwa to niezbyt dobry pomysł.
Go to the top of the page
+Quote Post
Gribo
post
Post #9





Grupa: Zarejestrowani
Postów: 237
Pomógł: 17
Dołączył: 1.11.2007
Skąd: Zielona Góra

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


może zanim zaczniesz sam pisac przeanalizuj podręczniki do symfony. Jak byś to zrobił nie zadawał być tak banalnych pytań. Wystarczyło by pierwszych 2-3 lekcji biggrin.gif


--------------------
Wyszukiwarka noclegów w Polsce i zagranicą.
Najlepszy katalog turystyczny wspomagający pozycjonowanie i promocje stron.
Go to the top of the page
+Quote Post
mercii
post
Post #10





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 1.05.2006

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


Tutoriala czytam cały czas w mairę potrzeby ponieważ nie mam czasu na zrobienie przykładowej aplikacji tylko muszę testwoać już na mojej konkretnej.
Już poradziłem sobie z wiekszością problemów i uważam że symfony jest super.
Mam jedynie problemy z zapytaniami.
Muszę połączyć 3 tabele co realizuje poprzez:
  1. $c = new Criteria();
  2. WymianaCzesciPeer::doSelectJoinCzesci($c);
  3. WymianaCzesciPeer::doSelectJoinSamochod($c);
  4. WymianaCzesciPeer::doSelectJoinZlecenie($c);

mam dostęp do wszystkich danych które potrzebuje.
Jednak potrzebuje jeszcze ograniczyć ilość wyników poprzez podanie w tabelii wyników ograniczenia dla jednej z kolumn
  1. $request->getParameter('id_zlecenia')

Udaje mi się to mniej więcej poprzez
  1. $this->wymiana_list = WymianaCzesciPeer::retrieveByPk($request->getParameter('id_zlecenia'));

Ale zapytan tworzy sie 4-5 a ograniczenie wystepuje tylko w jednej.
Jak sobie z tym poradzic?questionmark.gif Bardzo dziekuje za pomoc.
Go to the top of the page
+Quote Post
Crozin
post
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1) Pewnie już jest za późno ale osobiście sugerowałbym przerzucenie się na Doctrine winksmiley.jpg
2) Masz xxxPeer::doSelectJoinAll(Criteria c) - z tego powinieneś skorzystać
3) A jak w obiekcie Criteria ograniczyć wyniki do takich, gdzie wymianaCzęści.id = XYZ już pisać nie będę... masz to w dokumentacji jasno opisane
Go to the top of the page
+Quote Post
mercii
post
Post #12





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 1.05.2006

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


No i mam znowu problem.
Pobieram sobie dane, tworzą się zapytania sql i wszystko było by cacy gdyby nie fak ze muszę ograniczyc ilość wyświetlanych rekordów.
Opisze caly problem. Wiem ze moge to znaleść dokumentacji popróbować itd. Proszę mnie do miej nie odsyłac bo juz to robiłem.
  1. WymianaCzesciPeer::doSelectJoinAll($d);

daje mi takie zapytanie:
  1. SELECT wymiana_czesci.IDWYMIANA_CZESCI, wymiana_czesci.CZESCI_IDCZESCI, wymiana_czesci.SAMOCHOD_ID_VIN, wymiana_czesci.ZLECENIE_ID_ZLECENIA, wymiana_czesci.PRZEBIEG, wymiana_czesci.CENA, czesci.IDCZESCI, czesci.TYP_IDTYP, czesci.NAZAWA, czesci.NUMER, czesci.CENA, samochod.ID, samochod.PALIWO_ID, samochod.KLIENT_ID, samochod.MARKA, samochod.MODEL, samochod.POJEMNOSC, samochod.ID_TYP, samochod.ROK, samochod.VIN, zlecenie.ID_ZLECENIA, zlecenie.MECHANIK_IDMECHANIK, zlecenie.SAMOCHOD_ID_VIN, zlecenie.KLIENT_ID, zlecenie.DATAROZP, zlecenie.DATAZAK, zlecenie.CENA FROM `wymiana_czesci` LEFT JOIN czesci ON (wymiana_czesci.CZESCI_IDCZESCI=czesci.IDCZESCI) LEFT JOIN samochod ON (wymiana_czesci.SAMOCHOD_ID_VIN=samochod.ID) LEFT JOIN zlecenie ON (wymiana_czesci.ZLECENIE_ID_ZLECENIA=zlecenie.ID_ZLECENIA)

I nie wiem jak ograniczyc liczbe powtarzajacych sie rekordow:
Wiem ze nalezy to zrobic z uzyciem
  1. $d = new Criteria();
  2. $d->setDistinct(true);
  3. $d->addSelectColumn(WymianaCzesciPeer::ZLECENIE_ID_ZLECENIA);

Ale mi to nie działa. BAardzo proszę o pomoc.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 22:15