Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> rożnica między Category.class.php i CategoryTable.class.php, Framework Symfony ( ORM Doctrine )
damianooo
post
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


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

Ten post edytował damianooo 14.08.2012, 09:05:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
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%)
-----


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.
Go to the top of the page
+Quote Post
damianooo
post
Post #3





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


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

Ten post edytował damianooo 14.08.2012, 10:13:45
Go to the top of the page
+Quote Post
Crozin
post
Post #4





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

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


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.
Go to the top of the page
+Quote Post
Adi32
post
Post #5





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


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?


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
damianooo
post
Post #6





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


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. }

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





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


@Adi32,
to są elementy Domain-Driven Design,
tutaj jest przystepnie opisane: http://net.tutsplus.com/tutorials/domain-driven-design/


--------------------
:]
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: 21.08.2025 - 13:06