Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: rożnica między Category.class.php i CategoryTable.class.php
Forum PHP.pl > Forum > PHP
damianooo
Witam,

Chciałem prosić o wytłumaczenie działania/przeznaczenia dwóch klas generowanych przez Symfony w momencie generowania tabel bazy danych na przykładzie tabeli "Category" , a więc: Category.class.php oraz CategoryTable.class.php ... tylko proszę o przykłady metod z zapytaniami ponieważ o regułkach czytałem smile.gif ...

Chodzi o to że dopiero zaczynam przygodę z Symfony i nie wszystko na początku jest takie jasne jakby się mogło wydawać. Mam wrażenie że nie ma znaczenia w której z tych dwóch klas zrobię sobie metodę z zapytaniem typu:

SELECT * FROM Category

lub

SELECT * FROM Category WHERE is_active = 1

daję tylko proste przykłady bo operuję ogólnie na złączeniach i trochę nie kumam po co są aż DWIE klasy generowane przez Symfony. Przecież wystarczyłaby tylko jedna klasa. Po co dwie ? Może nie mam racji ... hmm


dzięki
Crozin
1. Jeżeli dopiero zaczynasz z Sf/Doctrine, dlaczego robisz to z tak starymi wersjami obu projektów (gałęzie 1.x)?
2. Obiekty Category reprezentują pojedynczy wpis w bazie danych, natomiast obiekt CategoryTable reprezentuje tabelę - w nim powinny znaleźć się metody zwracające dane.
damianooo
Co zasugerowało Ci, że robię to na tak starych wersjach obu projektow ?


mam nadzieję że nie mój zapis w SQL

Ja to napisałem przykładowo

A wiem że powinno być coś tego typu:


public function getCategoryDate()
{
$q = $this->createQuery('c')
->where('c.is_active = ?', true)
;

return $q->execute();
}


P.S. Nie chodzi Ci chyba o to że używam Symfony 1.4 zamiast 2.0 ? smile.gif


Jednak o to Ci chodzi.

A więc spytam: Dlaczego by nie ? Mam powód, dla którego używam Symfony 1.4 - na razie muszę smile.gif ... w Symfony 2.0 nie ma generowania takich dwóch klas ? Jest jedna ? Jeśli tak to fakt , jest postęp smile.gif ... pewnie będę za jakiś czas zmieniał na Symfony 2.0 ale nie wiem kiedy ponieważ to nie zależy ode mnie smile.gif

na razie chciałem skumać te różnice w tych dwóch klasach żeby to dobrze rozumieć i umieć stosować bez problemu
Crozin
Cytat
Co zasugerowało Ci, że robię to na tak starych wersjach obu projektow ?
Nazewnictwo klas wygenerowanych przez Doctrine.
Cytat
A więc spytam: Dlaczego by nie ? Mam powód, dla którego używam Symfony 1.4 - na razie muszę ...
Jeżeli musisz z jakiegoś powodu korzystać ze starej wersji to OK. Jednak w pierwszym poście zasugerowałeś, że dopiero uczysz się korzystać z obu narzędzi stąd moja uwaga, że uczenie się w celu przyszłego stosowania starej wersji jest bez sensu.
Cytat
w Symfony 2.0 nie ma generowania takich dwóch klas ? Jest jedna ? Jeśli tak to fakt , jest postęp ... pewnie będę za jakiś czas zmieniał na Symfony 2.0 ale nie wiem kiedy ponieważ to nie zależy ode mnie
To jest kwestia Doctrine, nie Symfony. Jednak nadal są dwie klasy, ponieważ obiekty tych klas są odpowiedzialne za zupełnie inne zadania.

Klasa Category jest klasą encji, natomiast klasa CategoryTable (CategoryRepository w przypadku Doctrine2) jest klasą repozytorium. Google: entity repository model - powinno coś tam sensownego wyszukać, z jasnym opisem za co dokładnie odpowiedzialne są obiekty jednej i drugiej klasy.
Adi32
Cytat(Crozin @ 14.08.2012, 13:00:16 ) *
Klasa Category jest klasą encji, natomiast klasa CategoryTable (CategoryRepository w przypadku Doctrine2) jest klasą repozytorium.


Że się tak wkleję...
Crozin, czytałem na temat encji różne informacje, na tyle różne, że wraz nie potrafiłbym wytłumaczyć co to jest.
Mogłbyś wytłumaczyć w prosty sposób o co chodzi? Korzystam z Doctrine 1, rzadziej z D2 i o repozytorium też niewiele wiem... Czym różni się encja od repozytorium?
damianooo
Cytat
2. Obiekty Category reprezentują pojedynczy wpis w bazie danych, natomiast obiekt CategoryTable reprezentuje tabelę - w nim powinny znaleźć się metody zwracające dane.


Możesz mi to wytłumaczyć na podstawie poniższych metod :

Bo na przykład w tutorialu z Symfony , w Jobeet jest tak :

w klasie Category:

  1. public function getActiveJobsQuery()
  2. {
  3. $q = Doctrine_Query::create()
  4. ->from('JobeetJob j')
  5. ->where('j.category_id = ?', $this->getId());
  6.  
  7. return Doctrine_Core::getTable('JobeetJob')->addActiveJobsQuery($q);
  8. }


a w klasie CategoryTable :

  1. public function getWithJobs()
  2. {
  3. $q = $this->createQuery('c')
  4. ->leftJoin('c.JobeetJobs j')
  5. ->where('j.expires_at <> ?', date('Y-m-d H:i:s', time()));
  6.  
  7. return $q->execute();
  8. }

rzymek01
@Adi32,
to są elementy Domain-Driven Design,
tutaj jest przystepnie opisane: http://net.tutsplus.com/tutorials/domain-driven-design/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.