Grupa MagazynyInternetowe
Online: 995
Propel, najbardziej popularny system mapowania relacyjno-obiektowego w PHP skraca cykl produkcyjny aplikacji internetowej. Poradnik zawiera zestawienie popularnych problemów, z którymi borykają się początkujący użytkownicy Propela.
Włodzimierz Gajda
Klasy dostępu do bazy danych mogą stosować dowolne kodowanie znaków, niezależne od ustawień serwera.
Przed uruchomieniem generatora Propel (tj. skryptu propel-gen.bat) w pliku runtime-conf.xml ustalamy kodowanie znaków dla połączenia:
1. <connection> 2. ... 3. <encoding>utf8</encoding> 4. </connection>
Wygenerowane klasy będą stosowały podane kodowanie. Rozwiązanie takie ma dwie zalety:
Skrypt PHP może - za pośrednictwem propelowych obiektów - łączyć się z wieloma bazami danych.
Przed uruchomieniem generatora klas (tj. skryptu propel-gen.bat) w pliku runtime-conf.xml należy wymienić wszystkie bazy danych:
1. <datasources default="osoby"> 2. <datasource id="osoby"> 3. <adapter>mysql</adapter> 4. <connection> 5. <phptype>mysqli</phptype> 6. <hostspec>localhost</hostspec> 7. <database>osoby</database> 8. <username>osobyadm</username> 9. <password>osobypass</password> 10. <encoding>utf8</encoding> 11. </connection> 12. </datasource> 13. <datasource id="wyrazy"> 14. <adapter>mysql</adapter> 15. <connection> 16. <phptype>mysqli</phptype> 17. <hostspec>localhost</hostspec> 18. <database>wyrazy</database> 19. <username>wyrazyadm</username> 20. <password>wyrazypass</password> 21. <encoding>utf8</encoding> 22. </connection> 23. </datasource> 24. </datasources>
Dla każdego wymienionego źródła danych przygotowujemy osobny plik XML z opisem struktury bazy, np.:
1. wyrazy-schema.xml 2. osoby-schema.xml
Tak skonfigurowany Propel wygeneruje plik konfiguracyjny -conf.php, umożliwiający łączenie się obiektów z wieloma bazami, przy czym wszystkie wygenerowane klasy trafią do jednego folderu.
Jeśli w pliku build.properties dodamy wpis:
propel.packageObjectModel = true
zaś w plikach -schema.xml umieścimy atrybut package:
<database package="wyrazy" name="wyrazy" ... >
to generowane klasy zostaną umieszczone w osobnych folderach. Atrybut package zawierający kropkę:
package="core.system"
spowoduje dalszy podział generowanych folderów na podfoldery:
core/system
W skrypcie PHP, który korzysta z kilku połączeń, należy najpierw wywołać metodę init():
Propel::init('dwiebazy-conf.php');
a następnie utworzyć zmienne umożliwiające korzystanie z połączeń:
1. $con_osoby = Propel::getConnection('osoby'); 2. $con_wyrazy = Propel::getConnection('wyrazy');
Metody pobierające rekordy z baz danych otrzymają dodatkowy parametr ustalający połączenie:
1. $wyrazy = WyrazPeer::doSelect(new Criteria, $con_wyrazy); 2. $osoby = OsobaPeer::doSelect(new Criteria, $con_osoby);
Pierwsza z powyższych instrukcji pobiera dane z bazy o nazwie wyrazy, a druga z bazy o nazwie osoby.
Utworzone obiekty nie wymagają podawania połączenia. Korzystamy z nich identycznie jak w skryptach, które stosowały jedną bazę danych:
1. echo $osoby[0]->getImie() 2. 3. $wyrazy[0]->setWyraz('Lorem'); 4. $wyrazy[0]->save();
Powiązane publikacje
Brak komentarzy
Artykuły tego autora:
PHP zdobył przed laty popularność jako język skryptowy do tworzenia stron internetowych. Wzięła się ona z pewnością stąd, że jeszcze kilka lat temu nie było alternatywy dla szybkiego, prostego i dostosowanego do potrzeb WWW języka. Dziś jest inaczej. Prezentujemy języki i technologie, które również powstały z myślą o programowaniu webowym.
Polecamy:
Na skróty:
Magazyny Internetowe| Co za ile| Programy| Praca| Magazyn Internet| Internet Maker| Web Toster| ForumNasze serwisy: