Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Propel] Relacja jeden do wielu / wiele do wielu., I kilka innych pytań.
starach
post 17.12.2008, 11:54:30
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Chciałbym użyć Propel'a w swoim frameworku. Niestety mam z nim parę problemów.

schema.xml
Kod
<?xml version="1.0" encoding="utf-8"?>
<!--Autogenerated by PropelSchemaReverseTask class.-->
<database name="orglee" defaultIdMethod="native">
  <table name="article_categories" phpName="Categories">
    <column name="acs_id" type="INTEGER" size="11" primaryKey="true" autoIncrement="true" required="true"/>
    <column name="acs_name" type="VARCHAR" size="256" required="false"/>
    <column name="acs_color" type="VARCHAR" size="9" required="false"/>
  </table>
  <table name="article_category" phpName="Category">
    <column name="_al_id" type="INTEGER" size="11" primaryKey="true" required="true"/>
    <column name="_acs_id" type="INTEGER" size="11" required="false"/>
        <foreign-key foreignTable="article_list">
        <reference local="_al_id" foreign="al_id"/>
    </foreign-key>
    <foreign-key foreignTable="article_categories">
        <reference local="_acs_id" foreign="acs_id"/>
    </foreign-key>
  </table>
  <table name="article_list" phpName="Article">
    <column name="al_id" type="INTEGER" size="11" primaryKey="true" autoIncrement="true" required="true"/>
    <column name="al_title" type="VARCHAR" size="256" required="false"/>
    <column name="al_desc" type="LONGVARCHAR" required="false"/>
    <column name="al_content" type="LONGVARCHAR" required="false"/>
    <column name="al_date_added" type="TIMESTAMP" required="false"/>
    <column name="al_date_update" type="TIMESTAMP" required="false"/>
    <column name="_u_id" type="INTEGER" size="11" required="false"/>
  </table>
</database>
Ładnie generuje mi się abstrakcja ( _u_id - jeszcze nie jest zaimplementowane )

Połączenie i test:
  1. <?php
  2. set_include_path(DIR_OS_MODULE."Articles/Model/ORM".PATH_SEPARATOR.get_include_path());
  3.        Propel::init(DIR_OS_MODULE.'Articles/Model/ORM/conf/Article-conf'.EXT);
  4.        
  5.        $arts = Module_Articles_Model_ORM_ArticlePeer::doSelect(new Criteria());
  6.        /* @var $art Module_Articles_Model_ORM_Article */
  7.        
  8.        foreach($arts as $art)
  9.        {
  10.            $cat = $art->getCategory();
  11.            $cats = $cat->getCategories();
  12.            var_dump($art);
  13.        }
  14. ?>
Pomińmy na razie ścieżki, ale z tym też mam mały kłopot.
No i teraz problem numero uno.
var_dump() wyświetla mi następujące wyniki ( pominąłem kilka prywatnych pół żeby skrócić wynik )
Kod
object(Module_Articles_Model_ORM_Article)[7]
  protected 'al_id' => int 1
  protected 'al_title' => string 'Tytuł pierwszego' (length=17)
  protected 'al_desc' => string 'Opis pierwszego artykułu' (length=25)
  protected 'al_content' => string 'Treść pierwszego artykułu' (length=28)
  protected 'al_date_added' => string '0000-00-00 00:00:00' (length=19)
  protected 'al_date_update' => string '0000-00-00 00:00:00' (length=19)
  protected '_u_id' => int 1
  protected 'singleCategory' =>
    object(Module_Articles_Model_ORM_Category)[10]
      protected '_al_id' => int 1
      protected '_acs_id' => int 2
      protected 'aArticle' => null
      protected 'aCategories' =>
        object(Module_Articles_Model_ORM_Categories)[15]
          protected 'acs_id' => int 2
          protected 'acs_name' => string 'Cat 2' (length=5)
          protected 'acs_color' => null
          protected 'collCategorys' => null
          private 'lastCategoryCriteria' => null
          protected 'alreadyInSave' => boolean false
          protected 'alreadyInValidation' => boolean false
          protected 'validationFailures' =>
Przede wszystkim propel nie pobrał mi wszystkich kategorii artykułów. Testowy artykuł podpiąłem pod dwie kategorie. Drugim problemem jest ten bezsensowny adapter 'Category'. Najpierw muszę pobrać z artykułu adapter a potem dopiero kategorię.
Było by wielkim uproszczeniem gdyby dało się połączyć ...ORM_Category i ORM_Categories w taki sposób żeby metoda z ORM_Article zwracała mi tablicę z obiektową reprezentacją kategorii. Czy jest to wykonalne? Tak na marginesie chciałbym dodać że przeczytałem http://propel.phpdb.org/trac/wiki/Users/Do...nyRelationships i niestety w moich obiektach nie wiedzieć czemu nie ma żadnej metody z Join w nazwie.

Lecimy dalej.
Kolejną sprawą z którą mam kłopot to podział na katalogi. Zapewne zwróciliście uwagę na diabelnie długie nazwy obiektów. Dlatego są one takie bo chciałem umieścić abstrakcję danych w katalogach modułów czyli [root]/module/Articles/Model/ORM/etc... Kiedy zainicjowałem propela zdałem sobie sprawę z tego że w większości fw modele są umieszczane w jednym katalogu. Chciałbym żebyście mi pomogli rozpatrzeć dwie możliwości ich składowania. 1) j/w w katalogach modułów i 2) w jednym katalogu ogólnym.
Nie wiem nawet czy pierwszy przypadek jest możliwy. Bo może zachodzić potrzeba wielokrotnej inicjalizacji propela z różnymi plikami konfiguracyjnymi. W drugim nie podoba mi się rozprzestrzenienie bibliotek. Jeśli bym chciał kiedyś zrobić z mojego fw cms i udostępnić. Spory kłopot sprawiłaby mi implementacja systemu paczek z rozszerzeniami właśnie przez abstrakcyjny dostęp do danych składowany w jednym katalogu ( kopiowanie plików sprawdzanie wersji nadpisywanie etc. ).

Ostatnią sprawą jest możliwość korzystania z bibliotek generowanych przez Propela z innych jego bibliotek.
Przykładem może być wspomniane wcześniej pole _u_id. Chciałbym żeby model User był częścią FW, a nie dodatkową biblioteką.
Więc może zajść spora rozbieżność ścieżek do plików z klasami. [root]/engine/User/klasy Oprócz tego pozostaje problem pobierania np. Artykułów przez User i odwrotnie. No i czy przy okazji dodania nowego modułu lub jego modyfikacji będę musiał generować wszystko na nowo?
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 Wersja Lo-Fi Aktualny czas: 12.05.2024 - 11:56