Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Skrypty obsługi baz danych _ [symfony][propel] join, nie che pobrać kolumn z dołączonych tabel

Napisany przez: wafcio 5.08.2010, 21:53:00

Mam zapytanie SQL z JOINem:

  1. SELECT ... FROM `teachers` JOIN `teacherCategories` ON `teachers`.`categoryId` = `teachersCategories`.`id`


chciałem to zakodować w symfony, propelu i wyszło coś takiego:
  1. $c = new Criteria();
  2. $c->addJoin(TeachersPeer::CATEGORYID, TeacherCategoriesPeer::ID, CRITERIA::INNER_JOIN)
  3. $content = TeachersPeer::doSelect($c)


jest jednak problem, bowiem nie zwraca mi wartości pól z dołączonej tabeli, w internecie znalazłem trzy rozwiązania:
1. dopisanie własnych kilkunastu/kilkudziesięciu linijek kodu (to pominołem)
2. użycie klasy sfPropelCustomJoinHelper, tylko nie wiem gdzie wstawić plik php, żeby klasa się automatycznie ładowała
3. doSelect zamienić na doSelectJoinAll, ale to mi zgłasza, że nie znaleziono tabeli/aliasu teacherCategories

Chciałem powiedzieć, że nie jestem doświadczonym programistom w propelu, szukałem kilka dni jak rozwiązać ten problem, ale nic mnie nie nakierowało na poprawne, działające rozwiązanie. Byłbym bardzo wdzięczny za pomoc.

Napisany przez: arecki 6.08.2010, 08:35:01

Może w schema.yml nie masz zdefiniowanych relacji odpowiednich ? Ewentualnie napisz jak się dostajesz do pól z tabeli TeachersCategories bo powinno być coś takiego:

  1. // obiekt Teachers
  2. http://www.php.net/echo $teacher->getTeacherCategoriess()->getPole();

Napisany przez: wafcio 6.08.2010, 10:33:48

Cytat(arecki @ 6.08.2010, 09:35:01 ) *
Może w schema.yml nie masz zdefiniowanych relacji odpowiednich ? Ewentualnie napisz jak się dostajesz do pól z tabeli TeachersCategories bo powinno być coś takiego:

  1. // obiekt Teachers
  2. http://www.php.net/echo $teacher->getTeacherCategoriess()->getPole();


1. W schema.yml mam ustawione klucze obce w odpowiednich miejscach
2. Co do pól z TeachersCategories to przecież napisałem wyżej, że po wykonaniu zapytania nie są zwracane, wykonuje funkcję print_r, aby sprawdzić co zmienna ma, i nie ma tych pól.

Napisany przez: arecki 6.08.2010, 12:59:06

Zrób var_dump($zmienna_teacher_obiekt) i wstaw tutaj. Zobaczymy co tam masz.

Napisany przez: wafcio 7.08.2010, 11:20:29

  1. http://www.php.net/array(29) {
  2. [0]=>
  3. object(Teachers)#81 (19) {
  4. ["id":protected]=>
  5. int(1)
  6. ["grad":protected]=>
  7. string(3) "..."
  8. ["firstname":protected]=>
  9. string(5) "..."
  10. ["lastname":protected]=>
  11. string(10) "..."
  12. ["image":protected]=>
  13. string(17) "..."
  14. ["categoryid":protected]=>
  15. int(1)
  16. ["email":protected]=>
  17. string(15) "..."
  18. ["www":protected]=>
  19. NULL
  20. ["aTeachercategories":protected]=>
  21. NULL
  22. ["collTeacherclassess":protected]=>
  23. NULL
  24. ["lastTeacherclassesCriteria":"BaseTeachers":private]=>
  25. NULL
  26. ["collConsultationss":protected]=>
  27. NULL
  28. ["lastConsultationsCriteria":"BaseTeachers":private]=>
  29. NULL
  30. ["alreadyInSave":protected]=>
  31. bool(false)
  32. ["alreadyInValidation":protected]=>
  33. bool(false)
  34. ["validationFailures":protected]=>
  35. http://www.php.net/array(0) {
  36. }
  37. ["_new":"BaseObject":private]=>
  38. bool(false)
  39. ["_deleted":"BaseObject":private]=>
  40. bool(false)
  41. ["modifiedColumns":protected]=>
  42. http://www.php.net/array(0) {
  43. }
  44. ...
  45. }


W doctrinie nie byłoby problemu z joinem ?

Napisany przez: arecki 9.08.2010, 13:48:17

Człowiek patrzy, patrzy i ślepy jest. Zamień

  1. $content = TeachersPeer::doSelect($c);


na:
  1. $content = TeachersPeer::doSelectJoinTeacherCategories($c);


I powinno zadziałać.

EDIT. Hmm... sprawdziłem u mnie i nawet bez tego joina działa. Może pokaż przy okazji jeszcze schema.yml

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)